我的代码运行并创建了一个test.wav,但是这个文件不包含任何内容。我正在尝试在控制台应用程序中运行此代码。请帮助
using System;
using System.Media;
using NAudio;
using NAudio.Wave;
class sound
{
public static void Main()
{
WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(0);
Console.WriteLine("Now recording...");
WaveInEvent waveSource = new WaveInEvent();
waveSource.DeviceNumber = 0;
waveSource.WaveFormat = new WaveFormat(16000, deviceInfo.Channels);
//waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
string tempFile = (@"C:UsersuserDesktoptest1.wav");
WaveFileWriter waveFile = new WaveFileWriter(tempFile, waveSource.WaveFormat);
waveSource.StartRecording();
}
//void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
//{
// wavefile.WriteData(e.Buffer, 0, e.BytesRecorded);
//}
}
,谁能解释一下被注释的行是什么意思?我是一个编程初学者。
当我编译程序时,它给出了2个错误:错误1:非静态字段、方法或属性需要对象引用。waveSource_DataAvailable(object, NAudio.Wave.WaveInEventArgs)' C:UsersuserDocumentsVisual Studio 2008ProjectssoundsoundProgram.cs 18 49 sound
错误2"wavefile"名称在当前上下文中不存在C:UsersuserDocumentsVisual Studio 2008ProjectssoundsoundProgram.cs 28 21 sound
显然,StartRecording
方法启动一些捕获循环,周期性地引发DataAvailable
事件,以允许用户收集记录的数据。在您的示例代码中,事件句柄正确地将记录的数据附加到文件tempFile
。函数waveInStream_DataAvailable
和waveFile
都必须声明为静态。
试试这个:
using System;
using System.Media;
using NAudio;
using NAudio.Wave;
class sound
{
static WaveFileWriter waveFile;
public static void Main()
{
//WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(0);
Console.WriteLine("Now recording...");
WaveInEvent waveSource = new WaveInEvent();
//waveSource.DeviceNumber = 0;
waveSource.WaveFormat = new WaveFormat(44100, 1);
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
string tempFile = (@"C:UsersuserDesktoptest1.wav");
waveFile = new WaveFileWriter(tempFile, waveSource.WaveFormat);
waveSource.StartRecording();
Console.WriteLine("Press enter to stop");
Console.ReadLine();
waveSource.StopRecording();
waveFile.Dispose();
}
static void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
waveFile.WriteData(e.Buffer, 0, e.BytesRecorded);
}
}