用 C# 中的音频馈送捕获设备例如麦克风

问题描述

有什么办法可以在 C# 中直接将音频播放到捕获设备中吗?在我的项目中,我稍后将不得不使用带有音频的虚拟捕获驱动程序提供数据,以便我可以在其他程序中使用它并在其他任何地方播放想要的音频,但我不确定在 C# 中是否可行,我尝试使用 {{ 3}}(这真是太棒了):

    var enumerator = new MMDeviceEnumerator();
    MMDevice captureDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture,Role.Multimedia);
    WasapIoUt wasapIoUt = new WasapIoUt(captureDevice,AudioClientShareMode.Shared,false,0);

但最终它只是抛出一个带有代码 COMException0x88890003,它转换为错误“设置了 AUDCLNT_STREAMFLAGS_LOOPBACK 标志,但端点设备是捕获设备,而不是渲染设备”。那么到底有没有可能的解决方案,还是我必须转向另一种语言,如 C++?

解决方法

您不能将音频推送到自行生成音频的设备,即“捕获设备”。

Loopback mode 表示您可以从渲染设备获得音频流的副本,但反之则不行。

事情可以或多或少地按照您的假设工作的方式是当您有一个特殊的(和自定义的或第三方的,因为不存在这种类型的股票实现)实现音频捕获设备,旨在生成由外部应用程序提供的音频例如您通过 API 推送有效负载音频数据。

切换到 C++ 对这个挑战没有帮助。