Sdílet prostřednictvím


Zpětná volání XAudio2

XAudio2 může volat funkce poskytované klientem, aby ho asynchronně informoval o určitých událostech, které probíhají ve vlákně zpracování zvuku. Tyto zpětná volání můžou být globální nebo specifická pro daný zdrojový hlas. Chcete-li přijímat zpětná volání globálního modulu, musí klient poskytnout instanci třídy implementují IXAudio2EngineCallback rozhraní při inicializaci XAudio2. Pro příjem zpětných volání zdrojového hlasu musí klient poskytnout instanci třídy implementují IXAudio2VoiceCallback rozhraní při vytváření zdrojových hlasů. Další podrobnosti naleznete v tématu IXAudio2EngineCallback a IXAudio2VoiceCallback.

Zpětné volání je nutné implementovat pečlivě, abyste se vyhnuli přerušení zvuku. Při každém spuštění zpětného volání nemůže XAudio2 vygenerovat žádný zvuk. Zpoždění větší než několik milisekund může způsobit problém se zvukem. Zpoždění této povahy také generují výstup ladicího programu. To značí potenciální problémy s výkonem. Funkce zpětného volání nesmí minimálně provádět následující akce:

  • Přístup k pevnému disku nebo jinému trvalému úložišti
  • Vytváření drahých nebo blokujících volání rozhraní API
  • Synchronizace s jinými částmi klientského kódu
  • Vyžadování významného využití procesoru

Pokud návrh klienta vyžaduje zpětné volání k aktivaci akcí, jako jsou například dříve uvedené, zpětné volání by mělo signalizovat, že bude fungovat jiné vlákno klienta. Můžete to udělat pomocí jednoduchého mechanismu SetEvent nebo sofistikovanějších mechanismů, jako je neblokující fronta příkazů, kterou využívá jiné vlákno.

IXAudio2EngineCallback

Třída IXAudio2EngineCallback obsahuje metody, které klienta upozorňují, když dojde k určitým událostem v modulu XAudio2. Tyto metody by měl implementovat klient XAudio2. XAudio2 volá tyto metody pomocí ukazatele rozhraní poskytovaného klientem pomocí IXAudio2::RegisterForCallbacks metoda. Všechny tyto metody vrací voidmísto HRESULT.

IXAudio2VoiceCallback

Třída IXAudio2VoiceCallback obsahuje metody, které klienta upozorňují, když dojde k určitým událostem v konkrétním zdrojovém hlasu XAudio2. XAudio2 volá tyto metody pomocí ukazatele rozhraní poskytovaného klientem v IXAudio2::CreateSourceVoice. Stejně jako u IXAudio2EngineCallbackby tyto metody měly být implementovány klientem XAudio2 a vracet void místo HRESULT.

Jak už jsme zmínili dříve, je nezbytné, aby implementace těchto zpětných volání poskytované klientem vrátily co nejrychleji, nejlépe v milisekundách. Zpětná volání se spustí ve vlákně zpracování zvuku a veškeré zpracování se přeruší, dokud se zpětná volání nevrátí. Zpoždění zpětného volání může snadno způsobit problém se zvukem.

zpětné volání

Průvodce programováním v XAudio2

Postupy: Použití zpětných volání zdrojového hlasového volání

Postupy: Použití zpětného volání stroje

Postupy: Streamování zvuku z disku