在c#中填充和播放音频缓冲.NET 4.0)

本文关键字:NET 缓冲 音频 播放 填充 | 更新日期: 2023-09-27 17:52:59

我可以找到一些适合。net 4.0 (c#)的(库),具有以下功能:+读取mp3/wav样本,直接访问加载样本的样本缓冲区?(例如,我想加载mp3样本和编程添加混响,合唱,和更多的自定义效果由我实现)+直接播放音频缓冲区(数组的浮动)+将音频缓冲区保存为mp3或wav

前段时间,我发现。net的ASIO只适用于。net 3.5,有。net 4.0的东西吗?非常感谢你的帮助。

在c#中填充和播放音频缓冲.NET 4.0)

. net的ASIO不能帮助你破解mp3或wav文件。Windows中最现代的API是Microsoft Media Foundation。这些都是COM api,所以你要么要从。net做(也许很痛苦)COM互操作,要么(更容易)写一个c++/CLI包装器。如果您使用c++/CLI包装器,则需要注意性能问题(特别是对于音频编程来说,延迟是多么关键)。

我怀疑你在。net中编程时是否能获得所需的音频延迟。一个好的音频驱动程序(如ASIO)将使您的延迟降低到3毫秒。所以如果你的目标是"实时音频",你就需要更快地生成音频缓冲(除非你可以接受更长的延迟)。换句话说,Windows api处理的"时间间隔"是以100纳秒为间隔:)。

你可能不想自己破解这些文件。它变得乏味,因为它不仅仅是mp3和wav。您还必须知道wav是如何格式化的(以考虑不同的比特率,通道数量等)。使用Media Foundation,它会自动为你加载写解码器,你只需要给它文件路径。看看这个教程,它展示了打开一个现有的WAV文件和编写一个新的WAV文件。我最近刚为我正在创建的鼓音序器走了这条路,而且它根本不是很痛苦(如果你熟悉COM编程)。

使这成为可能的MF中的核心组件是MFSourceReader。

如果你想在修改后播放音频,你可以看看Windows SDK中的示例"RenderExclusiveEventDriven"(我相信在"audio"下)。这也是我为鼓定序器所做的。延迟不会是一个问题,你只是处理字节数组,所以操作原始数据变得非常容易。虽然在这一点上,您可能会坚持使用ASIO . net路由,并使用它来播放从MFSourceReader获得的原始数据。

我不认为Media Foundation周围有。net包装器(尽管如果有人已经做了这项工作,请随时在这里发布,因为知道它将是很棒的)。