2016-10-15 2 views
0

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

Использование проб и ошибок Я понял, что проблема связана с профилем MediaEncoding, который я установил как на входном, так и на выходном узле ... но теперь у меня есть 2 настройки, которые работают только на одной машине, а другая работает только на другой машине ... Мне нужен был аудиоканал Single Channel, 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

Возможно, качество 16Khz не поддерживается повсеместно, но качество CD или DAT, с другой стороны, будет. Решение заключалось бы в повторной настройке вашего аудио до его экспорта. – Aybe

ответ

0

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

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

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