2017-03-14 18 views
0

以下のサービスを使用して、バイト配列形式のオーディオファイル(wav/mp3)を再生します。AngularJS - バイト配列のデコードとオーディオファイルの再生(Wav/MP3)

myAudioService.getAudioTone(userid).then(function (data) { 

     var context; // Audio context 
     var buf;  // Audio buffer 
     $window.AudioContext = $window.webkitAudioContext; 
     context = new AudioContext(); 

     $timeout(function() { 

     $scope.playByteArray = function(){ 

      var arrayBuffer = new ArrayBuffer(data.length); 
      var bufferView = new Uint8Array(arrayBuffer); 
      for (i = 0; i < data.length; i++) { 
       bufferView[i] = data[i]; 
      } 

      context.decodeAudioData(arrayBuffer, function(buffer) { 
       buf = buffer; 
       play(); 
      }); 
     } 

     $scope.play = function(audioBuffer){ 

      // Create a source node from the buffer 
      var source = context.createBufferSource(); 
      source.buffer = buf; 
      // Connect to the final output node (the speakers) 
      source.connect(context.destination); 
      // Play immediately 
      source.start(0); 

     }  


     if(data.length !== '' || data !== ''){ 
      $scope.playByteArray(); 
     } 
     }, 3000); 

}); 

関数は呼び出されますが、以下の例外がスローされます。私はクロム、FFとIEでそれを実行するにはどうすればよい

Uncaught (in promise) DOMException: Unable to decode audio data

P.S. $windowおよび$timeoutはすでにコントローラで定義されています。

答えて

0

エラーメッセージarrayBufferには、それが含まれていると思われる内容は含まれていません。配列内のバイトがエンコードされたwav/mp3ファイルと同じであることを確認する必要があります。

+0

配列内のバイトがエンコードされたwav/mp3ファイルと同じであることを確認する方法はありますか? – Slimshadddyyy

+0

データがどこから来たのかわからないので、わからない。しかし、あなたは 'fetch(url).then(response => {context.decodeAudioData(response);})のようなものを使ってmp3/wavファイルをデコードできることを検証できます。 –

関連する問題