首页 > 解决方案 > 使用带有 UDP 且没有麦克风的 NAudio

问题描述

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

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

NAudio 演示 (x64) 屏幕截图

您会在屏幕截图中注意到输入设备下拉菜单尚未设置。这是因为我在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.dll BadDeviceId 调用 waveOutOpen 中发生了“NAudio.MmException”类型的未处理异常

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

您能否帮我在没有输入设备的情况下在 Windows Server 2012 R2 上运行和工作,以便我可以将 UDP 数据保存为 WAV 文件?谢谢你。

标签: c#udpwavnaudiowindows-server-2012-r2

解决方案


显然没有声卡你不能播放音频。所以摆脱所有与 相关的代码WaveOut,然后创建一个WaveFileWriter。当你得到一个DataReceived事件时,将接收到的音频写入WaveFileWriter(使用Write方法)。然后确保完成DisposeWaveFileWriter


推荐阅读