gpt4 book ai didi

c# - 构造 WaveIn 时出现 NAudio InvalidOperationException

转载 作者:太空狗 更新时间:2023-10-29 20:03:13 25 4
gpt4 key购买 nike

我是 NAudio 的新手,我正在尝试编写一个小程序来记录来自麦克风的一些音频并将其写入 Wave 文件。当我在我的程序的 Main 函数中调用 recordStuff() 函数时,程序没有通过 WaveIn 对象上的构造并且程序终止并出现 InvalidOperationException 消息“使用 WaveInEvent 在后台线程上记录” .了解 NAudio 的人可以告诉我这是什么意思吗?我试过在它自己的线程中调用 recordStuff() 函数,但我得到了相同的结果。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NAudio.Wave;

namespace SimpleWave
{
class Recorder
{
public Recorder()
{
writer = new WaveFileWriter("C:\\Users\\Paul\\Desktop\\yeah.wav", new NAudio.Wave.WaveFormat(44100, 1));
}

public static List<byte> buff = new List<byte>();
public static WaveFileWriter writer;

public void recordStuff()
{
// WaveIn Streams for recording
WaveIn waveInStream;

waveInStream = new WaveIn();
waveInStream.DeviceNumber = 0;
waveInStream.WaveFormat = new WaveFormat(44100, 2);
writer = new WaveFileWriter(@"C:\Users\Paul\Desktop\this.wav", waveInStream.WaveFormat);

waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
}

public void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
writer.Write(e.Buffer, 0, e.BytesRecorded);
}
}
}

最佳答案

默认的 WaveIn 构造函数使用 Windows 消息进行回调。但是,如果您正在运行控制台应用程序或从后台线程运行,则不会处理这些 Windows 消息。最简单的解决方案是改用 WaveInEvent 类。

waveInStream = new WaveInEvent();

你的代码的另一个问题是你需要保持 waveInStream 事件直到你完成录制(即你需要能够在某些时候调用 StopRecording point), 所以你应该使 waveInStream 成为 Recorder 类的一个字段。

关于c# - 构造 WaveIn 时出现 NAudio InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com