Я пытаюсь выполнить итерацию по волновому файлу и отправить 20 мс из них на каждой итерации. Предполагая, что я использую 8 кГц, 1 канал, 16bit аудиофайл, у меня есть следующий код, используя NAudio:Волновой файл - обработка определенного фрагмента аудиоданных
WaveFileReader wHeader = new WaveFileReader(fullFileName);
byte[] data = new byte[wHeader.Length];
int read = wHeader.Read(data, 0, data.Length);
short[] sampleBuffer = new short[read/2];
short[] InpBuf;
for (int i = 0; i < read; i += 2)
{
InpBuf = new short[159]; //20ms?
Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);
InpBuf = sampleBuffer;
Process20(InpBuf); //Send 20ms of audio data which inside InpBuf
}
Я могу видеть, что полный аудиоданные внутри sampleBuffer сейчас (генерируется волна синус), но я не могу разделить эти 20 мс на InpBuf, и я вижу, что InpBuf содержит все аудиоданные.
Как только я пойму эту проблему, я смогу перейти к стерео и различным аудиоформатам.
Любая помощь приветствуется, спасибо.
Спасибо. Что лучше всего делать здесь? Должно ли это быть чем-то вроде этого или есть какой-либо другой эффективный способ? «код int offst = 0; для (int i = 0; i
это хорошо для первого подхода ... возможно, его можно немного изменить, как только вы убедитесь, что он работает как ожидалось – cristallo
К сожалению, это приносит очень запутанный результат ... My исходные аудиоданные находятся внутри 'byte [] data = new byte [wHeader.Length];' Когда я зацикливание аудиоданные это выглядит следующим образом: «для (INT I = 0; я <читать, я + = 2) { Buffer.BlockCopy (данные, offst, InpBuf, 0, TBUF) ; offst + = tBuf; Array.Clear (InpBuf, 0, InpBuf.Length); } ' Однако внутри InpBuf я вижу первую половину в порядке, а затем получаю нули до конца, а потом значения отличаются от данных. Я мог бы пропустить всю точку здесь ... –