Compartilhar via


Método IAudioRenderClient::ReleaseBuffer (audioclient.h)

O método ReleaseBuffer libera o espaço de buffer adquirido na chamada anterior para o método IAudioRenderClient::GetBuffer .

Sintaxe

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

Parâmetros

[in] NumFramesWritten

O número de quadros de áudio gravados pelo cliente no pacote de dados. O valor desse parâmetro deve ser menor ou igual ao tamanho do pacote de dados, conforme especificado no parâmetro NumFramesRequested passado para o método IAudioRenderClient::GetBuffer .

[in] dwFlags

Os sinalizadores de configuração de buffer. O chamador pode definir esse parâmetro como 0 ou para o seguinte _AUDCLNT_BUFFERFLAGS valor de enumeração (um bit de sinalizador):

AUDCLNT_BUFFERFLAGS_SILENT

Se esse bit de sinalizador estiver definido, o mecanismo de áudio tratará o pacote de dados como se contivesse silêncio, independentemente dos valores de dados contidos no pacote. Esse sinalizador elimina a necessidade de o cliente gravar explicitamente dados de silêncio no buffer de renderização.

Retornar valor

Se o método for bem-sucedido, retornará S_OK. Se falhar, os códigos de retorno possíveis incluem, mas não se limitam a, os valores mostrados na tabela a seguir.

Código de retorno Descrição
AUDCLNT_E_INVALID_SIZE
O valor NumFramesWritten excede o valor NumFramesRequested especificado na chamada IAudioRenderClient::GetBuffer anterior.
AUDCLNT_E_BUFFER_SIZE_ERROR
O fluxo é um modo exclusivo e usa buffer controlado por eventos, mas o cliente tentou liberar um pacote que não era do tamanho do buffer.
AUDCLNT_E_OUT_OF_ORDER
Essa chamada não foi precedida por uma chamada correspondente para IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
O dispositivo de ponto de extremidade de áudio foi desconectado ou o hardware de áudio ou os recursos de hardware associados foram reconfigurados, desabilitados, removidos ou não estão disponíveis para uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
O serviço de áudio do Windows não está em execução.
E_INVALIDARG
O parâmetro dwFlags não é um valor válido.

Comentários

O cliente deve liberar o mesmo número de quadros solicitados na chamada anterior para o método IAudioRenderClient::GetBuffer . A única exceção a essa regra é que o cliente sempre pode chamar ReleaseBuffer para liberar 0 quadros (a menos que o fluxo seja um modo exclusivo e use buffer controlado por eventos).

Esse comportamento fornece um meio conveniente para o cliente "liberar" um pacote solicitado anteriormente de comprimento 0. Nesse caso, a chamada para ReleaseBuffer é opcional. Depois de chamar GetBuffer para obter um pacote de comprimento 0, o cliente tem a opção de não chamar ReleaseBuffer antes de chamar GetBuffer novamente.

Além disso, se a chamada anterior do GetBuffer obteve um pacote de tamanho diferente de zero, chamar ReleaseBuffer com NumFramesRequested definido como 0 terá êxito (a menos que o fluxo seja um modo exclusivo e use o buffer controlado por eventos). O significado da chamada é que o cliente não escreveu nenhum dado no pacote antes de liberá-lo. Assim, o método trata a parte do buffer representada pelo pacote como não usada e disponibilizará essa parte do buffer novamente para o cliente na próxima chamada getBuffer .

Os clientes devem evitar atrasos excessivos entre a chamada GetBuffer que adquire um buffer e a chamada ReleaseBuffer que libera o buffer. A implementação do mecanismo de áudio pressupõe que a chamada GetBuffer e a chamada de ReleaseBuffer correspondente ocorram no mesmo período de processamento de buffer. Clientes que atrasam a liberação de um buffer por mais de um período correm o risco de perder dados de exemplo.

Para obter exemplos de código que chamam o método ReleaseBuffer , consulte os seguintes tópicos:

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho audioclient.h

Confira também

IAudioClient::Initialize

IAudioRenderClient Interface

IAudioRenderClient::GetBuffer