Я пытался использовать какой-то код, подобный следующему, чтобы прочитать текущий звук с микрофона
_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)