UWP AudioGraph设置不能在所有设备上工作,在AddOutgoingConnection上抛出HRESULT:



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

我有一个类似的问题,这清除了事情,并允许音频从任何设备输入而不指定编码配置文件。

相关内容

  • 没有找到相关文章