使用带有UDP的NAudio而没有麦克风

时间:2018-05-15 17:58:40

标签: c# udp wav naudio windows-server-2012-r2

我需要在指定的IP地址和端口上接收UDP数据,并使用C#和VS 2017将其转换为WAV文件。我做了一些谷歌并且读到NAudio可以帮助做到这一点。所以我在https://github.com/naudio/NAudio上下载了NAudioDemo,并在VS 2017中打开了NAudioDemo项目。在确保恢复了NAudio NuGet包后,我运行了项目,选择了网络聊天演示加载并点击了加载按钮。

这加载了网络聊天演示。 我在文本框中输入了正确的IP地址和端口号,并确保正确设置了压缩和协议值。

NAudio Demo (x64) screen shot

您将在屏幕截图中注意到尚未设置输入设备下拉列表。这是因为我在 Windows Server 2012 R2 上运行演示,并且服务器没有设置任何输入设备,下拉列表中没有任何内容可供选择。

当我单击Start Streaming按钮时,它会调用NetworkChatPanel.Connect方法,并实例化一个新的NetworkAudioPlayer对象。在NetworkAudioPlayer类的构造函数内部,它运行以下代码:

public NetworkAudioPlayer(INetworkChatCodec codec, IAudioReceiver receiver)
{
    this.codec = codec;
    this.receiver = receiver;
    receiver.OnReceived(OnDataReceived);

    waveOut = new WaveOut();
    waveProvider = new BufferedWaveProvider(codec.RecordFormat);
    waveOut.Init(waveProvider);
    waveOut.Play();
}

它创建一个新的WaveOut对象实例并调用waveOut.Init方法。这会导致抛出以下异常:

  

发生了'NAudio.MmException'类型的未处理异常   调用waveOutOpen的NAudio.dll BadDeviceId发生了

我想知道是否抛出了异常,因为我正在运行的服务器没有输入设备。或者它可能是别的东西。

是否可以帮助我在没有输入设备的Windows Server 2012 R2上运行和工作,所以我可以将UDP数据保存为WAV文件? 谢谢。

1 个答案:

答案 0 :(得分:0)

很显然,没有声卡,您就无法播放音频。因此,请删除与WaveOut相关的所有代码,并创建一个WaveFileWriter。当您收到DataReceived事件时,将接收到的音频写入WaveFileWriter(使用Write方法)。完成后,请确保Dispose WaveFileWriter