c# Silverlight获得声音的频率
本文关键字:频率 声音 Silverlight | 更新日期: 2023-09-27 18:07:41
我一直在尝试使用如下代码从麦克风读取当前声音
_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)
使用like
double hertz = GetFreq(sampleData)
建立声音的频率需要将信号从时域转换到频域。它将涉及傅里叶变换和随后的输出分析。这真的不是一个工作,任何人没有相当彻底的了解DSP技术。如果你不得不问,那么你离自己实现这个还有很长的路要走。我建议使用第三方库。
这个页面给出了一个相当好的观点,从一个新的频率检测。