C# и wave - как я обрабатываю 20 мс аудиоданных
Всем привет,
У меня возникли проблемы с достижением того, что, я уверен, вы, ребята, можете мне помочь.
Я пытаюсь перебирать волновой файл и обрабатывать 20 мс аудиоданных каждый раз. Тем не менее, я путаюсь с массивами байтов и преобразованиями, и я был бы благодарен, если бы кто-то мог помочь в этом с примерами...
В конце мне нужно будет обработать несколько типов (2 канала, 16 кГц и т. д.), Но пока у меня есть готовый 8000 Гц, 1 канал 16 бит файл.
Я использую Наудио для чтения файла.
Что я уже пробовал:
/* Pcm 8000Hz 1 channels 16 bits per sample Extra Size: 0 Block Align: 2 Average Bytes Per Second: 16000 WaveFormat: 16 bit PCM: 8kHz 1 channels Length: 351360 bytes: 00:00:21.9600000 */ WaveFileReader wHeader= new WaveFileReader(FullFileName); byte[] data = new byte[wHeader.Length]; int read = wHeader.Read(data, 0, data.Length); //Length = 351360 short[] shortBuffer = new short[read / 2]; // = 175680 int tBuf = 159; //Not sure this is 20ms? short[] InpBuf = new short[tBuf]; //This is the 20ms inputBuffer I will process int offst = 0; Buffer.BlockCopy(data, 0, shortBuffer, 0, data.Length); for (int i = 0; i < read; i += 2) { Buffer.BlockCopy(shortBuffer , offst, InpBuf, 0, tBuf); //I'm taking the tBuf (=159) data from the full shortBuffer into InpBuf (with offset of 0) offst += tBuf+1; //advancing the next offset from 0 to 160 Process20ms(InpBuf); //now I can process the 20ms of data Array.Clear(InpBuf, 0, InpBuf.Length); //resetting the InpBuf for the next iteration }
В любом случае, это не очень хорошо работает, когда я сравниваю inpBuf куски по полной shortBuffer Я вижу, что данные в inpBuf[0] и inpBufp[78] идентичны, но потом я получаю 00000 до inpBuf[159].
После inpBuf[160] Я получаю совершенно другие данные.
Итак, я путаюсь с байтами, короткими, блочными копиями и сэмплами, хотя это звучит очень легко, когда у меня есть полный массив аудиоданных.
Как только я пойму это, я думаю, что будет намного проще обрабатывать стереофонические (2 канала) файлы.
Спасибо...