XAudio2 Återanrop
XAudio2 kan anropa funktioner som tillhandahålls av klienten för att meddela den asynkront om vissa händelser som äger rum i tråden för ljudbearbetning. Dessa motringningar kan vara globala eller specifika för en viss källröst. För att kunna ta emot globala motoråteranrop måste klienten tillhandahålla en instans av en klass som implementerar IXAudio2EngineCallback--gränssnitt när XAudio2 initieras. För att kunna ta emot källröståteranrop måste klienten tillhandahålla en instans av en klass som implementerar IXAudio2VoiceCallback--gränssnitt när källröster skapas. Mer information finns i IXAudio2EngineCallback och IXAudio2VoiceCallback.
Du måste implementera återanrop noggrant för att undvika att orsaka avbrott i ljudet. När ett återanrop körs kan XAudio2 inte generera något ljud. Fördröjningar på mer än några millisekunder kan orsaka ett ljudproblem. Fördröjningar av det här slaget genererar också felsökningsutdata. Detta indikerar potentiella prestandaproblem. Återanropsfunktioner får åtminstone inte göra följande:
- Få åtkomst till hårddisken eller annan permanent lagring
- Göra dyra eller blockera API-anrop
- Synkronisera med andra delar av klientkoden
- Kräv betydande CPU-användning
Om klientdesignen kräver ett återanrop för att utlösa åtgärder som de som anges tidigare, bör återanropet signalera en annan klienttråd för att utföra arbetet. Du kan göra detta med en enkel SetEvent mekanism eller mer avancerade mekanismer som en icke-blockerande kommandokö som används av en annan tråd.
IXAudio2EngineCallback
Klassen IXAudio2EngineCallback innehåller metoder som meddelar klienten när vissa händelser inträffar i XAudio2-motorn. Dessa metoder bör implementeras av XAudio2-klienten. XAudio2 anropar dessa metoder med hjälp av en gränssnittspekare som tillhandahålls av klienten med hjälp av metoden IXAudio2::RegisterForCallbacks. Alla dessa metoder returnerar voidi stället för en HRESULT-.
IXAudio2VoiceCallback
Klassen IXAudio2VoiceCallback innehåller metoder som meddelar klienten när vissa händelser inträffar med en specifik XAudio2-källröst. XAudio2 anropar dessa metoder med hjälp av en gränssnittspekare som tillhandahålls av klienten i IXAudio2::CreateSourceVoice. Precis som med IXAudio2EngineCallbackbör dessa metoder implementeras av XAudio2-klienten och returnera void i stället för en HRESULT-.
Som tidigare nämnts är det viktigt att implementeringarna av dessa återanrop från klienten returneras så snabbt som möjligt, helst inom en millisekunder. Återanropen körs i tråden för ljudbearbetning och all bearbetning avbryts tills återanropet returneras. En fördröjning i ett återanrop kan enkelt orsaka ett ljudproblem.
Relaterade ämnen