从对象URL播放声音

时间:2013-04-02 10:07:48

标签: android google-chrome xmlhttprequest html5-audio

我使用XMLHttpRequest为游戏预加载文件。如果不支持WebAudio,我会回归使用音频元素。

在Android上,它在Firefox中运行良好,但声音不能在Chrome中播放。这是一些测试代码:

document.addEventListener('touchstart', function(event) {
    event.preventDefault();
    if( window.audio ) window.audio.play();
    console.log( window.audio );
});

window.audio    = null;


var xhr = new XMLHttpRequest();
xhr.open('GET', '/sounds/shotgun.webm', true);
xhr.responseType = 'arraybuffer';

xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        var blob = new Blob( new Array( new Int8Array( xhr.response ) ), { type: 'audio/webm' } );
        var url = window.URL.createObjectURL( blob )
        window.audio = new Audio();
        window.audio.src = url;

        console.log( 'sound loaded' );
    }
    };

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send();

我怀疑这是一个针对Android问题的Chrome浏览器,其中包含对象url ...

无论如何,我正在寻找一种方法,使用XMLHttpRequest中的缓存数据在Chrome for Android上播放声音。

2 个答案:

答案 0 :(得分:3)

事实上,这似乎是一个错误。我在这里https://code.google.com/p/chromium/issues/detail?id=227476提出了它,并为它创建了一个测试用例。当我从假期回来时,如果尚未进行分类,我会将其分配给正确的团队。如果我找到其他任何解决方法,我也会更新这个答案。

答案 1 :(得分:0)

我没有Android手机,但我知道过去你需要使用window.webkitURL代替window.URL。也许试试:

( window.URL || window.webkitURL ).createObjectURL( blob )