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
はすでにコントローラで定義されています。
配列内のバイトがエンコードされたwav/mp3ファイルと同じであることを確認する方法はありますか? – Slimshadddyyy
データがどこから来たのかわからないので、わからない。しかし、あなたは 'fetch(url).then(response => {context.decodeAudioData(response);})のようなものを使ってmp3/wavファイルをデコードできることを検証できます。 –