如何使用默认输出设备作为使用 AudioGraph 录制音频的源?
Posted
技术标签:
【中文标题】如何使用默认输出设备作为使用 AudioGraph 录制音频的源?【英文标题】:How to use default output device as a source to record audio with AudioGraph? 【发布时间】:2018-01-26 15:39:58 【问题描述】:在我的 UWP 应用程序中,我有以下代码,它与输入设备 (DeviceInformation) 一起使用,用于录制音频并进行处理。我想通过使用默认输出设备而不是麦克风来扩展它。这基本上意味着应用程序将分析通过声卡和扬声器的音频。
这是我的代码:
AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Media)
QuantumSizeSelectionMode = QuantumSizeSelectionMode.LowestLatency
;
CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);
if (result.Status != AudioGraphCreationStatus.Success)
// Cannot create graph
System.Diagnostics.Debug.WriteLine(String.Format("AudioGraph Creation Error because 0", result.Status.ToString()));
return;
graph = result.Graph;
// Create a device output node
CreateAudioDeviceOutputNodeResult deviceOutputNodeResult = await graph.CreateDeviceOutputNodeAsync();
if (deviceOutputNodeResult.Status != AudioDeviceNodeCreationStatus.Success)
return;
AudioDeviceOutputNode deviceOutputNode = deviceOutputNodeResult.DeviceOutputNode;
System.Diagnostics.Debug.WriteLine("Device Output connection successfully created");
// Create a device input node using the default audio input device
CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Other, graph.EncodingProperties, SelectedDevice);
if (deviceInputNodeResult.Status != AudioDeviceNodeCreationStatus.Success)
// Cannot create device input node
System.Diagnostics.Debug.WriteLine(String.Format("Audio Device Input unavailable because 0", deviceInputNodeResult.Status.ToString()));
return;
AudioDeviceInputNode deviceInputNode = deviceInputNodeResult.DeviceInputNode;
System.Diagnostics.Debug.WriteLine("Device Input connection successfully created");
frameOutputNode = graph.CreateFrameOutputNode();
deviceInputNode.AddOutgoingConnection(frameOutputNode);
AudioFrameInputNode frameInputNode = graph.CreateFrameInputNode();
frameInputNode.AddOutgoingConnection(deviceOutputNode);
// frameInputNode.QuantumStarted += FrameInputNode_QuantumStarted;
// Attach to QuantumStarted event in order to receive synchronous updates from audio graph (to capture incoming audio).
graph.QuantumStarted += GraphOnQuantumProcessed;
如何在
中使用默认的输出设备CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Other, graph.EncodingProperties, SelectedDevice);
【问题讨论】:
msdn论坛social.msdn.microsoft.com/Forums/en-US/…已经回答了这个问题,即使连接了耳机和其他设备,您也可以更改输出设备 不,那是不同的东西。我想录制/处理通过声卡到输出(扬声器)而不是麦克风的音频。 要录制播放声卡声音***.com/questions/41615457/… 【参考方案1】:在一行中获取当前默认的音频输出(Render)设备:
DeviceInformation defaultDevice = await DeviceInformation.CreateFromIdAsync(MediaDevice.GetDefaultAudioRenderId(AudioDeviceRole.Default));
您还可以使用MediaDevice 类获取默认捕获设备并监听每个更改的事件。
您似乎无法使用 Render 设备作为输入节点来录制系统音频 (see here)
【讨论】:
以上是关于如何使用默认输出设备作为使用 AudioGraph 录制音频的源?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AudioGraph 中将 RemoteIO、Mixer 和 Filter 连接在一起?