Войти
ПрограммированиеФорумЗвук

Воспроизведение WAV на DirectX11 с определённой позиции

#0
17:47, 12 мар. 2013

Собственно вопрос в шапке. Тоесть воспроизводить надо не с начала, а с определённой позиции....


#1
18:55, 12 мар. 2013

tbb
Так через что звук воспроизводится? Через XAudio2? Если да, то у голоса (так там называются объекты, которые воспроизводят звук) есть функция SubmitSourceBuffer(), которой передаёшь указатель на буфер XAUDIO2_BUFFER. Вот его формат:

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;

Тут всё про него описано. Это искал?

#2
21:10, 12 мар. 2013

Спасибо за освежение памяти. Искал и это и не это. В данном случае я так понимаю, чтоб, к примеру, в аудио плеере каком нибуть, перематывать wav вперёд - назад очень часто, придётся при каждой перемотке wav файл заново загружать в  XAUDIO2_BUFFER и потом только воспроизводить...как - то не корректно.....А в XACT ничего случаем нету? Ну тоесть хотелось бы один раз загрузить в память wav и потом просто воспроизводить его с любой позиции без перезагрузки его в буфера и памяти всякие....Ну типо просто вызвал какую - нибуть функцию Play(wav, from);    :-)

#3
21:19, 12 мар. 2013

tbb
> Ну тоесть хотелось бы один раз загрузить в память wav и потом просто воспроизводить его с любой позиции без перезагрузки его в буфера и памяти всякие....
Так у тебя звуковые данные и будут в памяти. Ты просто в XAUDIO2_BUFFER указываешь где они лежат и сколько занимают. Когда ты вызываешь метод SubmitSourceBuffer(), он не копирует данные по указанному указателю указанной длины. Он копирует себе сам указатель и длину. То есть нет ничего страшного в постоянном вызове метода SubmitSourceBuffer().

#4
21:33, 12 мар. 2013

О..Данке Шон ))

#5
21:39, 12 мар. 2013

tbb
Ты если будешь двигать указатель на данные и сокращать размер данных в указаниях буфера, то не забудь двигать указатель на кратность ширины канала (ну это я типа про биты: 16, 24, 32) умноженное на количество каналов (из WAVEFORMATEX это wBitsPerSample * nChannels, или просто nBlockAlign).

#6
22:09, 12 мар. 2013

Да честно говоря я ваще решил забить на XACT и XAudio и перейти на работу со звуковой картой на низком уровне, я ведь не игру делаю, а как бы бизнес приложение, которое работает в том числе и с захватом звука и с воспроизведением, а так же с nVidia CUDA (правда не на прямую, а через DirectCompute), а так же с 3D графикой на Direct3D. Вот по этому и думал замутить звук так же через DX. Но мне нужно и захватывать звук, к примеру, с микрофона, в реальном времени, получать данные о амплитуде, частоте, сэмлах и пр.....обрабатывать всё это и воспроизводить, ну возможно что - то вроде DSP эффектов, но не то...  Ну и WAV конечно так же надо будет загружать.....короче тут придётся его грузить как бинарник, искать всякие чанки и прочие блоки и тд.... :-))

ПрограммированиеФорумЗвук

Тема в архиве.