노래의 템포(BPM)와 비트 추적을 알아내는 자바스크립트 라이브러리입니다. Simon Dixon이 작성한 "Beatroot" 알고리즘을 사용합니다.
예시 앱
문서
브라우저에서
<script src="music-tempo.min.js"></script>
npm 사용:
$ npm i --음악 템포 저장
다음 형식의 데이터가 포함된 버퍼를 생성자 MusicTempo에 전달합니다. -1과 +1 사이의 명목 범위를 갖는 인터리브되지 않은 IEEE754 32비트 선형 PCM, 즉 각 샘플이 -1.0과 +1 사이인 32비트 부동 소수점 버퍼 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 = 새로운 FileReader(); reader.onload = function(fileEvent) {context.decodeAudioData(fileEvent.target.result, calcTempo); } reader.readAsArrayBuffer(files[0]);}var calcTempo = 함수(버퍼) { var audioData = []; // 두 채널의 평균을 취합니다. if (buffer.numberOfChannels == 2) {var 채널1Data = buffer.getChannelData(0);var 채널2Data = buffer.getChannelData(1);var 길이 = 채널1Data.length;for (var i = 0; i < 길이; i++) { audioData[i] = (채널1Data[i] + 채널2Data[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 = 함수(버퍼) { var audioData = []; // 두 채널의 평균을 취합니다. if (buffer.numberOfChannels == 2) {var 채널1Data = buffer.getChannelData(0);var 채널2Data = buffer.getChannelData(1);var 길이 = 채널1Data.length;for (var i = 0; i < 길이; i++) { audioData[i] = (채널1Data[i] + 채널2Data[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이고 노래의 실제 템포가 102BPM인 경우 결국 204BPM을 얻을 수 있음). 오디오 파일에 무음 기간이 있거나 거의 무음 상태이고 비트 추적이 실패하는 경우 expiryTime
사용할 수 있습니다. 다른 매개변수는 문서에 나열되어 있습니다.
모카와 차이가 필요합니다
$ npm 테스트
Esdoc 필요
$ esdoc
gulp와 babel이 필요합니다. 다른 종속성은 package.json
에서 찾을 수 있습니다.
$ 꿀꺽 꿀꺽 빌드
MIT 라이센스