Naudio:捕获微型扇形音频并保存到C#MemoryStream作为WAVE格式

问题描述 投票:0回答:1
我现在正在尝试的是避免保存WAV文件并直接从录制过程中发送存储器。

是A C#(非常)初学者开发人员,我正在使用Naudio库中的出色样本,并尝试将录制字节直接保存到以下记忆流中:

Wrater是WaveFileWriter对象; memstream是一个内存式对象
void OnDataAvailable(object sender, WaveInEventArgs e)
{
    if (InvokeRequired)
    {
        //Debug.WriteLine("Data Available");
        BeginInvoke(new EventHandler<WaveInEventArgs>(OnDataAvailable), sender, e);
    }
    else
    {
        //this is my new MemoryStream object
        memStream.Write(e.Buffer, 0, e.BytesRecorded);

        //this is the reguler working writer object
        writer.Write(e.Buffer, 0, e.BytesRecorded);

        int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);
        if (secondsRecorded >= 5)
        {
            StopRecording();
        }
        else
        {
            progressBar1.Value = secondsRecorded;
        }
    }
}

尽管此编译并运行正常,但MemoryStream不被API接受,这会导致运行时错误(不良请求)。

我只能猜测我的内存流确实没有波浪格式。

任何建议我如何确保我的内存流确实代表WAV音频内容?

谢谢你, Márcio

	

该问题的答案/解决方案是使用WaveFileWriter并将字节直接保存到MemoryStream而不是文件。 WaveFileWritter将原始字节[]包裹为格式的波流。根据需要更改率和渠道。

writerMem = new WaveFileWriter(memStream, new WaveFormat(44100, 16, 1));

写入字节给WaveFileWriter:

writerMem.Write(e.Buffer, 0, e.BytesRecorded);

呼叫API仅通过内存流
c# audio naudio
1个回答
0
投票
var recResult = speechToText.Recognize( audio: memStream, model: "pt-BR_Multimedia", contentType: "audio/wav");

这种方式,API接受内存并从内部识别波流。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.