【问题标题】:Capturing microphone audio using Naudio + WASAPI?使用 Naudio + WASAPI 捕获麦克风音频?
【发布时间】:2013-06-01 12:52:16
【问题描述】:

我正在寻找有关如何使用 Naudio + WASAPI 捕获麦克风音频的示例代码。

(我对直接到磁盘录制不感兴趣,我需要实时处理输入缓冲区以做一些音频效果。)

我搜索了很多,但在网上找不到任何像样的样本。

你能帮忙吗?

附:也欢迎 BASS 库和 C# 示例!

【问题讨论】:

    标签: capture microphone naudio bass wasapi


    【解决方案1】:

    NAudio source code 附带一个演示应用程序,展示如何使用 WASAPI 捕获音频。看NAudioDemo\RecordingDemo\RecordingPanel.cs

    【讨论】:

    • 感谢您的回答。我看过那个例子,但似乎缓冲区大小在不断变化(7000-8000 字节)。有没有办法修改此代码以使缓冲区大小恒定?
    • 我认为这是 WASAPI 实现方式的产物。如果您需要恒定大小,您可以自己将缓冲区分成块。
    【解决方案2】:

    MSDN 有很多代码示例,虽然没有涵盖 NAudio,但它们确实有一些示例详细展示了如何使用 Windows 音频会话 API。

    由于 WASAPI 是纯本机 API,因此有两个示例项目向您展示如何从纯本机应用程序 Here 使用该 API,以及向您展示如何构建包装 API 的本机组件的示例从 CSharp 应用程序消费。我找不到指向 C#/C++ 示例的直接链接,但它包含在 Windows 8 App Samples 包中。然后可以选择完全为 API 编写托管包装器,但除非您享受痛苦并且正在寻找编组的冒险,否则我不会推荐它......

    如果您正在为 Windows Phone 开发,那么 WP8 SDK 中有一个 VOIP 示例,其中介绍了如何使用 WASAPI 捕获和呈现 PCM 音频数据。

    正如 Mark 所指出的,pcm 数据缓冲区的大小可能会随时间而变化,这部分是因为 WASAPI 是一种低延迟音频 API,因此消费者(您的应用程序)之间的抽象很少和生产者(司机)尽可能。尽管没有什么可以阻止您自己进行一些修复大小缓冲,并且仅在您自己的缓冲区已满时才将数据传递给您的应用程序。

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2013-04-03
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2016-10-13
      • 1970-01-01
      相关资源
      最近更新 更多