【问题标题】:How to use default output device as a source to record audio with AudioGraph?如何使用默认输出设备作为使用 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);

【问题讨论】:

标签: c# audio uwp


【解决方案1】:

在一行中获取当前默认的音频输出(Render)设备:

DeviceInformation defaultDevice = await DeviceInformation.CreateFromIdAsync(MediaDevice.GetDefaultAudioRenderId(AudioDeviceRole.Default));

您还可以使用MediaDevice 类获取默认捕获设备并监听每个更改的事件。

您似乎无法使用 Render 设备作为输入节点来录制系统音频 (see here)

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2014-11-22
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多