2

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

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

谁能给我任何指导或如何创建灵活的音频播放?

4

1 回答 1

4

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

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

于 2013-01-29T02:52:24.190 回答