Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为捕获设备(如麦克风)提供C语言的音频#_C#_Windows_Naudio_Wasapi - Fatal编程技术网

C# 为捕获设备(如麦克风)提供C语言的音频#

C# 为捕获设备(如麦克风)提供C语言的音频#,c#,windows,naudio,wasapi,C#,Windows,Naudio,Wasapi,有没有办法将音频直接播放到C#中的捕获设备中?在我的项目中,我将不得不在稍后提供一个带有音频的虚拟捕获驱动程序,以便我可以在其他程序中使用它,并在其他任何地方播放所需的音频,但我不确定这在C#中是否可行,我尝试使用(这真是令人惊讶): var枚举器=新的MMDeviceEnumerator(); MMDevice captureDevice=enumerator.GetDefaultAudioEndpoint(DataFlow.Capture,Role.Multimedia); WasapiOu

有没有办法将音频直接播放到C#中的捕获设备中?在我的项目中,我将不得不在稍后提供一个带有音频的虚拟捕获驱动程序,以便我可以在其他程序中使用它,并在其他任何地方播放所需的音频,但我不确定这在C#中是否可行,我尝试使用(这真是令人惊讶):

var枚举器=新的MMDeviceEnumerator();
MMDevice captureDevice=enumerator.GetDefaultAudioEndpoint(DataFlow.Capture,Role.Multimedia);
WasapiOut WasapiOut=新WasapiOut(captureDevice,AudioClientShareMode.Shared,false,0);

但最终它只是抛出一个带有代码的
comexException
,该代码转换为错误“设置了
AUDCLNT\u STREAMFLAGS\u LOOPBACK
标志,但端点设备是捕获设备,而不是渲染设备”。那么,到底有没有可能的解决方案,或者我必须转向C++之类的另一种语言吗?

< P>你不能将音频推到自己产生音频的设备上,“捕获设备”。 这意味着您可以从渲染设备获得音频流的副本,但这不适用于其他方式

当你有一个特殊的(而且是定制的或第三方的,因为不存在这种类型的库存实现)音频捕获设备实现时,事情或多或少会像你假设的那样工作,该设备设计用于生成外部应用程序提供的音频,例如通过API推送有效负载音频数据


切换C++将不会有助于这个挑战。

有趣,所以虚拟音频捕获驱动程序必须是负责获得自己的数据,如果我得到它的权利。能否请您引导我找到一些链接,在这些链接中,我可以找到有关本地推送有效负载数据的过程的更多信息,其他应用程序可以读取这些数据(如此场景中的自定义驱动程序)?恐怕最接近的示例是来自DDK的通用音频设备驱动程序。一种解决方法是使用第三方虚拟音频软件,它创建一对虚拟设备,用于捕获和播放。你会“玩”到后者,驱动程序会复制前者显示的来自捕获设备的数据。不幸的是,我不能在这个项目中使用第三方驱动程序,特别是如果它们不是开源的,我将不得不从头开始构建一个:D