【发布时间】:2015-09-13 14:41:22
【问题描述】:
在详细说明错误消息、突出显示异常的位置之前,我已经发布了相关内容,人们似乎忽略了我写的内容,只是潜入代码进行猜测。
所以我要发布代码,虽然我承认我不知道到底出了什么问题,但我知道哪里出了问题,所以如果你能放纵我的新手,我将不胜感激。
WaveIn sourceStream = null;
WaveFileWriter waveWriter = null;
SaveFileDialog save = new SaveFileDialog();
private void sourceStream_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveWriter == null) return;
//Adds bytes to the wave file, storing them in a buffer?
waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
private void recordButton_Click(object sender, RoutedEventArgs e)
{
MainWindow mw = new MainWindow();
//Get device number from MainWindow.DeviceButton().
int devNum = mw.DeviceButton();
if (recordButton.Content.ToString() == "RECORD")
{
recordButton.Content = "STOP";
//Start recording audio.
sourceStream = new WaveIn();
sourceStream.DeviceNumber = devNum;
//1. Set the sample rate(?). 2. Get number of channels supported on the device.
sourceStream.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(devNum).Channels);
waveWriter = new WaveFileWriter(save.FileName, sourceStream.WaveFormat);
sourceStream.DataAvailable += new EventHandler<WaveInEventArgs>(sourceStream_DataAvailable);
sourceStream.StartRecording();
}
else if(recordButton.Content.ToString() == "STOP")
{
sourceStream.StopRecording();
waveWriter.Dispose();
save.Filter = "Wave Files (*.wav)|*.wav;";
if (save.ShowDialog() != true) return;
recordButton.Content = "RECORD";
}
}
错误在这一行:
waveWriter = new WaveFileWriter(save.FileName, sourceStream.WaveFormat);
这是一个运行时错误,触发了 System.ArgumentException。非常笼统,我得到的唯一有用的信息是“空路径名不合法”消息。
现在,我将跟随一些示例代码来熟悉 NAudio,但它们实际上并没有设置 save.FileName()。所以自然我没有,老实说我不认为这是必要的或问题,但认为值得一提以防万一。
就个人而言,我也没有在示例代码中看到这一点,我没有看到保存对话和实际保存我的音频流之间的联系。也许我错过了这个组件?
【问题讨论】:
-
设置断点并单步执行代码。你有没有显示
SaveFileDialog? -
save.FileName在那个时候有值吗?如果真的听起来问题是传递给WaveFileWriter构造函数的文件名无效。
标签: c# audio stream streaming naudio