Поделиться через


Метод IXAudio2SourceVoice::SubmitSourceBuffer (xaudio2.h)

Добавляет новый звуковой буфер в голосовую очередь.

Синтаксис

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

Параметры

[in] pBuffer

Указатель на XAUDIO2_BUFFER структуру очереди.

[in] pBufferWMA

Указатель на дополнительную структуру XAUDIO2_BUFFER_WMA , используемую при отправке данных WMA.

Возвращаемое значение

Возвращает S_OK в случае успешного выполнения, в противном случае — код ошибки. Описание кодов ошибок XAudio2 см. в разделе Коды ошибок XAudio2 .

Комментарии

Голос обрабатывает и воспроизводит буферы в очереди в том порядке, в который они были отправлены.

Структура XAUDIO2_BUFFER включает сведения о расположении и размере звукового буфера, части буфера, которую нужно воспроизвести, области цикла (если таковой имеется) и количестве циклов, указателе контекста, используемом в любых обратных вызовах, связанных с этим буфером, и необязательный флаг XAUDIO2_END_OF_STREAM, указывающий, что это последний буфер непрерывного звука.

Если голос запущен и не имеет буферов в очереди, новый буфер начнет воспроизводиться немедленно. Если голос остановлен, буфер добавляется в очередь голоса и будет воспроизводиться при запуске голоса.

Если необходимо воспроизвести только часть заданного буфера, поля PlayBegin и PlayLength в XAUDIO2_BUFFER можно использовать для указания региона для воспроизведения. Значение PlayLength 0 означает воспроизведение всего буфера (и в этом случае PlayBegin также должен иметь значение 0).

Если все или часть буфера должны воспроизводиться в непрерывном цикле, поля LoopBegin, LoopLength и LoopCount в XAUDIO2_BUFFER можно использовать для указания характеристик области цикла. Значение LoopBegin XAUDIO2_NO_LOOP_REGION означает, что циклирование не должно выполняться, и в этом случае LoopLength и LoopCount должны быть заданы как 0. Если указана область цикла, она должна быть непустой (LoopLength> 0), а число циклов должно быть от 1 до XAUDIO2_MAX_LOOP_COUNT включительно (или XAUDIO2_LOOP_INFINITE указывать бесконечный цикл, который будет заканчиваться только при вызове IXAudio2SourceVoice::ExitLoop ). Число циклов N означает пропуск N назад N раз, т. е. для воспроизведения области цикла N+1 раз.

Если указана явная область воспроизведения, она должна начинаться и заканчиваться в заданном звуковом буфере (или в сжатом случае в наборе примеров, в которые будет декодировать буфер). Кроме того, область цикла не может заканчиваться после окончания области воспроизведения.

Xbox 360
Для некоторых форматов звука могут существовать дополнительные ограничения на допустимые конечные точки любых областей воспроизведения или цикла; Например, для буферов XMA области могут начинаться или заканчиваться только через границы 128 выборок в декодированных звуках.
 

Указатель pBuffer можно повторно использовать или освободить сразу после вызова этого метода, но фактические звуковые данные, на которые ссылается pBuffer , должны оставаться действительными до тех пор, пока буфер не будет полностью использован XAudio2 (что обозначается обратным вызовом IXAudio2VoiceCallback::OnBufferEnd ).

До XAUDIO2_MAX_QUEUED_BUFFERS буферы можно помещать в очередь в голосе в любой момент времени.

SubmitSourceBuffer вступает в силу немедленно при вызове из обратного вызова XAudio2 с operationSet XAUDIO2_COMMIT_NOW.

Xbox 360
Этот метод можно вызвать из системного потока Xbox (большинство других методов XAudio2 не могут). Однако из системного потока одновременно можно отправить не более двух исходных буферов.
 

Требования к платформе

Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); Пакет SDK Для DirectX (XAudio 2.7)

Требования

Требование Значение
Целевая платформа Windows
Header xaudio2.h

См. также раздел

Руководство: создание базовой схемы обработки звука

Руководство: организация звукового потока с диска

IXAudio2SourceVoice