2016-10-15 5 views
0

Je rencontre des problèmes avec un AudioGraph dans une application UWP. Mon problème est que lorsque j'ajoute ajouter une connexion sortante à mon nœud de périphérique d'entrée, une exception est générée avec HRESULT: 0x88960001. En utilisant l'essai et l'erreur J'ai compris que le problème est avec le profil MediaEncoding que j'ai défini sur le noeud d'entrée et de sortie ... mais j'ai maintenant 2 paramètres ne fonctionnent que sur une machine et l'autre ne fonctionne que sur une autre machine ... J'avais besoin de l'audio pour être Single Channel, échantillon de 16 bits avec un échantillon de 16K en PCM.UWP AudioGraph installation ne fonctionne pas dans tous les périphériques, HRESULT: 0x88960001 lancé sur AddOutgoingConnection

Le code que j'utilise est assez simple et était basé sur des samples qui existent en ligne, le truc c'est que ça fonctionne seulement sur certains micros et pas d'autres ... J'avais besoin d'être générique et avoir toujours la même sortie que je peux entrer cela à mon point de terminaison de service.

je quittais les 2 paramètres AudioEncodingProperties il (l'un d'eux en commentaire)

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"); 
     } 

Merci les gars pour notre aide

+1

Probablement la qualité 16Khz n'est pas supportée partout, mais la qualité CD ou DAT sera d'un autre côté. La solution serait de rééchantillonner votre audio avant de l'exporter. – Aybe

Répondre

0

Au lieu de construire l'inputResult avec l'objet inProfile.Audio, essayez d'utiliser l'encodage par défaut propriétés pour le graphique:

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

J'ai eu un problème similaire et cela a éclairci les choses, et a permis à l'audio de être entré à partir de n'importe quel périphérique sans spécifier le profil d'encodage.