С 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» используется для сбора минимальных и максимальных значений выборки за определенный период времени, который затем поочередноиспользуется для рисования аудио-сигнала и обновления измерителя громкости.Вы можете использовать этот же класс, чтобы предоставить вам значения для передачи в вашу функцию преобразования децибел.
(более подробное объяснение децибел см. На этой странице )