使用 LimeJS 預設的 audio.js 來載入放在本機的 .mp3 檔案時,以 Chrome 的「JavaScript 控制台」debug,可以看到了底下的錯誤訊息:
類似:
- XMLHttpRequest cannot load file:///.....xxx.mp3. Cross origin requests are only supported for HTTP. xxx.js:??? Cross origin requests are only
- XHR error loading file: xxx.mp3 xxx.js:???
- Uncaught NetworkError: A network error occurred. xxx.js:???
這種訊息之前在研究如何動態的載入 .txt 設定檔時也遇過,主要是瀏覽器的 JavaScript 基於安全因素,不讓我們載入本機的檔案。
應該是 LimeJS 的 audio.js 現在改寫為支援「AudioContext」的關係,如果開啟 LimeJS 目錄裡的「lime/src/audio/audio.js」原始碼,特別注意下圖箭頭所指 (line 35) 的部份:
舊的方式是執行 else (line 40) 以下的程式碼,對我而言,目前想解決「XHR error」的最快方法,就是讓程式跳過「AudioContext」的部份,採用舊程式碼就好。所以將圖中第 35 行的:
if (lime.audio.AudioContext) {
改為:
if (false && lime.audio.AudioContext) {
將 audio.js 儲存好以後,重新 build 程式碼,就和舊版的一樣,收工!
後記 (2013.11.29 更新)
哈!剛剛發現,我好像太粗魯了,其實在開始建立 lime.audio.Audio 物件前,先將「lime.audio.AudioContext」設為「false」就好了,不用去動到預設的程式碼啦!以我自己的程式為例,原來是:
在它的前面多加一行,變成:
後記 (2013.11.29 更新)
哈!剛剛發現,我好像太粗魯了,其實在開始建立 lime.audio.Audio 物件前,先將「lime.audio.AudioContext」設為「false」就好了,不用去動到預設的程式碼啦!以我自己的程式為例,原來是:
sound = new lime.audio.Audio('assets/basketball_sound.mp3');
在它的前面多加一行,變成:
lime.audio.AudioContext = false;
sound = new lime.audio.Audio('assets/basketball_sound.mp3');
讓它不使用 AudioContext 來建立 audiio 物件即可。
沒有留言:
張貼留言