Fasm - звуковые ресурсы

Discussion in 'WASM.ASSEMBLER' started by PaVeL_PoL, May 2, 2007.

  1. PaVeL_PoL

    PaVeL_PoL New Member

    Blog Posts:
    0
    Joined:
    Apr 22, 2007
    Messages:
    14
    Как с помощью универсальной функции PlaySound - воспроизвести ресурс из подгружаемой библиотеки (SND_RESOURCE), точнее сказать даже в какой индификатор ресурсов засовывать WAV-файл.
    (И как при компиляции ресурсов в FASM`e задать СВОЕМУ разделу имя, а не индификатор - в частности ("WAVE"))
     
  2. S_Alex

    S_Alex Alex

    Blog Posts:
    0
    Joined:
    Aug 27, 2004
    Messages:
    561
    Location:
    Ukraine
    Без ресурсов WAV-файл можно послушать так.
    Code (Text):
    1. format PE GUI 4.0
    2. entry MyEntry
    3.  
    4. include '%fasminc%\Win32a.inc'
    5.  
    6. SND_ASYNC                            equ 1h
    7.  
    8. section '.data' data readable writeable
    9. pzsFiles db "1.wav",0
    10.  
    11. section '.code' code readable executable
    12.  
    13. MyEntry:
    14.     invoke sndPlaySound,pzsFiles,SND_ASYNC
    15.     invoke  Sleep,10000
    16. ExitApp:
    17.     invoke ExitProcess,0
    18.  
    19.  
    20.  
    21.  
    22. section '.idata' import data readable writeable
    23.  
    24.   library   kernel, 'KERNEL32.DLL',\
    25.             winmm,  'WINMM.DLL'
    26.            
    27.   import  winmm,\
    28.         sndPlaySound,   'sndPlaySoundA'
    29.  
    30.   import  kernel,\
    31.       ExitProcess,    'ExitProcess',\
    32.       Sleep,            'Sleep'
     
  3. Avoidik

    Avoidik New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2004
    Messages:
    288
    Location:
    Russia
    вызываем так:
    Code (Text):
    1. PlaySound(MAKEINTRESOURCE(10),hInstance,SND_NOWAIT|SND_SYNC|SND_RESOURCE);
    ресурсы компилим и юзаем как отдельный файл:
    Code (Text):
    1. /////////////////////////////////////////////////////////////////////////////
    2. //
    3. // WAVE
    4. //
    5.  
    6. 10                      WAVE                    "file.wav"
     
  4. PaVeL_PoL

    PaVeL_PoL New Member

    Blog Posts:
    0
    Joined:
    Apr 22, 2007
    Messages:
    14
    Надо внимательнее читать вопрос! Я просил про ресурсы - написали про файл! ответ нашёл здесь:
    http://wasm.ru/forum/viewtopic.php?pid=153480
    Code (Text):
    1. invoke PlaySound,szResourceName_or_ID,[hInstance],SND_RESOURCE OR SND_ASYNC
    ;- воспроизводит из секции "WAV" или "WAVE" (если память не изменяет [: )

    спасибо за внимание :cool:
     
  5. TaileR

    TaileR Сергей

    Blog Posts:
    0
    Joined:
    Sep 17, 2008
    Messages:
    7
    PaVeL_PoL , буду очень благодарен за пример исходника, со звуковыми ресурсами. Сам сделал вот так, но не уверен, что это оптимальный вариант.

    Code (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include 'win32a.inc'
    4.  
    5. SND_ALIAS       = 0x10000
    6. SND_ALIAS_ID    = 0x110000
    7. SND_ALIAS_START = 0x0
    8. SND_APPLICATION = 0x80
    9. SND_ASYNC       = 0x1
    10. SND_FILENAME    = 0x20000
    11. SND_LOOP        = 0x8
    12. SND_MEMORY      = 0x4
    13. SND_NODEFAULT   = 0x2
    14. SND_NOSTOP      = 0x10
    15. SND_NOWAIT      = 0x2000
    16. SND_PURGE       = 0x40
    17. SND_RESERVED    = 0xFF000000
    18. SND_RESOURCE    = 0x40004
    19. SND_SYNC        = 0x0
    20. SND_TYPE_MASK   = 0x170007
    21. SND_VALID       = 0x1F
    22. SND_VALIDFLAGS  = 0x17201F
    23.  
    24. section 'data' data readable writeable
    25.  
    26.    hInstance  dd ?
    27.    hResWav     dd ?
    28.    hResWavDat  dd ?
    29.  
    30.  
    31. section '.code' code readable executable
    32.         start:
    33.                 invoke  GetModuleHandle,0
    34.                         mov [hInstance],eax
    35.                 invoke  DialogBoxParam,eax,1,0,DialogProc,0
    36.                 invoke  ExitProcess,0
    37.  
    38. proc DialogProc uses ebx esi edi,hwnd,wmsg,wparam,lparam
    39.  
    40.                 cmp     [wmsg],WM_COMMAND
    41.                 je      .wmcommand
    42.                 cmp     [wmsg],WM_CLOSE
    43.                 je      .wmclose
    44.                 xor     eax,eax
    45.                 jmp     .finish
    46. .wmcommand:
    47.                 cmp     [wparam],IDCANCEL
    48.                 je      .stop
    49.                 cmp     [wparam],IDOK
    50.                 jne     .finish
    51.                 invoke  FindResource,[hInstance],IDW_WAVE,RT_RCDATA
    52.                         mov  [hResWav],eax
    53.                 invoke  LoadResource,[hInstance],[hResWav]
    54.                         mov  [hResWavDat],eax
    55.                 invoke  LockResource,[hResWavDat]
    56.                 invoke  PlaySound,[hResWavDat],NULL,SND_ASYNC+SND_MEMORY+SND_LOOP
    57.                 jmp     .finish
    58. .stop:
    59.                 invoke  PlaySound, 0, 0, 0
    60.                 jmp     .finish
    61.  
    62. .wmclose:
    63.                 invoke  EndDialog,[hwnd],0
    64. .processed:
    65.                 mov     eax,1
    66. .finish:
    67.                 ret
    68. endp
    69.  
    70. section '.idata' import data readable
    71.  
    72.   library       kernel32,    'KERNEL32.DLL',\
    73.                  user32,      'USER32.DLL',\
    74.                  winmm,       'WINMM.DLL'
    75.  
    76.   include       'api/winmm.inc'
    77.   include       'api/kernel32.inc'
    78.   include       'api/user32.inc'
    79.  
    80. section '.rsrc' resource data readable
    81.  
    82. IDW_WAVE        = 2000
    83.  
    84.   directory RT_DIALOG,dialogs,\
    85.                RT_RCDATA,wave
    86.  
    87. resource wave,IDW_WAVE,LANG_NEUTRAL,wavefile
    88.  
    89. resdata wavefile
    90.    file 'sound.wav'
    91. endres
    92.  
    93.   resource dialogs,\
    94.            1,LANG_RUSSIAN+SUBLANG_DEFAULT,main_dialog
    95.  
    96.   dialog main_dialog,'Wave Test',0,0,120,45,WS_SYSMENU+DS_CENTER
    97.     dialogitem 'BUTTON','&Play',IDOK,10,10,50,13,WS_VISIBLE+\
    98.                    WS_TABSTOP+BS_DEFPUSHBUTTON
    99.     dialogitem 'BUTTON','&Stop',IDCANCEL,64,10,40,13,WS_VISIBLE+\
    100.                    WS_TABSTOP+BS_PUSHBUTTON
    101.   enddialog
     
  6. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    TaileR

    зачем вам ресурсы?

    Code (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. SND_MEMORY =    4h
    7. SND_NOWAIT = 2000h
    8. SND_SYNC   =    0h
    9.  
    10. section '.text' code readable executable
    11.  
    12. start:
    13.     invoke PlaySound, cry, NULL, SND_MEMORY or SND_NOWAIT or SND_SYNC
    14.     invoke ExitProcess, 0
    15.  
    16. cry file 'cry.wav'
    17.  
    18.  
    19. section '.rdata' import data readable
    20.  
    21. library kernel32,'KERNEL32.DLL',\
    22.         winmm,'winmm.dll'
    23.  
    24. import kernel32,\
    25.          ExitProcess,'ExitProcess'
    26. import winmm,\
    27.          PlaySound,'PlaySoundA'
     
  7. TaileR

    TaileR Сергей

    Blog Posts:
    0
    Joined:
    Sep 17, 2008
    Messages:
    7
    Asterix

    Да, точно =)!!! Как я и сам не додумался. Спасибо!