我使用WebSocket来传输音频文件的块。我为Socket.onmessage事件定义了一个处理程序,我定义了一个AudioContext。 问题是当我解码音频数据时我丢失了块。这是我的经纪人:
var socket = new WebSocket('ws://127.0.0.1:8080');
socket.binaryType = 'arraybuffer';
socket.onmessage = function(msg) {
console.log('received'); // printed 29 times
audioctx.decodeAudioData(msg.data, function(buffer) {
console.log('decoded'); // printed 1 time
});
};
我认为它与回调函数的异步性有关,但我不知道如何修复它。
答案 0 :(得分:2)
decodeAudioData不支持块级数据;它需要一个完整的文件(MP3标题,例如,不仅仅是一个块开始)。这不是它的异步;这是(我相信)它无法解码,因为它只解码第一个块,所有后续块都失败。
直到有一个更好的解码api和渐进支持,你将不得不拉入一个JS解码库。