music tempo
1.0.0
用于查找歌曲节奏 (BPM) 和节拍跟踪的 Javascript 库。它使用西蒙·迪克森(Simon Dixon)创作的算法“Beatroot”
示例应用程序
文档
在浏览器中
<script src="music-tempo.min.js"></script>
使用 npm:
$ npm i --保存音乐节奏
将包含以下格式数据的缓冲区传递给构造函数 MusicTempo:非交错 IEEE754 32 位线性 PCM,标称范围在 -1 和 +1 之间,即 32 位浮点缓冲区,每个样本在 -1.0 和1.0。该格式用于Web Audio API 的AudioBuffer 接口。构造函数返回的对象包含属性tempo
- 以每分钟节拍为单位的节奏值和beats
- 以秒为单位的节拍时间数组。
var context = new AudioContext({ sampleRate: 44100 });var fileInput = document.getElementById("fileInput");fileInput.onchange = function () { var 文件 = fileInput.files; if (files.length == 0) 返回; var reader = new FileReader(); reader.onload = function(fileEvent) {context.decodeAudioData(fileEvent.target.result, calcTempo); } reader.readAsArrayBuffer(files[0]);}var calcTempo = 函数(缓冲区){ var 音频数据 = []; // 取两个通道的平均值 if (buffer.numberOfChannels == 2) {varchannel1Data = buffer.getChannelData(0);varchannel2Data = buffer.getChannelData(1);var length =channel1Data.length;for (var i = 0; i < length; i++) { 音频数据[i] = (通道1数据[i] + 通道2数据[i]) / 2;} } else {audioData = buffer.getChannelData(0); } var mt = new MusicTempo(audioData); console.log(mt.tempo); console.log(mt.beats);}
在Node.js环境中可以使用node-web-audio-api库
var AudioContext = require("web-audio-api").AudioContext;var MusicTempo = require("music-tempo");var fs = require("fs");var calcTempo = function (buffer) { var 音频数据 = []; // 取两个通道的平均值 if (buffer.numberOfChannels == 2) {varchannel1Data = buffer.getChannelData(0);varchannel2Data = buffer.getChannelData(1);var length =channel1Data.length;for (var i = 0; i < length; i++) { 音频数据[i] = (通道1数据[i] + 通道2数据[i]) / 2;} } else {audioData = buffer.getChannelData(0); } var mt = new MusicTempo(audioData); console.log(mt.tempo); console.log(mt.beats);}var data = fs.readFileSync("songname.mp3");var context = new AudioContext();context.decodeAudioData(data, calcTempo);
您可以将带有参数的对象作为第二个参数传递给构造函数:
var p = { expiryTime: 30, maxBeatInterval: 1.5 };var mt = new MusicTempo(audioData, p);
最有用的是maxBeatInterval
/ minBeatInterval
和expiryTime
。前两个用于设置最大和最小 BPM。 maxBeatInterval
的默认值为 1,这意味着最小 BPM 为 60 (60 / 1 = 60)。 minBeatInterval
的默认值为 0.3,这意味着最大 BPM 为 200 (60 / 0.3 = 200)。请注意,最大 BPM 的值越大,出现 2x-BPM 错误的可能性就越大(例如,如果最大 BPM = 210,而歌曲的实际节奏为 102 BPM,则最终您可以获得 204 BPM)。如果音频文件有一段时间的静音或几乎静音并且因此节拍跟踪失败,则可以使用expiryTime
。其他参数在文档中列出。
需要摩卡和柴
$ npm 测试
需要esdoc
$ esdoc
需要 gulp 和 babel。其他依赖项可以在package.json
中找到
$ gulp构建
麻省理工学院许可证