Я читал этот урок о том, как сделать аудиорекордер Silverlight.Я подумал, что было бы здорово добавить индикатор громкости, чтобы предоставить пользователю обратную связь о том, что происходит.Однако я не могу заставить это работать должным образом.
Метод OnSamples класса AudioSink предоставляет необработанные данные PCM в качестве одного из аргументов.Кроме того, я установил AudioFrameSize свойство AudioCaptureDevice на 40 (1000/40 == 25fps), поэтому OnSamples запускается каждые 40 мс.
Мой вопрос заключается в том, какизвлекать информацию о громкости звука из данных PCM и отображать ее в процентах в индикаторе выполнения [0-100]?
Это то, что у меня есть до сих пор:
double average = 0;
for (int a = 0; a < sampleData.Length; ++a)
{
average += Math.Abs(sampleData[a]);
}
average /= sampleData.Length;
double volume = 20 * Math.Log10(average);
Значениезатем индикатор выполнения устанавливается на громкость:
progressBar.Value = volume;
Мой код, очевидно, не работает, поскольку значение громкости почти всегда находится на одном уровне.
Любая помощь приветствуется!