64 bit assembler > Mikl__'s ml64 examples
How to play WAV/MP3-file from memory?
Mikl__:
Hi, All!
PlaySound with SND_MEMORY is not suitable.
Preferably via mciwioOpen/mciwioPlay or any other options. . .
Thank you!
Greenhorn:
Hi Mikl__,
did you already gave BASS.DLL a try ?
Mikl__:
Hello, Greenhorn!
Thanks for the tip, no, I haven't tried it, now I'll read about this dll
LiaoMi:
Hi Mikl,
--- Code: ---; #########################################################################
;
; This demo shows how to use the new bitmap button custom control in
; MASM32 library. This control allows you to use any UP & DOWN bitmap
; you like so you can use non rectangular shapes if you bother to
; match the bitmap back colour to the colour of the client area.
;
; These 2 bitmaps were created by "Novatrix" from New Zealand.
;
; #########################################################################
.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include bmpbutns.inc ; local includes for this file
include \masm32\include\winmm.inc
Include \masm32\macros\macros.asm
includelib \masm32\lib\winmm.lib
; #########################################################################
; --------------------------------------------------------
PlayMp3File PROTO :DWORD,:DWORD
; --------------------------------------------------------
.data
Mp3DeviceID DD 0
Mp3Device DB "MPEGVideo",0
.data?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
; #########################################################################
WinMain proc hInst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD
;====================
; Put LOCALs on stack
;====================
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
LOCAL Wwd :DWORD
LOCAL Wht :DWORD
LOCAL Wtx :DWORD
LOCAL Wty :DWORD
;==================================================
; Fill WNDCLASSEX structure with required variables
;==================================================
invoke LoadIcon,hInst,500 ; icon ID
mov hIcon, eax
szText szClassName,"Project_Class"
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInst
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
m2m wc.hIcon, hIcon
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
m2m wc.hIconSm, hIcon
invoke RegisterClassEx, ADDR wc
;================================
; Centre window at following size
;================================
mov Wwd, 300
mov Wht, 255
invoke GetSystemMetrics,SM_CXSCREEN
invoke TopXY,Wwd,eax
mov Wtx, eax
invoke GetSystemMetrics,SM_CYSCREEN
invoke TopXY,Wht,eax
mov Wty, eax
invoke CreateWindowEx,WS_EX_LEFT,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInst,NULL
mov hWnd,eax
invoke LoadMenu,hInst,600 ; menu ID
invoke SetMenu,hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
;===================================
; Loop until PostQuitMessage is sent
;===================================
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
return msg.wParam
WinMain endp
; #########################################################################
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
LOCAL var :DWORD
LOCAL caW :DWORD
LOCAL caH :DWORD
LOCAL Rct :RECT
LOCAL hDC :DWORD
LOCAL hBmp1 :DWORD
LOCAL hBmp2 :DWORD
LOCAL Ps :PAINTSTRUCT
LOCAL buffer1[128]:BYTE ; these are two spare buffers
LOCAL buffer2[128]:BYTE ; for text manipulation etc..
.if uMsg == WM_CREATE
szText msg2,"sample.mp3"
Invoke PlayMp3File, hWin, Addr msg2
.endif
.if uMsg == WM_COMMAND
.if wParam == 500
szText msg1,"Hi, you clicked the bitmap button"
invoke MessageBox,hWin,ADDR msg1,ADDR szDisplayName,MB_OK
.endif
;======== menu commands ========
.elseif uMsg == WM_CREATE
; ------------------------------------
; the one and only bitmap button call
; ------------------------------------
invoke BmpButton,hWin,0,0,203,204,500
.elseif uMsg == WM_SIZE
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin,ADDR Ps
mov hDC, eax
invoke Paint_Proc,hWin,hDC
invoke EndPaint,hWin,ADDR Ps
return 0
.elseif uMsg == WM_CLOSE
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
return 0
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
WndProc endp
; ########################################################################
TopXY proc wDim:DWORD, sDim:DWORD
shr sDim, 1 ; divide screen dimension by 2
shr wDim, 1 ; divide window dimension by 2
mov eax, wDim ; copy window dimension into eax
sub sDim, eax ; sub half win dimension from half screen dimension
return sDim
TopXY endp
; #########################################################################
Paint_Proc proc hWin:DWORD, hDC:DWORD
LOCAL btn_hi :DWORD
LOCAL btn_lo :DWORD
LOCAL Rct :RECT
invoke GetSysColor,COLOR_BTNHIGHLIGHT
mov btn_hi, eax
invoke GetSysColor,COLOR_BTNSHADOW
mov btn_lo, eax
return 0
Paint_Proc endp
; ########################################################################
; ###############################################################
PlayMp3File proc hWin:DWORD,NameOfFile:DWORD
LOCAL mciOpenParms:MCI_OPEN_PARMS,mciPlayParms:MCI_PLAY_PARMS
mov eax,hWin
mov mciPlayParms.dwCallback,eax
mov eax,OFFSET Mp3Device
mov mciOpenParms.lpstrDeviceType,eax
mov eax,NameOfFile
mov mciOpenParms.lpstrElementName,eax
invoke mciSendCommand,0,MCI_OPEN,MCI_OPEN_TYPE or MCI_OPEN_ELEMENT,ADDR mciOpenParms
mov eax,mciOpenParms.wDeviceID
mov Mp3DeviceID,eax
invoke mciSendCommand,Mp3DeviceID,MCI_PLAY,MCI_NOTIFY,ADDR mciPlayParms
ret
PlayMp3File endp
; ###############################################################
end start
--- End code ---
jj2007:
Check DSound, in particular IDirectSound8::CreateSoundBuffer and IDirectSoundBuffer8::Play
Navigation
[0] Message Index
[#] Next page
Go to full version