C # Silverlight получить частоту звука - PullRequest
3 голосов
/ 03 сентября 2011

Я пытался использовать какой-то код, подобный следующему, чтобы прочитать текущий звук с микрофона

_Capture - CaptureSource, а _Encoder - SimpleAudioEncoder (пользовательский класс)

_Capture = new CaptureSource();
_Encoder = new SimpleAudioEncoder(this);
_Encoder.CaptureSource = _Capture;

if (_Capture != null)
{
    _Capture.AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice();
    CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice();
    if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())
    {
        MessageBox.Show("_Capture.Start()");
        _Capture.Start();
    }
}

Определение SimpleAudioEncoder

public class SimpleAudioEncoder : AudioSink
{
    public SimpleAudioEncoder() {

    }
    protected override void OnCaptureStarted()
    {

    }

    protected override void OnCaptureStopped()
    {

    }

    protected override void OnFormatChange(
    AudioFormat audioFormat) {

    }

    protected override void OnSamples(
    long sampleTimeInHundredNanoseconds,
    long sampleDurationInHundredNanoseconds,
    byte[] sampleData)
    {

    }
}

Я предполагаю, что массив sampleData byte[] содержит данные, которые я ищу, но как я могу использовать их для определения частоты звука?

Было бы здорово, если бы я мог найти такую ​​функцию, как

public double GetFreq(byte[] data)

Для использования как

double hertz = GetFreq(sampleData)

1 Ответ

3 голосов
/ 03 сентября 2011

Установка частоты звука требует преобразования сигнала из временной области в частотную область.Он будет включать преобразования Фурье и последующий анализ выходных данных.Это действительно не работа для кого-то без довольно глубокого понимания методов DSP.Если вам нужно спросить, то вы не в состоянии реализовать это самостоятельно.Я бы порекомендовал стороннюю библиотеку.

Эта страница дает довольно хорошее представление от новичка в области определения частоты.

...