Как с помощью универсальной функции PlaySound - воспроизвести ресурс из подгружаемой библиотеки (SND_RESOURCE), точнее сказать даже в какой индификатор ресурсов засовывать WAV-файл. (И как при компиляции ресурсов в FASM`e задать СВОЕМУ разделу имя, а не индификатор - в частности ("WAVE"))
Без ресурсов WAV-файл можно послушать так. Код (Text): format PE GUI 4.0 entry MyEntry include '%fasminc%\Win32a.inc' SND_ASYNC equ 1h section '.data' data readable writeable pzsFiles db "1.wav",0 section '.code' code readable executable MyEntry: invoke sndPlaySound,pzsFiles,SND_ASYNC invoke Sleep,10000 ExitApp: invoke ExitProcess,0 section '.idata' import data readable writeable library kernel, 'KERNEL32.DLL',\ winmm, 'WINMM.DLL' import winmm,\ sndPlaySound, 'sndPlaySoundA' import kernel,\ ExitProcess, 'ExitProcess',\ Sleep, 'Sleep'
вызываем так: Код (Text): PlaySound(MAKEINTRESOURCE(10),hInstance,SND_NOWAIT|SND_SYNC|SND_RESOURCE); ресурсы компилим и юзаем как отдельный файл: Код (Text): ///////////////////////////////////////////////////////////////////////////// // // WAVE // 10 WAVE "file.wav"
Надо внимательнее читать вопрос! Я просил про ресурсы - написали про файл! ответ нашёл здесь: http://wasm.ru/forum/viewtopic.php?pid=153480 Код (Text): invoke PlaySound,szResourceName_or_ID,[hInstance],SND_RESOURCE OR SND_ASYNC ;- воспроизводит из секции "WAV" или "WAVE" (если память не изменяет [: ) спасибо за внимание :cool:
PaVeL_PoL , буду очень благодарен за пример исходника, со звуковыми ресурсами. Сам сделал вот так, но не уверен, что это оптимальный вариант. Код (Text): format PE GUI 4.0 entry start include 'win32a.inc' SND_ALIAS = 0x10000 SND_ALIAS_ID = 0x110000 SND_ALIAS_START = 0x0 SND_APPLICATION = 0x80 SND_ASYNC = 0x1 SND_FILENAME = 0x20000 SND_LOOP = 0x8 SND_MEMORY = 0x4 SND_NODEFAULT = 0x2 SND_NOSTOP = 0x10 SND_NOWAIT = 0x2000 SND_PURGE = 0x40 SND_RESERVED = 0xFF000000 SND_RESOURCE = 0x40004 SND_SYNC = 0x0 SND_TYPE_MASK = 0x170007 SND_VALID = 0x1F SND_VALIDFLAGS = 0x17201F section 'data' data readable writeable hInstance dd ? hResWav dd ? hResWavDat dd ? section '.code' code readable executable start: invoke GetModuleHandle,0 mov [hInstance],eax invoke DialogBoxParam,eax,1,0,DialogProc,0 invoke ExitProcess,0 proc DialogProc uses ebx esi edi,hwnd,wmsg,wparam,lparam cmp [wmsg],WM_COMMAND je .wmcommand cmp [wmsg],WM_CLOSE je .wmclose xor eax,eax jmp .finish .wmcommand: cmp [wparam],IDCANCEL je .stop cmp [wparam],IDOK jne .finish invoke FindResource,[hInstance],IDW_WAVE,RT_RCDATA mov [hResWav],eax invoke LoadResource,[hInstance],[hResWav] mov [hResWavDat],eax invoke LockResource,[hResWavDat] invoke PlaySound,[hResWavDat],NULL,SND_ASYNC+SND_MEMORY+SND_LOOP jmp .finish .stop: invoke PlaySound, 0, 0, 0 jmp .finish .wmclose: invoke EndDialog,[hwnd],0 .processed: mov eax,1 .finish: ret endp section '.idata' import data readable library kernel32, 'KERNEL32.DLL',\ user32, 'USER32.DLL',\ winmm, 'WINMM.DLL' include 'api/winmm.inc' include 'api/kernel32.inc' include 'api/user32.inc' section '.rsrc' resource data readable IDW_WAVE = 2000 directory RT_DIALOG,dialogs,\ RT_RCDATA,wave resource wave,IDW_WAVE,LANG_NEUTRAL,wavefile resdata wavefile file 'sound.wav' endres resource dialogs,\ 1,LANG_RUSSIAN+SUBLANG_DEFAULT,main_dialog dialog main_dialog,'Wave Test',0,0,120,45,WS_SYSMENU+DS_CENTER dialogitem 'BUTTON','&Play',IDOK,10,10,50,13,WS_VISIBLE+\ WS_TABSTOP+BS_DEFPUSHBUTTON dialogitem 'BUTTON','&Stop',IDCANCEL,64,10,40,13,WS_VISIBLE+\ WS_TABSTOP+BS_PUSHBUTTON enddialog
TaileR зачем вам ресурсы? Код (Text): format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' SND_MEMORY = 4h SND_NOWAIT = 2000h SND_SYNC = 0h section '.text' code readable executable start: invoke PlaySound, cry, NULL, SND_MEMORY or SND_NOWAIT or SND_SYNC invoke ExitProcess, 0 cry file 'cry.wav' section '.rdata' import data readable library kernel32,'KERNEL32.DLL',\ winmm,'winmm.dll' import kernel32,\ ExitProcess,'ExitProcess' import winmm,\ PlaySound,'PlaySoundA'