структура XAUDIO2_BUFFER (xaudio2.h)
Представляет буфер аудиоданных, используемый с IXAudio2SourceVoice::SubmitSourceBuffer.
Синтаксис
typedef struct XAUDIO2_BUFFER {
UINT32 Flags;
UINT32 AudioBytes;
const BYTE *pAudioData;
UINT32 PlayBegin;
UINT32 PlayLength;
UINT32 LoopBegin;
UINT32 LoopLength;
UINT32 LoopCount;
void *pContext;
} XAUDIO2_BUFFER;
Члены
Flags
Флаги, предоставляющие дополнительные сведения о звуковом буфере. Может иметь значение 0 или следующее значение.
Значение | Описание |
---|---|
XAUDIO2_END_OF_STREAM | Указывает, что после этого буфера в очереди не может быть никаких буферов. Единственным эффектом этого флага является подавление отладочных выходных предупреждений, вызванных нехваткой очереди буфера. |
AudioBytes
Размер звуковых данных в байтах. Для данных PCM должно быть не больше XAUDIO2_MAX_BUFFER_BYTES (определенного в xaudio2.h) и не больше XMA_READBUFFER_MAX_BYTES (определенного в xma2defs.h) для данных XMA.
pAudioData
Указатель на звуковые данные.
Xbox 360 |
---|
Память, выделенная для буфера, содержащего данные XMA, должна иметь выравнивание блоков 2048. Для этого используется XPhysicalAlloc с аргументом ulAlignment , равным 2048. |
PlayBegin
Первый образец в буфере, который необходимо воспроизвести.
Для буферов XMA это значение должно быть кратно 128 примерам.
PlayLength
Длина региона для воспроизведения в примерах. Значение нуля означает воспроизведение всего буфера, и в данном случае PlayBegin также должен быть равен нулю. Для данных ADPCM это значение должно быть кратным wSamplesPerBlock в структуре ADPCMWAVEFORMAT , содержащей эту XAUDIO2_BUFFER структуру.
LoopBegin
Первый пример области для циклического цикла. Значение LoopBegin должно быть меньше PlayBegin + PlayLength. LoopBegin может быть меньше PlayBegin. Значение LoopBegin должно иметь значение 0, если LoopCount равно 0.
LoopLength
Длина области цикла в примерах. Значение LoopBegin+LoopLength должно быть больше PlayBegin и меньше PlayBegin + PlayLength. Значение LoopLength должно быть равным нулю, если Значение LoopCount равно 0. Если значение LoopCount не равно 0, то длина цикла, равная нулю, указывает, что весь образец должен быть цикличен. Для данных ADPCM это значение должно быть кратным wSamplesPerBlock в структуре ADPCMWAVEFORMAT , содержащей эту XAUDIO2_BUFFER структуру.
LoopCount
Количество циклов по области цикла. Это значение может быть от 0 до XAUDIO2_MAX_LOOP_COUNT. Если значение LoopCount равно нулю, циклы не выполняются, а LoopBegin и LoopLength должны иметь значение 0. Для постоянного цикла задайте для свойства LoopCount значение XAUDIO2_LOOP_INFINITE.
pContext
Значение контекста, передаваемое обратно в обратных вызовах клиенту. Может иметь значение NULL.
Комментарии
Аудиоданные XAudio2 чередуются, данные из каждого канала являются смежными для определенного номера выборки. Например, если в исходном голосе XAudio2 воспроизводится волна из 4 каналов, звуковые данные будут представлять собой образец канала 0, образец канала 1, образец канала 2, образец канала 3, а затем следующая выборка каналов 0, 1, 2, 3 и т. д.
Элементы AudioBytes и pAudioDataXAUDIO2_BUFFER соответствуют размеру в байтах и содержимому блока RIFF "data" воспроизводимого файла. При загрузке файла на Xbox 360 может потребоваться поменять содержимое блока байтами.
Память, выделенная для хранения XAUDIO2_BUFFER или XAUDIO2_BUFFER_WMA структуры, может быть освобождена сразу после того, как вызов IXAudio2SourceVoice::SubmitSourceBuffer будет передан в возврат. Данные, на которые указывает структура (pAudioData и pDecodedPacketCumulativeBytes, соответственно), не могут быть освобождены до завершения буфера (о чем сигнализирует обратный вызов IXAudio2VoiceCallback::OnBufferEnd ) или если голос не будет остановлен или уничтожен.
Требования к платформе
Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); Пакет SDK Для DirectX (XAudio 2.7)Требования
Верхняя часть | xaudio2.h |
См. также раздел
Руководство: создание базовой схемы обработки звука