来自麦克风迭代结果的缓冲流
Posted
技术标签:
【中文标题】来自麦克风迭代结果的缓冲流【英文标题】:Buffer stream from microphone iterating results 【发布时间】:2020-02-28 16:04:52 【问题描述】:我想做的是,不断地听麦克风,让麦克风写入器写入流,当流具有 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);
这不起作用,请帮我看看如何做。 谢谢
【问题讨论】:
【参考方案1】:您需要了解一些您错过的事情。
首先,WaveInEvent
会异步写入来自麦克风的数据。这是将数据从麦克风写入某个流的正确 sn-p:
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();
关于如何处理您收到的数据有多种不同的方式,但我不知道您的主要目标,因此很难说您选择哪种处理方式更好。
【讨论】:
感谢您的回答!我明白你的意思,我完全错过了那一点。我想做的是,永远不要停止录制,并按 x 间隔发送数据进行一些处理,所以这有点像后台作业,以某种方法输入数据。以上是关于来自麦克风迭代结果的缓冲流的主要内容,如果未能解决你的问题,请参考以下文章