繁体   English   中英

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

[英]Web Audio API delay in playback when using socket.io to receive ArrayBuffer from server

让我从一个事实开始,我对 Web 开发游戏还很陌生,并且一两个多星期以来几乎没有使用过 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM