Udostępnij za pośrednictwem


Wywołania zwrotne XAudio2

XAudio2 może wywoływać funkcje udostępniane przez klienta, aby powiadomić go asynchronicznie o niektórych zdarzeniach w wątku przetwarzania dźwięku. Te wywołania zwrotne mogą być globalne lub specyficzne dla danego głosu źródłowego. Aby odbierać wywołania zwrotne aparatu globalnego, klient musi udostępnić wystąpienie klasy implementującego interfejsIXAudio2EngineCallback podczas inicjowania interfejsu XAudio2. Aby odbierać źródłowe wywołania zwrotne głosu, klient musi dostarczyć wystąpienie klasy implementując IXAudio2VoiceCallback interfejsu podczas tworzenia głosów źródłowych. Aby uzyskać więcej informacji, zobacz IXAudio2EngineCallback i IXAudio2VoiceCallback.

Aby uniknąć przerw w dźwięku, należy uważnie zaimplementować wywołania zwrotne. Za każdym razem, gdy jest uruchomione wywołanie zwrotne, XAudio2 nie może wygenerować żadnego dźwięku. Opóźnienia przekraczające kilka milisekund mogą powodować problem z dźwiękiem. Opóźnienia tego rodzaju również generują dane wyjściowe debugera. Oznacza to potencjalne problemy z wydajnością. Co najmniej funkcje wywołania zwrotnego nie mogą wykonywać następujących czynności:

  • Uzyskiwanie dostępu do dysku twardego lub innego magazynu trwałego
  • Nawiązywanie kosztownych lub blokujących wywołań interfejsu API
  • Synchronizowanie z innymi częściami kodu klienta
  • Wymagaj znacznego użycia procesora CPU

Jeśli projekt klienta wymaga wywołania zwrotnego w celu wyzwolenia akcji, takich jak wymienione wcześniej, wywołanie zwrotne powinno sygnalizować inny wątek klienta, aby wykonać pracę. Można to zrobić za pomocą prostego mechanizmu SetEvent lub bardziej zaawansowanych mechanizmów, takich jak nieblokujące kolejki poleceń używane przez inny wątek.

IXAudio2EngineCallback

Klasa IXAudio2EngineCallback zawiera metody, które powiadamiają klienta o wystąpieniu niektórych zdarzeń w a aparatu XAudio2. Te metody powinny być implementowane przez klienta XAudio2. XAudio2 wywołuje te metody za pomocą wskaźnika interfejsu dostarczonego przez klienta przy użyciu metody IXAudio2::RegisterForCallbacks. Wszystkie te metody zwracają void, a nie HRESULT.

IXAudio2VoiceCallback

Klasa IXAudio2VoiceCallback zawiera metody, które powiadamiają klienta o wystąpieniu niektórych zdarzeń w określonym głosie źródłowym XAudio2. XAudio2 wywołuje te metody za pomocą wskaźnika interfejsu dostarczonego przez klienta w IXAudio2::CreateSourceVoice. Podobnie jak w przypadku IXAudio2EngineCallback, metody te powinny być implementowane przez klienta XAudio2 i zwracać void, a nie HRESULT.

Jak wspomniano wcześniej, ważne jest, aby implementacje tych wywołań zwrotnych dostarczane przez klienta były zwracane tak szybko, jak to możliwe, najlepiej w milisekundach. Wywołania zwrotne są wykonywane w wątku przetwarzania dźwięku, a wszystkie operacje przetwarzania są przerywane do momentu powrotu wywołania zwrotnego. Opóźnienie wywołania zwrotnego może łatwo spowodować problem z dźwiękiem.

wywołania zwrotnego

przewodnik programowania XAudio2

Instrukcje: używanie źródłowych wywołań zwrotnych głosowych

Instrukcje: używanie wywołań zwrotnych aparatu

Instrukcje: przesyłanie strumieniowe dźwięku z dysku