javascript - 使用 socket.io 从服务器接收 ArrayBuffer 时 Web Audio API 播放延迟

标签 javascript websocket socket.io web-audio-api

首先,我对网络开发游戏还很陌生,并且几乎没有使用过 socket.io 超过一两周的时间。我尝试使用 Web Audio API 播放从 socket.io 接收到的与 MP3 文件传输相对应的 ArrayBuffer 中的音频。 ArrayBuffer 已被 WebAudio 成功解码,但我遇到的唯一问题是,在收到 ArrayBuffer 的初始 block 后大约需要 10 秒才能开始播放这首歌。

我的理解是它等待整个文件被流式传输然后开始播放??当第一组 block 到达时,是否有更好的方式来播放轨道?

这就是我目前使用它的方式:

socket.on('browser:buffer', function(data) {
            console.log(data.buffer);
            source = audioContext.createBufferSource();
            audioContext.decodeAudioData(data.buffer, function(decodedData) {
                source.buffer = decodedData;
                source.connect(audioContext.destination);
                source.loop = true;
                source.connect(audioContext.destination);
                source.start(0);
            });
        }, function(error) {
            console.error("decodeAudioData error", error);
        });

最佳答案

是的,您可以 <audio>createMediaElementSource(audio) 。这具有 self 处理下载的好处:)

var audio = new Audio("shoot.mp3");
var context = new AudioContext();
var source = context.createMediaElementSource(audio);
audio.loop = true;
source.connect(context.destination);
audio.play();

https://jsfiddle.net/u8j4h4L4/1/

如果您实际上不需要 WebAudio,其他选项只是最简单的:

var sound = new Audio("myaudio.mp3");
sound.play()

关于javascript - 使用 socket.io 从服务器接收 ArrayBuffer 时 Web Audio API 播放延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075552/

相关文章:

javascript - 使用 JQuery 创建 sqlite 数据库

javascript - 在resolve中使用socket.io实现一次性监听

javascript - TypeError : require(. ..).listen 不是函数

node.js - ExpressJS 的 socket.io 设置

javascript - 返回发行专辑最多的年份的函数

javascript - 这个工厂依赖问题有什么问题?

javascript - 获取具有相同类的当前跨度元素

javascript - 断开连接后,Socket.io 未正确触发事件

javascript - 服务器端串行通过 python Tornado 聊天

node.js - 如何通过 Node http-proxy记录websocket流量数据