مكتبة جافا سكريبت لاكتشاف الإيقاع (BPM) للأغنية وتتبع الإيقاع. ويستخدم خوارزمية "Beatroot" من تأليف سيمون ديكسون
التطبيق المثال
المستندات
في المتصفح
<script src="music-tempo.min.js"></script>
باستخدام npm:
$ npm i - حفظ وتيرة الموسيقى
مرر إلى مُنشئ MusicTempo المخزن المؤقت الذي يحتوي على بيانات بالتنسيق التالي: IEEE754 PCM خطي 32 بت غير مشذر مع نطاق اسمي بين -1 و+1، أي 32 بت عازلة للفاصلة العائمة، مع كل عينة بين -1.0 و 1.0. يتم استخدام هذا التنسيق في واجهة AudioBuffer الخاصة بـ Web Audio API. يحتوي الكائن الذي تم إرجاعه بواسطة المُنشئ على خصائص tempo
- قيمة الإيقاع بالنبضات في الدقيقة ومجموعة beats
- مع أوقات الإيقاع بالثواني.
var context = new AudioContext({ SampleRate: 44100 });var fileInput = document.getElementById("fileInput");fileInput.onchange = function () { ملفات فار = fileInput.files; إذا كان (files.length == 0) يعود؛ قارئ var = new FileReader(); Reader.onload = function(fileEvent) {context.decodeAudioData(fileEvent.target.result, calcTempo); } Reader.readAsArrayBuffer(files[0]);}var calcTempo = function (buffer) { var audioData = []; // خذ متوسط القناتين إذا (buffer.numberOfChannels == 2) {varchannel1Data = buffer.getChannelData(0);varchannel2Data = buffer.getChannelData(1);var length =channel1Data.length;for (var i = 0; i < length; i++) { بيانات الصوت[i] = (channel1Data[i] +channel2Data[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 audioData = []; // خذ متوسط القناتين إذا (buffer.numberOfChannels == 2) {varchannel1Data = buffer.getChannelData(0);varchannel2Data = buffer.getChannelData(1);var length =channel1Data.length;for (var i = 0; i < length; i++) { بيانات الصوت[i] = (channel1Data[i] +channel2Data[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). كن حذرًا، كلما زادت قيمة الحد الأقصى لنبضة في الدقيقة، زاد احتمال حدوث أخطاء بمقدار 2x-BPM (على سبيل المثال، إذا كان الحد الأقصى لنبضة في الدقيقة = 210 والإيقاع الحقيقي للأغنية 102 نبضة في الدقيقة، في النهاية يمكنك الحصول على 204 نبضة في الدقيقة). يمكن استخدام expiryTime
إذا كان الملف الصوتي يحتوي على فترات من الصمت أو الصمت تقريبًا وبسبب فشل تتبع الإيقاع. يتم سرد المعلمات الأخرى في الوثائق.
يتطلب الموكا والشاي
اختبار $ npm
يتطلب إسدوك
$ إسدوك
يتطلب بلع وبابل. يمكن العثور على تبعيات أخرى في package.json
بناء بلع $
رخصة معهد ماساتشوستس للتكنولوجيا