【问题标题】:C#: NAudio - Empty path name is not legalC#:NAudio - 空路径名不合法
【发布时间】: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


【解决方案1】:

我看到调用:

SaveFileDialog save = new SaveFileDialog();

但是,我看不到你在哪里打电话

save.ShowDialog()

在您引用文件名之前。您需要进行该调用才能选择路径/文件名。然后,您应该在调用引用它的方法之前检查 FileName 是否为空。例如,

if (!string.IsNullOrEmpty(save.FileName)) 
{
    <Code Goes Here>
}

【讨论】:

  • 您好,久违了。但是我不是在 if 语句中调用 save.ShowDialog 吗?
猜你喜欢
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多