所以我尝试使用 Web Audio API
解码和播放使用 Node.js 和 Socket.IO 流式传输到浏览器的 MP3 文件 block 。
在这种情况下,我唯一的选择是为接收到的每个音频数据 block 创建一个新的 AudioBufferSourceNode
,或者是否可以为所有 block 创建一个 AudioBufferSourceNode
并且简单地将新的音频数据附加到源节点的 buffer
属性的末尾?
目前这就是我接收 MP3 block 、解码它们并安排它们播放的方式。我已经验证接收到的每个 block 都是“有效的 MP3 block ”,并且正在被 Web Audio API 成功解码。
audioContext = new AudioContext();
startTime = 0;
socket.on('chunk_received', function(chunk) {
audioContext.decodeAudioData(toArrayBuffer(data.audio), function(buffer) {
var source = audioContext.createBufferSource();
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(startTime);
startTime += buffer.duration;
});
});
对于如何最好地使用新音频数据“更新”Web Audio API 播放的任何建议或见解,我们将不胜感激。
最佳答案
目前,decodeAudioData()
需要完整的文件,不能对不完整的文件提供基于 block 的解码。下一版本的 Web Audio API 应提供此功能:https://github.com/WebAudio/web-audio-api/issues/337
与此同时,在新的 API 版本可用之前,我已经开始编写用于解码音频的示例。
关于javascript - 网络音频 API : How to play a stream of MP3 chunks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134384/