C # Как получить значения Audio Decibel с промежутком времени - PullRequest
3 голосов
/ 01 июня 2011

как я могу получить значения в децибелах файла wav / mp3, который у меня есть каждую 1 секунду? используя любую аудио библиотеку, которая работает с C # ..

что-то вроде:

Time: 0, DB: 0.213623
Time: 1, DB: 0.2692261
Time: 2, DB: 0.2355957
Time: 3, DB: 0.2363281
Time: 4, DB: 0.3799744
Time: 5, DB: 0.3580322
Time: 6, DB: 0.1331177
Time: 7, DB: 0.3091431
Time: 8, DB: 0.2984009

Буду очень признателен за вашу помощь:)

С уважением,

Ответы [ 2 ]

13 голосов
/ 01 июня 2011

С NAudio вы можете использовать классы WaveFileReader и Mp3FileReader, чтобы получить доступ к образцу данных в файле в виде байтового массива.Затем вам нужно будет прочитать файл и получить значения сэмплов (например, для 16-битного аудио каждые два байта представляют собой короткий).Если файл стереофонический, он будет чередовать левый сэмпл, правый сэмпл.

Затем вам нужно придумать стратегию измерения децибел.Собираетесь ли вы искать самый громкий сэмпл в каждую секунду или средний объем сэмплирования в каждую секунду, или просто выбрать тот сэмпл, который воспроизводится в эту секунду?Получив это значение, его необходимо нормализовать так, чтобы 1 был самым громким (поэтому для 16-битного звука разделите ваше значение на 32768).Также используйте абсолютное значение выборки.Теперь можно рассчитать значение в децибелах:

short sample16Bit = BitConverter.ToShort(buffer,index);
double volume = Math.Abs(sample16Bit / 32768.0);
double decibels = 20 * Math.Log10(volume);

В демонстрационном приложении NAudio «SampleAggregator» используется для сбора минимальных и максимальных значений выборки за определенный период времени, который затем поочередноиспользуется для рисования аудио-сигнала и обновления измерителя громкости.Вы можете использовать этот же класс, чтобы предоставить вам значения для передачи в вашу функцию преобразования децибел.

(более подробное объяснение децибел см. На этой странице )

1 голос
/ 02 июня 2011

Я нашел решение на примерах, приведенных в библиотеке NAudio. так как решение, которое я нашел, настолько велико. Я не собираюсь публиковать это здесь. так что я просто дам подсказки на случай, если кто-то захочет сделать то же самое .. Приложение NAudioDemo -> Папка AudioPlayBackDemo -> Файл AudioPlayBackPanel.cs ...

...