XAudio2-callbacks
XAudio2 kan functies aanroepen die door de client worden geleverd om deze asynchroon op de hoogte te stellen van bepaalde gebeurtenissen die plaatsvinden in de audioverwerkingsthread. Deze callbacks kunnen globaal of specifiek zijn voor een bepaalde bronstem. Voor het ontvangen van globale engine-callbacks moet de client een instantie van een klasse opgeven die de IXAudio2EngineCallback interface implementeert bij het initialiseren van XAudio2. Voor het ontvangen van bronoproepbacks moet de client een instantie van een klasse opgeven die de IXAudio2VoiceCallback interface implementeert bij het maken van bronstemmen. Zie IXAudio2EngineCallback en IXAudio2VoiceCallbackvoor meer informatie.
U moet callbacks zorgvuldig implementeren om onderbrekingen in de audio te voorkomen. Wanneer een callback wordt uitgevoerd, kan XAudio2 geen audio genereren. Vertragingen van meer dan een paar milliseconden kunnen een audioprobleem veroorzaken. Vertragingen van deze aard genereren ook foutopsporingsprogramma-uitvoer. Dit duidt op mogelijke prestatieproblemen. Callback-functies mogen minimaal het volgende niet doen:
- Toegang tot de harde schijf of andere permanente opslag
- Dure of blokkerende API-aanroepen maken
- Synchroniseren met andere onderdelen van clientcode
- Aanzienlijk CPU-gebruik vereisen
Als voor het clientontwerp een callback is vereist om acties te activeren, zoals de acties die eerder worden vermeld, moet de callback een andere clientthread signaleren om het werk uit te voeren. U kunt dit doen met een eenvoudig SetEvent mechanisme of meer geavanceerde mechanismen, zoals een niet-blokkerende opdrachtwachtrij die wordt gebruikt door een andere thread.
IXAudio2EngineCallback
De klasse IXAudio2EngineCallback bevat methoden waarmee de client wordt geïnformeerd wanneer bepaalde gebeurtenissen plaatsvinden in de XAudio2-engine. Deze methoden moeten worden geïmplementeerd door de XAudio2-client. XAudio2 roept deze methoden aan via een interfaceaanwijzer die door de client wordt geleverd met behulp van de methode IXAudio2::RegisterForCallbacks. Al deze methoden retourneren ongeldige, in plaats van een HRESULT-.
IXAudio2VoiceCallback
De klasse IXAudio2VoiceCallback bevat methoden waarmee de client wordt geïnformeerd wanneer bepaalde gebeurtenissen plaatsvinden in een specifieke XAudio2-bronstem. XAudio2 roept deze methoden aan via een interfaceaanwijzer die door de client wordt geleverd in IXAudio2::CreateSourceVoice. Net als bij IXAudio2EngineCallback, moeten deze methoden worden geïmplementeerd door de XAudio2-client en ongeldige retourneren in plaats van een HRESULT-.
Zoals eerder vermeld, is het van cruciaal belang dat de door de client geleverde implementaties van deze callbacks zo snel mogelijk terugkeren, bij voorkeur binnen een milliseconde. De callbacks worden uitgevoerd in de audioverwerkingsthread en alle verwerking wordt onderbroken totdat de callback terugkeert. Een vertraging in een callback kan eenvoudig een audioprobleem veroorzaken.
Verwante onderwerpen