通过 WebSocket 解码音频块
Audio chunk decoding over WebSocket
我使用 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
});
};
我认为它与回调函数的异步性有关,但我不知道如何解决它。
decodeAudioData不支持块级数据;它需要一个完整的文件(MP3 头,例如,不仅仅是一个块开始)。这并不是说它是异步的;而是它是异步的。就是(我相信)它无法解码,因为它只解码了第一个块而所有后续块都失败了。
在有更好的解码 api 和渐进式支持之前,您必须引入 JS 解码库。
我使用 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
});
};
我认为它与回调函数的异步性有关,但我不知道如何解决它。
decodeAudioData不支持块级数据;它需要一个完整的文件(MP3 头,例如,不仅仅是一个块开始)。这并不是说它是异步的;而是它是异步的。就是(我相信)它无法解码,因为它只解码了第一个块而所有后续块都失败了。
在有更好的解码 api 和渐进式支持之前,您必须引入 JS 解码库。