Compartilhar via


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

Adiciona um novo buffer de áudio à fila de voz.

Sintaxe

HRESULT SubmitSourceBuffer(
  [in] const XAUDIO2_BUFFER     *pBuffer,
  [in] const XAUDIO2_BUFFER_WMA *pBufferWMA
);

Parâmetros

[in] pBuffer

Ponteiro para uma estrutura XAUDIO2_BUFFER para fila.

[in] pBufferWMA

Ponteiro para uma estrutura de XAUDIO2_BUFFER_WMA adicional usada ao enviar dados do WMA.

Retornar valor

Retorna S_OK se tiver êxito, caso contrário, um código de erro. Consulte Códigos de erro XAudio2 para obter descrições de códigos de erro específicos do XAudio2.

Comentários

A voz processa e reproduz os buffers em sua fila na ordem em que foram enviados.

A estrutura XAUDIO2_BUFFER inclui detalhes sobre o local e o tamanho do buffer de áudio, a parte do buffer que realmente deve ser reproduzida, a região do loop (se houver) e a contagem de loops, o ponteiro de contexto a ser usado em quaisquer retornos de chamada relacionados a esse buffer e um sinalizador XAUDIO2_END_OF_STREAM opcional que indica que é o último buffer de um som contíguo.

Se a voz for iniciada e não tiver buffers enfileirados, o novo buffer começará a ser reproduzido imediatamente. Se a voz for interrompida, o buffer será adicionado à fila da voz e será reproduzido quando a voz for iniciada.

Se apenas parte do buffer fornecido precisar ser reproduzida, os campos PlayBegin e PlayLength no XAUDIO2_BUFFER poderão ser usados para especificar a região a ser reproduzida. Um valor PlayLength de 0 significa reproduzir todo o buffer (e, nesse caso , PlayBegin também deve ser 0).

Se todo ou parte do buffer precisar ser reproduzido em um loop contínuo, os campos LoopBegin, LoopLength e LoopCount no XAUDIO2_BUFFER poderão ser usados para especificar as características da região do loop. Um valor LoopBegin de XAUDIO2_NO_LOOP_REGION significa que nenhum loop deve ser executado e, nesse caso, LoopLength e LoopCount devem ser fornecidos como 0. Se uma região de loop for especificada, ela deverá ser não vazia (LoopLength> 0) e a contagem de loops deverá estar entre 1 e XAUDIO2_MAX_LOOP_COUNT inclusiva (ou XAUDIO2_LOOP_INFINITE para especificar um loop infinito que só terminará quando IXAudio2SourceVoice::ExitLoop for chamado). Uma contagem de loops de N significa ignorar N vezes, ou seja, para reproduzir a região do loop N+1 vezes.

Se uma região de reprodução explícita for especificada, ela deverá começar e terminar dentro do buffer de áudio fornecido (ou, no caso compactado, dentro do conjunto de exemplos para os quais o buffer será decodificado). Além disso, a região do loop não pode terminar após o final da região de reprodução.

Xbox 360
Para determinados formatos de áudio, pode haver restrições adicionais nos pontos de extremidade válidos de qualquer região de reprodução ou loop; Por exemplo, para buffers XMA, as regiões só podem começar ou terminar em limites de 128 amostras no áudio decodificado.
 

O ponteiro pBuffer pode ser reutilizado ou liberado imediatamente após chamar esse método, mas os dados de áudio reais referenciados pelo pBuffer devem permanecer válidos até que o buffer tenha sido totalmente consumido pelo XAudio2 (que é indicado pelo retorno de chamada IXAudio2VoiceCallback::OnBufferEnd ).

Até XAUDIO2_MAX_QUEUED_BUFFERS buffers podem ser enfileirados em uma voz a qualquer momento.

SubmitSourceBuffer entra em vigor imediatamente quando chamado de um retorno de chamada XAudio2 com um OperationSet de XAUDIO2_COMMIT_NOW.

Xbox 360
Esse método pode ser chamado de um thread do sistema Xbox (a maioria dos outros métodos XAudio2 não pode). No entanto, um máximo de dois buffers de origem pode ser enviado de um thread do sistema por vez.
 

Requisitos de plataforma

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

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho xaudio2.h

Confira também

Como: Compilar um gráfico de processamento de áudio básico

Como: Fazer o streaming de um som do disco

IXAudio2SourceVoice