【问题标题】:Web Audio API delay in playback when using socket.io to receive ArrayBuffer from server使用 socket.io 从服务器接收 ArrayBuffer 时,Web Audio API 延迟播放
【发布时间】:2016-05-18 06:10:54
【问题描述】:

让我从一个事实开始,我对 Web 开发游戏还很陌生,并且一两个多星期几乎没有使用过 socket.io。我尝试播放从 socket.io 接收的 ArrayBuffer 中的音频,对应于使用 Web Audio 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);
        });

【问题讨论】:

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


    【解决方案1】:

    是的,您可以使用<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()
    

    【讨论】:

    • 是的,当我意识到 WebAudio 比我的用例更强大时,我最终使用了第二个选项。
    猜你喜欢
    • 2018-01-25
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多