Как получить значение выборки звуковых данных в C#
Мне нужно получить значения сэмплов звуковых данных файла WAV, чтобы с помощью этих значений сэмплов мне нужно было получать значения амплитуды этих звуковых данных каждую секунду.
Важно: есть ли способ получить значения сэмплов аудиоданных с помощью библиотеки Naudio или библиотеки wmp?
Я получаю значения образца следующим образом:
byte[] data = File.ReadAllBytes(File_textBox.Text);
var samples=new int[data.Length];
int x = 0;
for (int i = 44; i <data.Length; i += 2)
{
samples[x] = BitConverter.ToInt16(data, i);
x++;
}
Но я получаю отрицательные значения больше как (-326260). так это правильно или неправильно? Я имею в виду, может ли значение сэмпла быть отрицательным или нет, и если оно правильное, что означает звук или тишина?
1 ответ
NAudio может сделать это за вас, он находится в библиотеке (я думаю, это класс WaveStream или WaveReader или что-то подобное). Я могу порекомендовать его использовать, если это не слишком много накладных расходов.
Если вы хотите свернуть свое собственное дело и иметь дело с произвольными волновыми файлами, вам придется ознакомиться с форматом файлов WAV и самостоятельно проанализировать заголовок.
Хотя в общем случае файл WAV содержит 16-битные сэмплы, в нем нет необходимости, и в зависимости от точного формата они могут храниться с прямым или прямым порядком байтов.
Заголовок содержит информацию о частоте дискретизации, количестве каналов, битах на выборку, байтах на выборку и т. П., Которые позволяют вам выполнять математическую обработку, чтобы получить ровно одну выборку.