Метод 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 |
См. также раздел
Руководство: создание базовой схемы обработки звука