Udostępnij przez


Zarządzanie blokami danych MIDI

Aplikacje korzystające z bloków danych do przekazywania komunikatów wykluczających system (przy użyciu funkcji midiOutLongMsg i midiInAddBuffer) oraz buforów strumieniowych (przy użyciu funkcji midiStreamOut) muszą stale dostarczać do sterownika urządzenia bloki danych aż do zakończenia odtwarzania lub nagrywania.

Nawet jeśli jest używany pojedynczy blok danych, aplikacja musi mieć możliwość określenia, kiedy sterownik urządzenia skończył z używaniem bloku danych, aby mogła zwolnić pamięć związaną z blokiem danych i strukturą nagłówka. Za pomocą trzech metod można określić, kiedy sterownik urządzenia zostanie zakończony blokiem danych:

  • Określ funkcję wywołania zwrotnego, która ma odbierać komunikat wysyłany przez sterownik po zakończeniu pracy z blokiem danych. Aby uzyskać dane wejściowe MIDI ze sygnaturą czasową, należy użyć funkcji wywołania zwrotnego.
  • Użyj wywołania zwrotnego zdarzenia (tylko w przypadku danych wyjściowych).
  • Użyj wywołania zwrotnego okna lub wątku, aby otrzymać komunikat wysłany przez sterownik po ukończeniu pracy z blokiem danych.

Jeśli aplikacja nie przekaże bloku danych do sterownika urządzenia w razie potrzeby, może wystąpić luka w odtwarzaniu lub utrata przychodzących nagrań. Co najmniej aplikacja powinna używać schematu podwójnego buforowania, aby zachować co najmniej jeden blok danych przed sterownikiem urządzenia.

Używanie funkcji wywołania zwrotnego do przetwarzania komunikatów sterowników

Możesz napisać własną funkcję wywołania zwrotnego w celu przetwarzania komunikatów wysyłanych przez sterownik urządzenia. Aby użyć funkcji wywołania zwrotnego, określ flagę CALLBACK_FUNCTION w parametrze dwFlags oraz adres funkcji wywołania zwrotnego w parametrze dwCallback funkcji midiInOpen lub midiOutOpen.

Komunikaty wysyłane do funkcji zwrotnej są podobne do komunikatów wysyłanych do okna, z wyjątkiem użycia dwóch parametrów podwójnego słowa zamiast parametru bez znaku liczby całkowitej i parametru podwójnego słowa. Aby uzyskać więcej informacji na temat tych komunikatów, zobacz Wysyłanie System-Exclusive Wiadomości i Zarządzanie nagrywaniem MIDI.

Użyj jednej z następujących technik, aby przekazać dane wystąpienia z aplikacji do funkcji wywołania zwrotnego.

  • Użyj parametru dwCallbackInstance w funkcji, która otwiera sterownik urządzenia.
  • Użyj dwUser członka MIDIHDR struktury, która identyfikuje blok danych wysyłany do sterownika urządzenia MIDI.

Jeśli potrzebujesz więcej niż 32 bitów danych wystąpienia, przekaż adres struktury zawierającej dodatkowe informacje.

Używanie procedury zwrotnej zdarzenia do przetwarzania komunikatów sterownika

Aby użyć wywołania zwrotnego dla zdarzeń, użyj funkcji CreateEvent, aby pobrać dojście zdarzenia i określić CALLBACK_EVENT w wywołaniu funkcji midiOutOpen.

Wywołanie zwrotne zdarzeń jest ustawiane przez dowolne elementy, które mogą powodować wywołanie zwrotne funkcji. W przeciwieństwie do funkcji zwrotnych i wywołań okien lub wątków, wywołania zwrotne zdarzeń nie odbierają określonych powiadomień o zamknięciu, zakończeniu ani otwarciu. W związku z tym aplikacja może wymagać sprawdzenia stanu procesu, na który czeka po wystąpieniu zdarzenia.

Aby uzyskać więcej informacji na temat wywołań zdarzeń, zobacz także Using an Event Callback to Manage Buffered Playback.

Używanie wywołania zwrotnego okna lub wątku do przetwarzania komunikatów sterownika

Aby użyć wywołania zwrotnego okna, określ flagę CALLBACK_WINDOW w parametrze dwFlags oraz uchwyt okna w niskim porządku słowa parametru dwCallback funkcji midiInOpen lub midiOutOpen. Komunikaty sterowników zostaną wysłane do funkcji procedury okna dla okna zidentyfikowanego przez uchwyt w dwCallback.

Podobnie, aby użyć wywołania zwrotnego wątku, w wywołaniu do midiInOpen lub midiOutOpenokreśl flagę CALLBACK_THREAD oraz identyfikator wątku. W takim przypadku komunikaty zostaną opublikowane w określonym wątku zamiast okna.

Komunikaty wysyłane do okna lub wywołania zwrotnego wątku są specyficzne dla używanego urządzenia MIDI. Aby uzyskać więcej informacji na temat tych komunikatów, patrz Wysyłanie System-Exclusive wiadomości i Zarządzanie nagraniami MIDI.

Usługi MIDI