7

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

  • 以每样本 8 位 PCM 格式连续录制来自(默认)Windows 音频输入设备的音频
  • 对于捕获的每 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 真的死了?另一个 StackOverlow 问题表明 XNA 是托管 DirectX 的替代品,但它缺乏我需要的那种低级功能。

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

4

4 回答 4

4

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

于 2009-12-10T16:12:21.137 回答
2

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

于 2009-12-10T16:19:50.160 回答
1

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

于 2009-12-10T16:16:25.573 回答
1

另一个是FMOD

于 2009-12-12T16:59:56.580 回答