我需要在指定的IP地址和端口上接收UDP数据,并使用C#和VS 2017将其转换为WAV文件。我做了一些谷歌并且读到NAudio可以帮助做到这一点。所以我在https://github.com/naudio/NAudio上下载了NAudioDemo,并在VS 2017中打开了NAudioDemo项目。在确保恢复了NAudio NuGet包后,我运行了项目,选择了网络聊天演示加载并点击了加载按钮。
这加载了网络聊天演示。 我在文本框中输入了正确的IP地址和端口号,并确保正确设置了压缩和协议值。
您将在屏幕截图中注意到尚未设置输入设备下拉列表。这是因为我在 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文件? 谢谢。
答案 0 :(得分:0)
很显然,没有声卡,您就无法播放音频。因此,请删除与WaveOut
相关的所有代码,并创建一个WaveFileWriter
。当您收到DataReceived
事件时,将接收到的音频写入WaveFileWriter
(使用Write
方法)。完成后,请确保Dispose
WaveFileWriter