C# 和音频生成/播放

本文关键字:播放 音频 | 更新日期: 2023-09-27 17:56:20

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

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

任何人都可以为我提供任何指导或如何创建灵活的音频播放吗?

C# 和音频生成/播放

http://naudio.codeplex.com ,毫无疑问。Mark 是 SO 的常客,产品活得很好,有很好的代码示例。

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