来自麦克风迭代结果的缓冲流



我想做的是,不断地听麦克风,让麦克风写入流,当流的长度为x时,产生结果,清除流并继续循环。然后从呼叫者分析接收到的所有字节,我对麦克风录音有点陌生,我不知道下面的代码是否注册了什么,我正在使用NAudio库:

这是来电者:

var buffers = service.StreamHearing();
foreach (var buffer in buffers)
{
//analyse
}

然后是实际服务:

public IEnumerable<byte[]> StreamHearing()
{
var buffer = new byte[512];
using(var stream = new MemoryStream(buffer))
using(var writer = new WaveFileWriter(new IgnoreDisposeStream(stream), new WaveFormat(44100, 1)))
{
var recorder = new WaveInEvent
{
WaveFormat = new WaveFormat(44100, 1),
BufferMilliseconds = 100
};
recorder.StartRecording();
while (true)
{
yield return buffer;
buffer = new byte[512];
stream.SetLength(0);
}
}
}

这不管用,请帮我怎么做。感谢

您需要了解一些您错过的东西。首先,WaveInEvent将异步写入来自麦克风的数据。以下是将麦克风中的数据写入某个流的正确片段:

var buffer = new byte[512];
var recorder = new WaveInEvent
{
WaveFormat = new WaveFormat(44100, 1),
BufferMilliseconds = 100
};
var stream = new MemoryStream(buffer);
var writer = new WaveFileWriter(new IgnoreDisposeStream(stream), recorder.WaveFormat);
recorder.DataAvailable += (source, eventArgs) => 
{
var data = eventArgs.Buffer;
var bytesRead = eventArgs.BytesRecorded;
//here is a place where data from the microphone will be available
//you can add your processing right here in case you don't need to record and save the data
writer.Write(data, 0, bytesRead);
};
waveIn.StartRecording(); 

关于如何处理收到的数据,有多种不同的方法,但我不知道你的主要目标,所以很难说你选择什么更好的处理方式。

最新更新