2016-10-15 11 views
0

UWP 앱에서 AudioGraph에 문제가 있습니다. 내 문제는 입력 장치 노드에 나가는 연결을 추가 할 때 HRESULT : 0x88960001과 함께 예외가 발생한다는 것입니다.UWP AudioGraph 설정이 모든 장치에서 작동하지 않습니다. HRESULT : 0x88960001이 AddOutgoingConnection에서 throw되었습니다.

시행 착오를 사용하여 문제가 입력 및 출력 노드 모두에 설정된 MediaEncoding 프로필에 있다는 것을 알았지 만 이제는 한 설정에서만 작동하는 설정이 있고 다른 설정은 다른 설정에서만 작동합니다 필자는 PCM에서 16K 샘플의 단일 채널, 16 비트 샘플로 오디오가 필요했습니다.

내가 사용하고있는 코드는 매우 간단하며 온라인에 존재하는 샘플을 기반으로했습니다. 그것은 일부 마이크에서만 작동하며 다른 마이크에서는 작동하지 않습니다 ... 나는 일반적이고 항상 같은 출력을 필요로합니다. 그것을 내 서비스 엔드 포인트에 입력 할 수 있습니다.

나는
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 구축의

+1

아마도 16Khz 품질은 모든 곳에서 지원되지는 않지만, 반면에 CD 또는 DAT 품질은 지원됩니다. 오디오를 내보내기 전에 오디오를 리샘플링하는 것이 해결책입니다. – Aybe

답변

0

대신에 우리의 도움을 너희들을 감사 (그 중 하나가 주석)이 2 AudioEncodingProperties 설정을 왼쪽 그래프의 속성 :

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

비슷한 문제가 있었는데 오디오가 삭제되지 않았습니다. 인코딩 프로파일을 지정하지 않고 어느 장치에서나 입력 할 수 있습니다.