2013-04-02 75 views
3

我使用XMLHttpRequest預載遊戲文件。如果WebAudio不支持,我會回到使用音頻元素。從對象URL播放聲音

在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 ...

反正我在尋找一種方式使用緩存播放聲音的Android版Google Chrome來自XMLHttpRequest。

回答

3

但這實際上似乎是一個錯誤。我在這裏提出了https://code.google.com/p/chromium/issues/detail?id=227476併爲它創建了一個測試用例。當我從休假回來時,如果它尚未被分類,我會將它分配給正確的團隊。如果我找到其他工作,我也會更新這個答案。

+0

你有沒有得到任何進一步的呢? –

0

我沒有Android手機,但我知道在過去,您需要使用window.webkitURL而不是window.URL。也許嘗試:

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

+0

nope does not work。我也嘗試使用文件系統API創建網址,並且沒有運氣。 –