对着 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也是可以的了-_-新闻热点
疑难解答