android chrome v.37의 웹 오디오 API를 통해 소리의 주파수 애니메이션에 문제가 있습니다. 음악을들을 수는 있지만 애니메이션이 없습니다.WebAudioApi, 주파수 사운드 애니메이션, android chrome v37
많은 실험을 통해 사운드를로드하고 애니메이션을 적용하는 마지막 두 가지 방법이 있습니다. 첫 번째 방법은 iduio html 5 요소를 통해 사운드를로드하는 것입니다. 그런 다음 audio 요소를 매개 변수로 사용하여 MediaElementSource를 만듭니다. MediaElementSource를 Analyzer (AudioContext.createAnalyser 요소)에 연결합니다. 분석 GainNode에 연결하고, 마지막으로 GainNode를 AudioContext.destination에 연결합니다.
코드 :
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-크롬에 대한 작업과 최신 모바일 사파리. FireFox에서도 마찬가지입니다.
내가 발견 한 두 번째 방법은 몇 가지 차이점이 있습니다. 소리가 버퍼링되어 읽히고 분석기에 연결됩니다.
코드 : 그리기 애니메이션
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);
내가 무승부 캔버스, 데이터를 사용 : 기존의 Chromes, 모바일 브라우저, 사파리에
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.
}
두 번째 방법으로 작동합니다.
하지만 안드로이드 크롬 v37에서 양방향 작동하지 않습니다. 첫 번째 방법으로 애니메이션을 표시하지 않기 전에 말했듯이 두 번째 것은 오류로 중단됩니다 - acontext.createBuffer()는 2 대신 3 개의 매개 변수를 요청합니다. 새로운 Web Audio Api 버전에서이 메서드는 최신 호출 유형으로 다시 작성되었습니다. , 다른 매개 변수와 함께, 그래서 그것을 사용하지 마십시오.
여기에서 Android 크롬 v.37을 강제 실행하는 방법에 대한 조언이 있으십니까?