C#和音频生成/播放

时间:2013-01-29 02:50:14

标签: c# playback audio

我正在制作一个音频合成器,我在找出用于音频播放的内容时遇到了问题。我正在使用物理和数学来计算源波形,然后需要将该波形馈送到可以将其作为声音播放的东西。我需要的东西可以1)播放我计算的波形和2)同时播放多个声音(比如按住其他键的同时按住钢琴上的一个键)。我已经对此做了一些研究,我找不到能完成这两件事的东西。据我所知,我有5个可能的选择:

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

1 个答案:

答案 0 :(得分:4)

毫无疑问,{p> http://naudio.codeplex.com。马克是SO的常客,产品很好,有很好的代码示例。

有效。我们用它制作了一些很棒的东西。