Я следовал this tutorial о том, как сделать аудиомагнитофон Silverlight. Я подумал, что было бы здорово добавить индикатор уровня громкости, чтобы предоставить пользователю обратную связь о том, что происходит. Однако я не могу заставить это работать правильно.Как визуализировать уровень звука/уровня микрофона в Silverlight 4?
OnSamples Метод класса AudioSink предоставляет необработанные данные PCM в качестве одного из аргументов. Кроме того, я установил свойство AudioFrameSizeAudioCaptureDevice в 40 (1000/40 == 25 кадров в секунду), поэтому 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;
Мой код не работает, по-видимому, так значение объема почти всегда находится на одном уровне.
Любая помощь приветствуется!