c# - 如何使用默认输出设备作为通过AudioGraph录制音频的来源?

标签 c# audio uwp

在我的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);

最佳答案

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

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

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

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

关于c# - 如何使用默认输出设备作为通过AudioGraph录制音频的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48464622/

相关文章:

audio - 客户端OR E/MediaPlayer拒绝AUDIO_OUTPUT_FLAG_FAST:错误(1,-19)

c# - UWP应用程序不断抛出未经授权的访问异常

audio - 为什么在Windows 7 PC上无法使用vb脚本使声音静音?

c# - RAM 性能基准测试 - UWP 和 C#

c# - 在 UWP 中的 Rtf 和 Html 之间转换

c# - 如何首先使用 EF 4 代码重构代码/数据库模式 - 数据迁移

c# - 声明一个具有增量值的数组 - 有捷径吗?

C# - 执行200个http get请求并输出结果

c# - .NET StringBuilder 和逐字字符串文字

javascript - 有没有办法使用 Web Audio API 重新采样音频流?