Tar*_*ych 7 javascript html5-audio web-audio-api
我想创建一个JS库来检测歌曲BPM.
我读过这篇 文章并理解了算法.
获得10秒声能数据是否正确?我是新手.如果您不理解代码的某些部分,请询问
var audioFileInput = document.querySelector('#audio-file-input');
var audioCtx = new AudioContext();
// call countBpm function on "change" event in audioFileInput
audioFileInput.onchange = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
countBpm(reader.result)
};
reader.readAsArrayBuffer(file);
};
function countBpm(buffer) {
audioCtx.decodeAudioData(buffer, function(decodedData) {
var dataFromLeftChannel = getSoundDataFromMiddle(decodedData, 'left');
var dataFromRightChannel = getSoundDataFromMiddle(decodedData, 'right');
console.dir(dataFromLeftChannel);
console.dir(dataFromRightChannel);
// code to detect bpm will be here
})
};
// get 10 seconds sound energy data from channels
function getSoundDataFromMiddle(decodedData, channel) {
var positions = {};
positions.start = (decodedData.length / 2) - 220500;
positions.end = (decodedData.length / 2) + 220500;
if (channel === 'left') {
return decodedData.getChannelData(0).subarray(positions.start, positions.end);
} else if (channel === 'right') {
return decodedData.getChannelData(1).subarray(positions.start, positions.end);
} else {
return null;
}
}Run Code Online (Sandbox Code Playgroud)
<input id="audio-file-input" type="file" accept="audio/*"></input>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |