如何从 UDP 消息中播放波形数据(c#)

Posted

技术标签:

【中文标题】如何从 UDP 消息中播放波形数据(c#)【英文标题】:How to play wave data from UDP message (c#) 【发布时间】:2012-07-19 08:11:11 【问题描述】:

我有一个应用程序通过 UDP 端口通过网络接收波形数据(PCM 原始数据)。 如何设置使用 Naudio 播放接收到的波形数据。 我试图用谷歌查找并阅读一些与 Naaudio 文档相关的内容,但到目前为止还没有成功。 任何帮助或提示将不胜感激。提前致谢。

【问题讨论】:

请注意,使用 UDP 并不能保证您将完全接收数据包,或者按照它们发送的顺序。您可以滚动自己的数据包排序代码,但使用 TCP/IP 会更容易。但是,您可能能够通过 LAN 使用 UDP 来“摆脱困境”。理想情况下,您还应该检测缓冲数据何时用完并将“静音”数据传递到音频系统,这样缓冲数据的缺乏就不会导致大多数音频/CD播放器出现的可怕口吃,而只是暂停播放直到真正数据再次可用。 【参考方案1】:

NAudioDemo 应用程序在网络聊天演示中演示了如何执行此操作。您使用BufferedWaveProvider 来存储解压缩的音频,并使用它来馈送 WaveOut。如果没有足够的缓冲音频,您可能还希望自动暂停,以防止播放卡顿。

【讨论】:

嗨,马克,首先感谢您提供的精彩图书馆。我已经下载了网络聊天演示、Mp3 流媒体演示的源代码,现在我正在尝试理解这些东西,但由于我是 .net 和音频编程的新手,所以要理解全体员工有点复杂。所以谢谢你的提示,它们对我很有价值。您能否提供一些更简单的网络流媒体示例或其他一些简单的程序示例?【参考方案2】:

好吧,我很久以前就在 nAudio 上做了一些工作,很抱歉我可能帮不上什么忙,因为我恐怕我几乎不记得它了...

但我认为有类似 WaveOut 类和 WaveStream 之类的东西,其中包含您的 WAV 数据,您在将 WaveOut 类与 WaveStream 关​​联后调用 Play。

尝试看一下这个 WavOut 类,你可能会得到一些线索,当我从事这个工作时,我对这个音频世界还很陌生,我的方法是使用他们播放 wav 文件的示例程序,看看它们是怎样的这样做...这就是我弄清楚需要做什么的方式....

祝你好运……

【讨论】:

感谢您的回复。我已经下载了一些使用 WaveOut 和 WaveStream 等人员的示例,但它们与我的案例没有太大关系。无论如何,感谢您的回复。【参考方案3】:

简单。

UDP 流 --> 缓冲区 --> NAudio WaveStream

首先,检查源 PCM 音频是否可以被 NAudio 正确播放。在通过套接字发送之前,请“离线”执行此操作。

我会做一些研究并稍后发布一些代码。

【讨论】:

感谢您的回复。我已经从 UDP 消息中提取了数据并将其存储在数组中。但我无法将此缓冲区连接到 Nadio。我是这个领域的新手,如果您能发布一些代码示例,我将不胜感激。

以上是关于如何从 UDP 消息中播放波形数据(c#)的主要内容,如果未能解决你的问题,请参考以下文章

从 UDP 接收到的消息播放音频,点击声音(Naudio API)

分析当前播放音乐曲目的波形数据

从存储在数组中的波形播放声音

C# 和音频生成/播放

波形音频缓冲区

如何在 Flash 中创建一个音乐播放器来创建音频文件的波形?