Retornos de chamada XAudio2
XAudio2 pode chamar funções fornecidas pelo cliente para notificá-lo de forma assíncrona de certos eventos que ocorrem no thread de processamento de áudio. Esses retornos de chamada podem ser globais ou específicos para uma determinada voz de origem. Para receber retornos de chamada do mecanismo global, o cliente deve fornecer uma instância de uma classe implementando a interfaceIXAudio2EngineCallbackao inicializar o XAudio2. Para receber retornos de chamada de voz de origem, o cliente deve fornecer uma instância de uma classe implementando a interfaceIXAudio2VoiceCallbackao criar vozes de origem. Para obter mais detalhes, consulte IXAudio2EngineCallback e IXAudio2VoiceCallback.
Você deve implementar retornos de chamada com cuidado para evitar causar quebras no áudio. Sempre que um retorno de chamada está em execução, XAudio2 não pode gerar nenhum áudio. Atrasos de mais de alguns milissegundos podem causar um problema de áudio. Atrasos dessa natureza também geram saída do depurador. Isso indica possíveis problemas de desempenho. No mínimo, as funções de retorno de chamada não devem fazer o seguinte:
- Aceder ao disco rígido ou outro armazenamento permanente
- Faça chamadas de API caras ou bloqueiem
- Sincronizar com outras partes do código do cliente
- Requer uso significativo da CPU
Se o design do cliente exigir um retorno de chamada para acionar ações como as listadas anteriormente, o retorno de chamada deverá sinalizar um thread de cliente diferente para fazer o trabalho. Você pode fazer isso com um mecanismo de SetEvent simples ou mecanismos mais sofisticados, como uma fila de comandos sem bloqueio que é consumida por outro thread.
IXAudio2EngineCallback
A classeIXAudio2EngineCallback contém métodos que notificam o cliente quando determinados eventos acontecem no mecanismo XAudio2. Estes métodos devem ser implementados pelo cliente XAudio2. XAudio2 chama esses métodos por meio de um ponteiro de interface fornecido pelo cliente usando o IXAudio2::RegisterForCallbacks método. Todos esses métodos retornam vazio, em vez de um HRESULT.
IXAudio2VoiceCallback
A classeIXAudio2VoiceCallback contém métodos que notificam o cliente quando determinados eventos acontecem em uma voz de origem XAudio2 específica. XAudio2 chama esses métodos por meio de um ponteiro de interface fornecido pelo cliente em IXAudio2::CreateSourceVoice. Tal como acontece com IXAudio2EngineCallback , esses métodos devem ser implementados pelo cliente XAudio2 e retornar vazio em vez de um HRESULT.
Como mencionado anteriormente, é crucial que as implementações fornecidas pelo cliente desses retornos de chamada retornem o mais rápido possível, de preferência dentro de um milissegundo. Os retornos de chamada são executados no thread de processamento de áudio e todo o processamento é interrompido até que o retorno de chamada retorne. Um atraso em um retorno de chamada pode facilmente causar um problema de áudio.
Tópicos relacionados