通过WebSocket进行音频块解码

时间:2015-03-11 23:23:12

标签: javascript websocket web-audio

我使用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
  });
};

我认为它与回调函数的异步性有关,但我不知道如何修复它。

1 个答案:

答案 0 :(得分:2)

decodeAudioData不支持块级数据;它需要一个完整的文件(MP3标题,例如,不仅仅是一个块开始)。这不是它的异步;这是(我相信)它无法解码,因为它只解码第一个块,所有后续块都失败。

直到有一个更好的解码api和渐进支持,你将不得不拉入一个JS解码库。