在 C# 中为捕获设备(例如麦克风)提供音频
Feed a capture device (e.g. microphone) with audio in C#
有什么方法可以在 C# 中将音频直接播放到捕获设备中吗?在我的项目中,稍后我将不得不使用带有音频的虚拟捕获驱动程序,以便我可以在其他程序中使用它并在其他任何地方播放想要的音频,但我不确定在 C# 中是否可行,我尝试使用 NAudio(这真是太棒了):
var enumerator = new MMDeviceEnumerator();
MMDevice captureDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Multimedia);
WasapiOut wasapiOut = new WasapiOut(captureDevice, AudioClientShareMode.Shared, false, 0);
但最终它只是抛出一个带有代码 0x88890003
的 COMException
,它转换为错误“AUDCLNT_STREAMFLAGS_LOOPBACK
标志已设置,但端点设备是捕获设备,而不是渲染设备”。那么到底有什么可能的解决方案还是我必须转向另一种语言如C++?
您不能将音频推送到自己生成音频的设备,“捕获设备”。
Loopback mode 表示您可以从渲染设备获取音频流的副本,但反之则不行。
当你有一个特殊的(和自定义或第三方,因为不存在这种类型的库存实现)音频捕获设备的实现时,事情或多或少可以像你假设的那样工作,旨在生成音频提供的音频外部应用程序,例如您通过 API.
推送负载音频数据
切换到 C++ 将无助于应对这一挑战。
有什么方法可以在 C# 中将音频直接播放到捕获设备中吗?在我的项目中,稍后我将不得不使用带有音频的虚拟捕获驱动程序,以便我可以在其他程序中使用它并在其他任何地方播放想要的音频,但我不确定在 C# 中是否可行,我尝试使用 NAudio(这真是太棒了):
var enumerator = new MMDeviceEnumerator();
MMDevice captureDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Multimedia);
WasapiOut wasapiOut = new WasapiOut(captureDevice, AudioClientShareMode.Shared, false, 0);
但最终它只是抛出一个带有代码 0x88890003
的 COMException
,它转换为错误“AUDCLNT_STREAMFLAGS_LOOPBACK
标志已设置,但端点设备是捕获设备,而不是渲染设备”。那么到底有什么可能的解决方案还是我必须转向另一种语言如C++?
您不能将音频推送到自己生成音频的设备,“捕获设备”。
Loopback mode 表示您可以从渲染设备获取音频流的副本,但反之则不行。
当你有一个特殊的(和自定义或第三方,因为不存在这种类型的库存实现)音频捕获设备的实现时,事情或多或少可以像你假设的那样工作,旨在生成音频提供的音频外部应用程序,例如您通过 API.
推送负载音频数据切换到 C++ 将无助于应对这一挑战。