UWP AudioGraph设置无法在所有设备上运行,HRESULT:0x88960001在AddOutgoingConnection上抛出

时间:2016-10-15 08:09:32

标签: c# audio uwp audio-recording hresult

我在UWP应用程序中使用AudioGraph时遇到问题。我的麻烦是,当我添加一个Outgoing Connection添加到我的输入设备节点时,我得到了一个用HRESULT抛出的异常:0x88960001。

使用试验和错误我发现问题出在我在输入和输出节点上设置的MediaEncoding配置文件...但我现在有2个设置只能在一台机器上工作而另一个只能在另一台机器上工作。 ..我需要音频为单通道,16位采样,带有16K采样PCM。

我使用的代码相当简单,并且基于在线存在的样本,事情是它仅适用于某些麦克风而不是其他麦克风......我需要它是通用的并且始终具有相同的输出,以便我可以将其输入到我的服务端点。

我在那里留下了2个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");
        }

谢谢你们的帮助

1 个答案:

答案 0 :(得分:0)

不要使用inputResult对象构建inProfile.Audio,而是尝试使用图表的默认编码属性:

var enc = graph.EncodingProperties;
CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Media, enc, this.outputNode);

我遇到了类似的问题,这样可以解决问题,并允许从任何设备输入音频,而无需指定编码配置文件。