我一直在尝试使用以下代码来从麦克风中读取当前声音
_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)
答案 0 :(得分:3)
建立声音频率需要将信号从时域转换到频域。它将涉及Fourier transforms以及随后的输出分析。如果没有对DSP技术的全面了解,对于任何人来说,这都不是一项工作。如果你不得不问,那么你自己实现这一目标还有很长的路要走。我推荐第三方图书馆。
This page给出了频率检测新手的相当好的观点。