Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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# 通过UWP应用程序中的AudioGraph向两台设备发送音频输出_C#_Audio_Uwp - Fatal编程技术网

C# 通过UWP应用程序中的AudioGraph向两台设备发送音频输出

C# 通过UWP应用程序中的AudioGraph向两台设备发送音频输出,c#,audio,uwp,C#,Audio,Uwp,我尝试将麦克风的输入同时发送到扬声器和连接的耳机。 我知道如何使用文件和设备执行此操作,但我不知道如何将第二个设备连接到输出节点并将其附加到图形。 我可以使用CreateDeviceOutputNodeAsync创建节点,但我不知道如何将设备与节点关联。 对于一个设备,当我在创建图形时在设置中将该设备作为主要渲染设备时,它会工作。 这是一个输出设备的工作代码。我不知道如何解决这个问题,使其适用于两个输出设备 private async Task CreateAudioGraph() {

我尝试将麦克风的输入同时发送到扬声器和连接的耳机。 我知道如何使用文件和设备执行此操作,但我不知道如何将第二个设备连接到输出节点并将其附加到图形。 我可以使用CreateDeviceOutputNodeAsync创建节点,但我不知道如何将设备与节点关联。 对于一个设备,当我在创建图形时在设置中将该设备作为主要渲染设备时,它会工作。 这是一个输出设备的工作代码。我不知道如何解决这个问题,使其适用于两个输出设备

private async Task CreateAudioGraph()
{
       AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Speech);
        settings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.LowestLatency;
        settings.DesiredRenderDeviceAudioProcessing = Windows.Media.AudioProcessing.Raw; // this is also set automatically when LowestLatency is set
        settings.PrimaryRenderDevice = OutputDeviceForInput;

        CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);

        if (result.Status != AudioGraphCreationStatus.Success)
        {
            // Cannot create graph

            ConnectionStatus = String.Format("AudioGraph Creation Error because {0}", result.Status.ToString());
            return;
        }

        graphForInputDeviceNo1 = result.Graph;
        ConnectionStatus = "Graph successfully created!";


        // Create a device input node using the selectedt input device
        CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graphForInputDeviceNo1.CreateDeviceInputNodeAsync(MediaCategory.Speech, graphForInputDeviceNo1.EncodingProperties, FirstInputDevice);

        if (deviceInputNodeResult.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device input node
            ConnectionStatus = String.Format("Audio Device Input unavailable because {0}", deviceInputNodeResult.Status.ToString());
            return;
        }

        deviceInputNode = deviceInputNodeResult.DeviceInputNode;

        // Create the first device output node
        CreateAudioDeviceOutputNodeResult deviceOutputNodeNo1Result = await graphForInputDeviceNo1.CreateDeviceOutputNodeAsync();
        if (deviceOutputNodeNo1Result.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device output node
            ConnectionStatus = String.Format("Audio Device Output unavailable because {0}", deviceOutputNodeNo1Result.Status.ToString());
            return;
        }

        deviceOutputNodeNo1 = deviceOutputNodeNo1Result.DeviceOutputNode;

        // Create the second device output node
        CreateAudioDeviceOutputNodeResult deviceOutputNodeNo2Result = await graphForInputDeviceNo1.CreateDeviceOutputNodeAsync();
        if (deviceOutputNodeNo2Result.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device output node
            ConnectionStatus = String.Format("Audio Device Output unavailable because {0}", deviceOutputNodeNo2Result.Status.ToString());
            return;
        }
        deviceOutputNodeNo2 = deviceOutputNodeNo2Result.DeviceOutputNode;

        ConnectionStatus = "Device Output connection successfully created";


        deviceInputNode.AddOutgoingConnection(deviceOutputNodeNo1);

        ConnectionStatus = "Device Input connection successfully created";
        deviceInputNode.AddOutgoingConnection(deviceOutputNodeNo2);

        // Because we are using lowest latency setting, we need to handle device disconnection errors
        graphForInputDeviceNo1.UnrecoverableErrorOccurred += Graph_UnrecoverableErrorOccurred;
        graphForInputDeviceNo1.Start();  // erst damit geht es los
}

有一个类似的案例,请参考。我看不出这有多相似。我不想要任何帧输入或任何东西。我只想将我的输出发送到两个设备,例如耳机和扬声器,但我不知道如何设置这两个输出节点。嘿@Frank,你有没有找到一个解决方案,可以使用AudioGraph将音频输出到两个设备?嗨,Allen,没有。但是从那以后我就没试过了。谢谢你的回复!据我所知,每个图形只能有一个输出设备。考虑到整个框架的设计,这似乎很奇怪,但实际的代码API似乎很清楚,除非我在某个地方缺少了某种方法……有一个类似的案例,请参考。我看不出这有什么相似之处。我不想要任何帧输入或任何东西。我只想将我的输出发送到两个设备,例如耳机和扬声器,但我不知道如何设置这两个输出节点。嘿@Frank,你有没有找到一个解决方案,可以使用AudioGraph将音频输出到两个设备?嗨,Allen,没有。但是从那以后我就没试过了。谢谢你的回复!据我所知,每个图形只能有一个输出设备。考虑到整个框架的设计,这似乎很奇怪,但实际的代码API似乎非常清晰,除非我在某个地方缺少一些方法。。。