Я пытаюсь реализовать метр объема, чтобы помочь пользователям выбрать свой микрофон, используя NAudio. Мне нужно сделать все возможное, чтобы отсеять устройства, которые имеют только фоновый шум и застраховать, когда я говорю что-то, когда они говорят.Как рассчитать дБ из StreamVolumeEventArgs.MaxSampleValues NAudio?
В настоящее время мы используем версию 1.7.3 в приложении Unity3D, поэтому ни один из связанных подходов MMDevice
не доступен при их сбое.
Я использую WaveInEvent
, который я подаю в WaveInProvider
, который затем передаю в SampleChannel
. Я подаю SampleChannel
в MeteringSampleProvider
, который я подписал на событие StreamVolume
.
В моем обработчике событий OnPostVolumeMeter
, когда я получаю StreamVolumeEventArgs
(я назвал параметр e
) Мне интересно, как рассчитать децибелы. Я видел множество примеров, которые вылавливают максимальный объем (или иногда его называют амплитудой) от e.MaxSampleValues[0]
. Некоторые примеры проверяют, является ли это стереофоническим сигналом и хватит максимум между e.MaxSampleValues[0]
или e.MaxSampleValues[1]
.
В любом случае, каковы значения этого числа? Это процент? Они являются относительно небольшими десятичными знаками (10^-3 или 10^-4), когда я откидываюсь на консоль.
ли расчет что-то вроде
var peak = e.MaxSampleValues[0];
if (e.MaxSampleValues.Length > 1)
{
peak = Mathf.Max(e.MaxSampleValues[0], e.MaxSampleValues[1]);
}
var dB = Mathf.Max(20.0f*Mathf.Log10(peak), -96.0f);
или мне нужно разделить пик на 32768.0? Как и в,
var dB = Mathf.Max(20.0f*Mathf.Log10(peak/32768.0f), -96.0f);
Является ли этот подход в корне неверно, и мне нужно собрать буфер образцов, что я делаю RMS вид расчета, где я вычислить квадратный корень из суммы средних значений, деленная на количество образцов все разделены на 32768 и подаются в Log10?
Я видел несколько ссылок, чтобы смотреть на AudioPlaybackPanel в NAudioDemo и устанавливает volumeMeter Amplitude быть значения e.MaxSampleValues[0]
и e.MaxSampleValues[1]
Я также рассматривал эту статью [1] Wikipedia, и теперь мне интересно, является ли значение, которое я получаю в e.MaxSampleValues [], «отношение амплитуды»? [1] https://en.wikipedia.org/wiki/Decibel#Absolute_measurements – Scott