推荐的在 .NET 应用程序中使用音频的方法?

Posted

技术标签:

【中文标题】推荐的在 .NET 应用程序中使用音频的方法?【英文标题】:Recommended way to work with audio in .NET applications? 【发布时间】:2009-12-10 16:02:42 【问题描述】:

我正在尝试在 .NET 3.5 下使用一个简单的音频应用程序(最好在 VB.NET 中,但会很乐意使用 C#)。我想做的是:

从(默认)Windows 音频输入设备以 8 位/样本 PCM 格式持续录制音频 对于捕获的每 N 个字节,对原始音频进行一些分析(一些 RMS 和/或 SPL 计算 - 基本上你需要一个漂亮的 VU 条形图) 如果分析后发现音频片段很有趣,请使用压缩文件格式(例如 MP3)保存它

我注意到的第一件事是基本 .NET Framework 中几乎不存在音频支持。谷歌搜索了一下发现了一些示例代码,主要使用托管 DirectX。然而,缺乏 MSDN 文档、库的陈旧 (2004) 以及 VS.NET 2008 中以下威胁性的 MDA 异常,让我确信这是一条死胡同:

Message: DLL 'Microsoft.DirectX.dll' is attempting managed execution inside 
OS Loader lock. Do not attempt to run managed code inside a DllMain or image
initialization function since doing so can cause the application to hang.

...我认为可以粗略地翻译为“甚至不要尝试使用这些东西。”我在这里遗漏了什么,还是托管 DirectX 真的死了? Another StackOverlow question 建议 XNA 是托管 DirectX 的替代品,但它缺少我需要的那种低级功能。

那么,哪个 API 或第三方库实际上对 .NET 下的音频开发有用?使用 COM 互操作或 P/Invoke 是可以接受的,只要有一些不错的 .NET 示例代码可以开始使用...

【问题讨论】:

【参考方案1】:

你看过NAudio on CodePlex吗?看起来它具有您需要的功能。

【讨论】:

【参考方案2】:

我一直是具有 .NET API 的 BASS library 的粉丝。

【讨论】:

【参考方案3】:

如果您想尝试基于 DirectX 的声音解决方案,您可以使用SlimDX。它支持 DirectSound 和 XAudio 接口。

【讨论】:

谢谢,另一个有希望的解决方案,我的弱 Google-fu 不知何故忽略了【参考方案4】:

另一个是FMOD。

【讨论】:

谢谢——不过对于商业用途来说有点贵。我在此期间发现的另一个是ambiera.com/irrklang/irrklang_pro.html,它也有奇怪的许可 我不认为 IrrKlang 的许可有那么奇怪...开发人员允许您选择最适合您情况的许可。

以上是关于推荐的在 .NET 应用程序中使用音频的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .Net 应用程序中识别默认音频设备?

使用任何方法在 openTK 应用程序中播放音频的最简单方法

在 C++ 中捕获音频

如何录制特定应用程序的音频? vb.net

如何在asp.net的Web应用程序中录制音频? [复制]

如何为 Web 应用程序托管音频文件