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

Тема в разделе "WASM.ASSEMBLER", создана пользователем PaVeL_PoL, 2 май 2007.

  1. PaVeL_PoL

    PaVeL_PoL New Member

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

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Без ресурсов WAV-файл можно послушать так.
    Код (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

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    вызываем так:
    Код (Text):
    1. PlaySound(MAKEINTRESOURCE(10),hInstance,SND_NOWAIT|SND_SYNC|SND_RESOURCE);
    ресурсы компилим и юзаем как отдельный файл:
    Код (Text):
    1. /////////////////////////////////////////////////////////////////////////////
    2. //
    3. // WAVE
    4. //
    5.  
    6. 10                      WAVE                    "file.wav"
     
  4. PaVeL_PoL

    PaVeL_PoL New Member

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

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

    TaileR Сергей

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    7
    PaVeL_PoL , буду очень благодарен за пример исходника, со звуковыми ресурсами. Сам сделал вот так, но не уверен, что это оптимальный вариант.

    Код (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

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    TaileR

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

    Код (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 Сергей

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    7
    Asterix

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