我在UWP应用程序中遇到AudioGraph问题。我的问题是,当我添加添加一个传出连接到我的输入设备节点时,我得到一个异常抛出HRESULT: 0x88960001。
通过反复试验,我发现问题在于我在输入和输出节点上设置的MediaEncoding配置文件…但我现在有2个设置只在一台机器上工作,另一个只在另一台机器上工作…我需要的音频是单通道,16位采样与16K采样在PCM。
我使用的代码是相当简单的,是基于在线存在的样本,问题是它只适用于一些麦克风,而不是其他…我需要它是通用的,并且总是具有相同的输出,以便我可以将其输入到我的服务端点。
我把两个AudioEncodingProperties设置留在那里(其中一个被注释掉了)
var result = await AudioGraph.CreateAsync(
new AudioGraphSettings(AudioRenderCategory.Media));
if (result.Status == AudioGraphCreationStatus.Success)
{
this.graph = result.Graph;
var microphone = await DeviceInformation.CreateFromIdAsync(
MediaDevice.GetDefaultAudioCaptureId(AudioDeviceRole.Default));
// Low gives us 1 channel, 16-bits per sample, 16K sample rate.
var outProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low);
//outProfile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);
outProfile.Audio = AudioEncodingProperties.CreatePcm(44100, 2, 32);
var inProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low);
//inProfile.Audio = AudioEncodingProperties.CreatePcm(16000, 1, 16);
inProfile.Audio = AudioEncodingProperties.CreatePcm(44100, 2, 32);
var outputResult = await this.graph.CreateFileOutputNodeAsync(file,
outProfile);
if (outputResult.Status == AudioFileNodeCreationStatus.Success)
{
this.outputNode = outputResult.FileOutputNode;
var inputResult = await this.graph.CreateDeviceInputNodeAsync(
MediaCategory.Speech,
inProfile.Audio,
microphone);
if (inputResult.Status == AudioDeviceNodeCreationStatus.Success)
{
//EXEPTION IS THROWN HERE
inputResult.DeviceInputNode.AddOutgoingConnection(
this.outputNode);
this.graph.Start();
}
}
}
else
{
throw new Exception("Could not create AudioGraph");
}
感谢大家的帮助
与其用inProfile.Audio
对象构造inputResult
,不如尝试使用图的默认编码属性:
var enc = graph.EncodingProperties;
CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Media, enc, this.outputNode);
我有一个类似的问题,这清除了事情,并允许音频从任何设备输入而不指定编码配置文件。