Как получить значение выборки звуковых данных в 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-битные сэмплы, в нем нет необходимости, и в зависимости от точного формата они могут храниться с прямым или прямым порядком байтов.

Заголовок содержит информацию о частоте дискретизации, количестве каналов, битах на выборку, байтах на выборку и т. П., Которые позволяют вам выполнять математическую обработку, чтобы получить ровно одну выборку.

Другие вопросы по тегам