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構建
麻省理工學院許可證