Mat*_*han 7 .net c# audio audio-recording naudio
我是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ath 13
默认WaveIn构造函数使用Windows消息进行回调.但是,如果您正在运行控制台应用程序,或者从后台线程运行,则不会处理这些Windows消息.最简单的解决方案是使用WaveInEvent该类.
waveInStream = new WaveInEvent();
Run Code Online (Sandbox Code Playgroud)
你的代码的另一个问题是你需要保持waveInStream活着直到你完成录制(即你需要能够StopRecording在某个时候调用),所以你应该创建waveInStream一个Recorder类的字段.
| 归档时间: |
|
| 查看次数: |
5464 次 |
| 最近记录: |