Настройка UWP AudioGraph не работает на всех устройствах, HRESULT: 0x88960001 вызывается AddOutgoingConnection

У меня проблемы с AudioGraph в приложении UWP. Моя проблема в том, что когда я добавляю Исходящее соединение к моему узлу устройства ввода, я получаю исключение с HRESULT: 0x88960001.

Путем проб и ошибок я понял, что проблема связана с профилем MediaEncoding, который я установил как на входном, так и на выходном узле... но теперь у меня 2 настройки работают только на одной машине, а другая работает только на другой машине... Я требовалось, чтобы звук был одноканальным, 16-битный сэмпл с 16-килобайтным сэмплом в формате 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");
        }

Спасибо, ребята, за нашу помощь


person user3628320    schedule 15.10.2016    source источник
comment
Вероятно, качество 16 кГц поддерживается не везде, но, с другой стороны, качество CD или DAT будет. Решением будет повторная выборка аудио перед его экспортом.   -  person aybe    schedule 15.10.2016


Ответы (1)


Вместо построения inputResult с объектом inProfile.Audio попробуйте использовать свойства кодирования по умолчанию для графика:

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

У меня была аналогичная проблема, и это прояснило ситуацию и позволило вводить звук с любого устройства без указания профиля кодирования.

person memote    schedule 09.01.2017