Compartilhar via


Método IXAudio2SourceVoice::FlushSourceBuffers (xaudio2.h)

Remove todos os buffers de áudio pendentes da fila de voz.

Sintaxe

HRESULT FlushSourceBuffers();

Valor retornado

Retorna S_OK se tiver êxito, caso contrário, um código de erro.

Comentários

Se a voz for iniciada, o buffer que está sendo reproduzido no momento não será removido da fila.

FlushSourceBuffers pode ser chamado independentemente de a voz ser iniciada ou interrompida no momento.

Para cada buffer removido, um retorno de chamada OnBufferEnd será feito, mas nenhum dos outros retornos de chamada por buffer (OnBufferStart, OnStreamEnd ou OnLoopEnd) será feito.

FlushSourceBuffers não altera o estado de execução da voz, portanto, se a voz estava reproduzindo um buffer antes da chamada, ela continuará a fazê-lo e entregará todos os retornos de chamada para o buffer normalmente. Isso significa que o retorno de chamada OnBufferEnd para esse buffer ocorrerá após os retornos de chamada OnBufferEnd para os buffers que foram removidos. Portanto, um cliente XAudio2 que chama FlushSourceBuffers não pode esperar receber retornos de chamada OnBufferEnd na ordem em que os buffers foram enviados.

Nenhum aviso para a falta da fila de buffers será emitido quando o buffer em execução for concluído no momento; supõe-se que o cliente removeu intencionalmente os buffers que o seguiram. No entanto, pode haver um pop de áudio se esse buffer não terminar em uma passagem zero. Se o aplicativo precisar garantir que a operação de liberação ocorra enquanto um buffer específico estiver sendo reproduzido, talvez porque o buffer termine com uma passagem zero, ele deverá chamar FlushSourceBuffers de um retorno de chamada, para que ele seja executado de forma síncrona.

Chamar FlushSourceBuffers depois que uma voz é interrompida e, em seguida, enviar novos dados para a voz redefine todos os contadores internos da voz.

O estado de uma voz não é considerado redefinido depois de chamar FlushSourceBuffers até que o retorno de chamada OnBufferEnd ocorra (se um buffer tiver sido enviado anteriormente) ou IXAudio2SourceVoice::GetState retorne com XAUDIO2_VOICE_STATE. BuffersQueued == 0. Por exemplo, se você parar uma voz e chamar FlushSourceBuffers, ainda não é legal chamar imediatamente IXAudio2SourceVoice::SetSourceSampleRate (que exige que a voz não tenha nenhum buffer atualmente enfileirado), até que qualquer uma das condições mencionadas anteriormente seja atendida.

Requisitos de plataforma

Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); SDK do DirectX (XAudio 2.7)

Requisitos

   
Plataforma de Destino Windows
Cabeçalho xaudio2.h

Confira também

IXAudio2SourceVoice