C# 和音频生成/播放

Posted

技术标签:

【中文标题】C# 和音频生成/播放【英文标题】:C# and Audio Generation/Playback 【发布时间】:2013-01-29 02:50:14 【问题描述】:

我正在制作一个音频合成器,但在弄清楚使用什么来播放音频时遇到了问题。我正在使用物理和数学来计算源波形,然后需要将该波形提供给可以将其作为声音播放的东西。我需要一些可以 1)播放我计算的波形和 2)同时播放多个声音的东西(比如在按下其他键的同时按住钢琴上的一个键)。我已经对此进行了相当多的研究,但我找不到可以同时做这两件事的东西。据我所知,我有 5 种可能的选择:

    DirectSound. 可以将一个波形(一个short[])作为参数,作为声音播放,可以同时播放多个声音。但它不适用于 .NET 4.5。 System.Media.SoundPlayer. 它适用于 .NET 4.5 并且具有比 Direct Sound 更好的音频质量,但它必须从 .wav 文件播放声音并且不能一次播放多个声音(也不能多个SoundPlayer 的实例)。我通过将我的波形转换为内存中的 .wav 格式来“欺骗”SoundPlayer 工作,然后向 SoundPlayer 发送内存中 .wav 文件的 MemoryStream。 我是否可以通过更改流来实现对播放的控制?我无法将字节附加到流中(我尝试过),但我可以将流设置为任意大小,然后将所有字节重新写入每次到达流的末尾时,带有下一段音频数据的流。 System.Windows.Controls.MediaElement。我还没有对此进行过实验,但是从 MSDN 文档中,我没有看到一种在内存中发送波形而不先将其保存到磁盘然后读取它的方法;我不认为我可以将其发送到流中。 System.Windows.Controls.MediaPlayer。我也没有尝试过这个,但文档说它是用来作为某种动画的伴侣的。我可以在不做任何真实(用户可感知的)动画的情况下使用它来达到我想要的效果。 开源解决方案。我对使用开源解决方案犹豫不决,因为我发现它们通常记录不充分且不易维护,但如果有一个记录良好且可以满足我需要的解决方案,我愿意接受。

谁能就这方面或如何创建灵活的音频播放向我提供任何指导?

【问题讨论】:

【参考方案1】:

http://naudio.codeplex.com ,毫无疑问。马克是这里的常客,产品很活跃,有很好的代码示例。

它有效。我们用它构建了一些很棒的东西。

【讨论】:

以上是关于C# 和音频生成/播放的主要内容,如果未能解决你的问题,请参考以下文章

使用 C#、DirectX 和 XNA 播放音频和最终用户的要求

使用 C# 从 RTMP 服务器获取和播放音频流的最简单方法是啥?

在 C# 中播放音频文件

Xamarin Android C# 播放音频流(在线电台)

如何在 C# 中使用 ContentPushStream 播放块音频?

在 C# 中使用 DirectX 进行无缝(循环)音频播放