Проиграть одну ноту (midiStreamOut)

Тема в разделе "WASM.WIN32", создана пользователем JAPH, 8 июн 2008.

  1. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    Как проиграть половинную ноту ля первой октавы?
    Пока имеется такой код:
    Код (Text):
    1.         .486
    2.         .model  flat, stdcall
    3.         option  casemap: none
    4. include windows.inc
    5. include kernel32.inc
    6. include winmm.inc
    7. includelib  kernel32.lib
    8. includelib  winmm.lib
    9.         .data
    10. hms     dd      ?
    11. one     dd      0
    12. mhdr        MIDIHDR     <offset mididata, 48, 48, 0, 0, 0, 0, 0, <0, 0, 0, 0>>
    13. mptd        MIDIPROPTIMEDIV <sizeof mptd, 48>
    14. mididata    dd      0, 0, (MEVT_TEMPO shl 24) or 500000
    15.         dd      0, 0, 904590h
    16.         dd      960, 0, 004580h
    17. hevt        dd      ?
    18.         .code
    19. @:      invoke  CreateEvent, 0, 0, 0, 0
    20.         mov hevt, eax
    21.         invoke  midiStreamOpen, offset hms, offset one, 1, hevt, 0, CALLBACK_EVENT
    22.         invoke  midiStreamProperty, hms, offset mptd, MIDIPROP_SET or MIDIPROP_TIMEDIV
    23.         invoke  midiOutPrepareHeader, hms, offset mhdr, sizeof mhdr
    24.         invoke  midiStreamOut, hms, offset mhdr, sizeof mhdr
    25.         invoke  midiStreamRestart, hms
    26.         .while 1
    27.             test    mhdr.dwFlags, MHDR_DONE
    28.             .break .if !zero?
    29.             invoke  WaitForSingleObject, hevt, 1000
    30.         .endw
    31.         invoke  midiOutUnprepareHeader, hms, offset mhdr, sizeof mhdr
    32.         invoke  midiStreamClose, hms
    33.         invoke  ExitProcess, 0
    34.         end @
    Уже работает. Просто невнимательность :)