WebAudioApi,频率声音动画,安卓铬v37 | 您所在的位置:网站首页 › webaudioapi提取音频频率 › WebAudioApi,频率声音动画,安卓铬v37 |
我有困难的频率动画声音通过网络音频api上的android铬v.37,我可以听到音乐,但动画不存在。 很多实验让我最终找到了两种不同的方式来加载声音和动画。首先,我通过aduio 5元素加载声音。然后创建以音频元素为参数的MediaElementSource。将MediaElementSource连接到分析器(AudioContext.createAnalyser元素)。分析我与GainNode的连接,并最终将GainNode与AudioContext.destination连接起来。 代码: 代码语言:javascript复制var acontext = new AudioContext(); var analyser = acontext.createAnalyser(); var gainNode = acontext.createGain(); var audio = new Audio(path_to_file); var source = acontext.createMediaElementSource(temp_audio); source.connect(analyser); analyser.connect(gainNode); gainNode.connect(acontext.destination);这种模式工作在PC-Chrome和最新的移动狩猎.也是在FireFox。 我发现的第二种方式没有什么不同之处。这里的声音读取到缓冲区,然后连接到分析器。 代码: 代码语言:javascript复制var acontext = new AudioContext(); var analyser = acontext.createAnalyser(); var gainNode = acontext.createGain(); var source = acontext.createBufferSource(); var request = new XMLHttpRequest(); request.open('GET', path, true); request.responseType = 'arraybuffer'; request.addEventListener('load', function(){ source.buffer = acontext.createBuffer(request.response, false); }, false); request.send(); source.connect(analyser); analyser.connect(gainNode); gainNode.connect(acontext.destination);对于绘图动画,我使用画布,数据用于绘制: 代码语言:javascript复制analyser.fftSize = 1024; analyser.smoothingTimeConstant = 0.92; var dataArray = new Uint8Array(analyser.frequencyBinCount); analyser.getByteFrequencyData(dataArray); //fill dataArray from analyser for (var i = 0; i < analyser.frequencyBinCount; i++) { barHeight = dataArray[i]; // and other logic here. }第二种方法是使用旧的色度、移动浏览器和safari。 但在安卓铬v37中,这两种方式都行不通。正如我之前所说的,第一种方式不显示动画,第二种方法只是中断错误-- acontext.createBuffer()请求3参数,而不是2。正如我在新的Web版本中所理解的,这种方法是为最新的调用类型重写的,具有不同的参数,所以我不使用它。 有什么建议可以让Android Chrome v.37在这里工作吗? |
CopyRight 2018-2019 实验室设备网 版权所有 |