C#Silverlight获得声音频率

时间:2011-09-02 23:57:13

标签: c# silverlight audio byte bytearray

我一直在尝试使用以下代码来从麦克风中读取当前声音

_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 个答案:

答案 0 :(得分:3)

建立声音频率需要将信号从时域转换到频域。它将涉及Fourier transforms以及随后的输出分析。如果没有对DSP技术的全面了解,对于任何人来说,这都不是一项工作。如果你不得不问,那么你自己实现这一目标还有很长的路要走。我推荐第三方图书馆。

This page给出了频率检测新手的相当好的观点。