使用 socket.io 从服务器接收 ArrayBuffer 时,网络音频 API 播放延迟
Web Audio API delay in playback when using socket.io to receive ArrayBuffer from server
让我首先说明我是网络开发游戏的新手,并且几乎没有使用 socket.io 一两个多星期。我尝试播放来自 socket.io 的 ArrayBuffer 中的音频,对应于使用 Web 音频 API 的 MP3 文件传输。 ArrayBuffer 被 WebAudio 成功解码,但我遇到的唯一问题是在收到 ArrayBuffer 的初始块后需要大约 10 秒才能开始播放这首歌。
我的理解是它等待整个文件流式传输然后开始播放??有没有更好的方式在第一组块到达后立即播放曲目?
这就是我目前的使用方式:
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)
。这具有自行处理下载的好处:)
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()
让我首先说明我是网络开发游戏的新手,并且几乎没有使用 socket.io 一两个多星期。我尝试播放来自 socket.io 的 ArrayBuffer 中的音频,对应于使用 Web 音频 API 的 MP3 文件传输。 ArrayBuffer 被 WebAudio 成功解码,但我遇到的唯一问题是在收到 ArrayBuffer 的初始块后需要大约 10 秒才能开始播放这首歌。
我的理解是它等待整个文件流式传输然后开始播放??有没有更好的方式在第一组块到达后立即播放曲目?
这就是我目前的使用方式:
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)
。这具有自行处理下载的好处:)
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()