c# - 使用带有 UDP 且没有麦克风的 NAudio
问题描述
我需要在指定的 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.dll BadDeviceId 调用 waveOutOpen 中发生了“NAudio.MmException”类型的未处理异常
我想知道是否抛出异常是因为我正在运行的服务器没有输入设备。或者它可能是别的东西。
您能否帮我在没有输入设备的情况下在 Windows Server 2012 R2 上运行和工作,以便我可以将 UDP 数据保存为 WAV 文件?谢谢你。
解决方案
显然没有声卡你不能播放音频。所以摆脱所有与 相关的代码WaveOut
,然后创建一个WaveFileWriter
。当你得到一个DataReceived
事件时,将接收到的音频写入WaveFileWriter
(使用Write
方法)。然后确保完成Dispose
后WaveFileWriter
推荐阅读
- visual-studio - MSBuild 忽略所需的配置
- mysql - 查询以获取两个表中每个 ID 的计数
- python - Python:numpy:检测到解释器更改 - 每个进程只能将这个模块加载到一个解释器中
- sql-server - 如何使用“赋予某些不同行相同的身份”的选项来创建计数器(身份)?
- python - 我的函数中的打印语句出现语法错误。我不知道我做错了什么
- vba - 使用两列创建字典并根据单元格值提取值
- python - 如何自定义 Python 的方法解析顺序(mro)?
- arrays - 如何检查数组是否有超过 2 个重复元素
- c# - 如何将字符串数组转换为泛型数组类型,同时允许非数组和数组作为类的泛型类型参数?
- java - 从主数组中删除对象的类