對著 demo工程比較容易將crosswalk嵌入自己的項目中,下面是一些需要注意的地方:
因為完整引入包體會變得很大,適當的可以采用下載核心庫的方式,在運行時動態加載。大概有十幾M的樣子,似乎還是蠻大的。
筆者在最新的版本中,AudioContext.decodeAudioData解碼MP3會出現錯誤,沒弄明白原因,故如果使用AudioContext播放音頻可以直接使用pcm格式音頻,無需解碼。下面是筆者測試過,播放pcm的演示代碼:
window.AudioContext = window.AudioContext || window.webkitAudioContext|| window.mozAudioContext;window.audioContext = new AudioContext();//audioData:獲取的wav二進制數據,默認采用單聲道 32位的pcm數據(必須!!!!)function getAudioBuffer(audioData){//去掉最開始的文件頭,保留原始的pcm數據。為了簡化,這里不讀取文件頭信息,直接取大概值60。 audioData=audioData.slice(60); //4字節對齊,因為AudioBuffer 必須要4字節對齊 var frames=parseInt(audioData.byteLength/4); //1表示創建1個聲道,跟wav的聲道數沒有關系的。 //frames音頻 總幀數 //32000音頻采樣率 ,也就是1秒 采集的幀數 var buffer = window.audioContext.createBuffer(1,frames, 32000); var aBuf=audioData.slice(0,frames*4); var arrBuffer=new Float32Array(aBuf); if (buffer.copyToChannel) { //把音頻數據 復制到AudioBuffer的 0聲道索引。 如果創建了多個聲道,可以給后面的聲道 繼續賦值 buffer.copyToChannel(arrBuffer, 0, 0) } else { var channelBuffer = buffer.getChannelData(0); channelBuffer.set(arrBuffer); } return buffer;}function play(audioBuffer){ var audioBufferSouceNode = audioContext.createBufferSource(); audioBufferSouceNode.buffer = audioBuffer; source.connect(audioContext.destination); //第一個為延遲播放的時間,第二個為 播放的偏移位置,以秒為單位 audioBufferSouceNode.start(0, 0);}雖然能比較好的解決android兼容和性能問題,但是如果不運行h5游戲等 耗性能的程序,直接使用android自帶的webview也是可以的了-_-新聞熱點
疑難解答