【发布时间】:2017-02-08 19:06:25
【问题描述】:
我尝试将来自麦克风的输入同时发送到扬声器和连接的耳机。 我知道如何使用文件和设备执行此操作,但我不知道如何将第二个设备与输出节点连接并将其附加到图表。 我可以使用 CreateDeviceOutputNodeAsync 创建节点,但我不知道如何将设备与节点相关联。 对于一个设备,当我在创建图表时在设置中将设备作为 PrimaryRenderDevice 时,它可以工作。 这是一个输出设备的工作代码。我不知道如何解决这个问题以使其适用于两个输出设备。
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
}
【问题讨论】:
-
有类似案例,请参考stackoverflow。
-
我看不出这有什么相似之处。我不想要任何帧输入或其他任何东西。我只想将我的输出发送到两个设备,例如耳机和扬声器,但我不知道如何设置两个输出节点。
-
嘿@Frank,你有没有找到使用 AudioGraph 将音频输出到两个设备的解决方案?
-
嗨,艾伦,我没有。但从那以后我就没有尝试过。
-
感谢您的回复!据我所知,每个图表只能有一个输出设备。考虑到整个框架的设计,这看起来很奇怪,但实际的代码 API 似乎很清晰,除非我在某处遗漏了一些方法......