我的应用程序中有预先录制的音频文件的音频缓冲区。
我正在尝试获取整个音轨的频域数据,这就是我尝试过的:
getAudioDataFromBuffer: function(buf){
var src = g.audioContext.createBufferSource();
src.buffer = buf;
var anal = src.context.createAnalyser();
src.connect(anal);
var dataArray = new Uint8Array(buf.length);
anal.fftSize = 2048;
anal.getByteFrequencyData(dataArray);
return dataArray;
},
但这只给了我一个充满零的数组。
我需要它来比较两个音轨,一个是预先录制的,另一个是在应用程序中录制的。我想我可以测量它们频域之间的相关性。
我找到了解决方案这个答案 https://stackoverflow.com/questions/8699134/extracting-the-song-frequency-of-an-mp3-file-using-html5-web-audio-api and 这次讨论 https://github.com/WebAudio/web-audio-api/issues/303.
基本上你需要使用 OfflineAudioContext。这里的代码从已经加载的音频缓冲区开始:
var offline = new OfflineAudioContext(2, buffer.length ,44100);
var bufferSource = offline.createBufferSource();
bufferSource.buffer = buffer;
var analyser = offline.createAnalyser();
var scp = offline.createScriptProcessor(256, 0, 1);
bufferSource.connect(analyser);
scp.connect(offline.destination); // this is necessary for the script processor to start
var freqData = new Uint8Array(analyser.frequencyBinCount);
scp.onaudioprocess = function(){
analyser.getByteFrequencyData(freqData);
console.log(freqData);
};
bufferSource.start(0);
offline.oncomplete = function(e){
console.log('analysed');
};
offline.startRendering();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)