UNPKG

web-audio-beat-detector

Version:

A beat detection utility which is using the Web Audio API.

43 lines (37 loc) 16.6 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('web-audio-beat-detector-broker')) : typeof define === 'function' && define.amd ? define(['exports', 'web-audio-beat-detector-broker'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.webAudioBeatDetector = {}, global.webAudioBeatDetectorBroker)); })(this, (function (exports, webAudioBeatDetectorBroker) { 'use strict'; var createLoadOrReturnBroker = function createLoadOrReturnBroker(loadBroker, worker) { var broker = null; return function () { if (broker !== null) { return broker; } var blob = new Blob([worker], { type: 'application/javascript; charset=utf-8' }); var url = URL.createObjectURL(blob); broker = loadBroker(url); // Bug #1: Edge up until v18 didn't like the URL to be revoked directly. setTimeout(function () { return URL.revokeObjectURL(url); }); return broker; }; }; // This is the minified and stringified code of the web-audio-beat-detector-worker package. var worker = "(()=>{var e={389(e,t){!function(e){\"use strict\";var t=function(e){return function(t){var r=e(t);return t.add(r),r}},r=function(e){return function(t,r){return e.set(t,r),r}},n=void 0===Number.MAX_SAFE_INTEGER?9007199254740991:Number.MAX_SAFE_INTEGER,o=536870912,u=2*o,a=function(e,t){return function(r){var a=t.get(r),s=void 0===a?r.size:a<u?a+1:0;if(!r.has(s))return e(r,s);if(r.size<o){for(;r.has(s);)s=Math.floor(Math.random()*u);return e(r,s)}if(r.size>n)throw new Error(\"Congratulations, you created a collection of unique numbers which uses all available integers!\");for(;r.has(s);)s=Math.floor(Math.random()*n);return e(r,s)}},s=new WeakMap,i=r(s),c=a(i,s),f=t(c);e.addUniqueNumber=f,e.generateUniqueNumber=c}(t)},10(e,t,r){!function(e,t){\"use strict\";var r=function(e){var t=[];return e.forEach(function(r,n){for(var o=Math.min(e.length-n,10),u=function(){var o=e[n+a]-r;t.some(function(e){return e.interval===o&&(e.peaks.push(r),!0)})||t.push({interval:o,peaks:[r]})},a=1;a<o;a+=1)u()}),t},n=function(e){for(var t=0,r=e.length,n=0;n<r;n+=1)e[n]>t&&(t=e[n]);return t},o=function(e,t,r){for(var n=e.length,o=[],u=!1,a=0;a<n;a+=1)e[a]>t?u=!0:u&&(u=!1,o.push(a-1),a+=r/4-1);return u&&o.push(n-1),o},u=function(e,r){var n,o,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=Math.max(0,null!==(n=u.maxTempo)&&void 0!==n?n:180),s=Math.max(0,null!==(o=u.minTempo)&&void 0!==o?o:90),i=[];return e.forEach(function(e){for(var n=60/(e.interval/r);n<s;)n*=2;for(;n>a;)n/=2;if(!(n<s)){var o=!1,u=e.peaks.length;i.forEach(function(r){if(r.tempo===n&&(r.score+=e.peaks.length,r.peaks=[].concat(t(r.peaks),t(e.peaks)),o=!0),r.tempo>n-.5&&r.tempo<n+.5){var a=2*Math.abs(r.tempo-n);u+=(1-a)*r.peaks.length,r.score+=(1-a)*e.peaks.length}}),o||i.push({peaks:e.peaks,score:u,tempo:n})}}),i},a=30,s=function(e,t,s){var i=n(e),c=.3*i,f=[],p=i-.05*i;if(i>.25)for(;f.length<a&&p>=c;)f=o(e,p,t),p-=.05*i;var l=r(f),d=u(l,t,s);return d.sort(function(e,t){return t.score-e.score}),d},i=function(e,t,r){var n=s(e,t,r);if(0===n.length)throw new Error(\"The given channelData does not contain any detectable beats.\");return n[0].tempo},c=function(e,t,r){var n=s(e,t,r);if(0===n.length)throw new Error(\"The given channelData does not contain any detectable beats.\");var o=n[0],u=o.peaks,a=o.tempo,i=Math.round(a),c=60/i;u.sort(function(e,t){return e-t});for(var f=u[0]/t;f>c;)f-=c;return{bpm:i,offset:f,tempo:a}};e.createWorker(self,{analyze:function(e){var t=e.channelData,r=e.sampleRate,n=e.tempoSettings;return{result:i(t,r,n)}},guess:function(e){var t=e.channelData,r=e.sampleRate,n=e.tempoSettings;return{result:c(t,r,n)}}})}(r(623),r(132))},623(e,t,r){!function(e,t,r,n,o){\"use strict\";var u={INTERNAL_ERROR:-32603,INVALID_PARAMS:-32602,METHOD_NOT_FOUND:-32601},a=function(e,t){return Object.assign(new Error(e),{status:t})},s=function(e){return a('The requested method called \"'.concat(e,'\" is not supported.'),u.METHOD_NOT_FOUND)},i=function(e){return a('The handler of the method called \"'.concat(e,'\" returned no required result.'),u.INTERNAL_ERROR)},c=function(e){return a('The handler of the method called \"'.concat(e,'\" returned an unexpected result.'),u.INTERNAL_ERROR)},f=function(e){return a('The specified parameter called \"portId\" with the given value \"'.concat(e,'\" does not identify a port connected to this worker.'),u.INVALID_PARAMS)},p=function(e,n){return function(){var o=t(r.mark(function t(o){var u,a,f,p,l,d,v,x,h,m,y,b,_,g,w;return r.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(u=o.data,a=u.id,f=u.method,p=u.params,l=n[f],t.prev=1,void 0!==l){t.next=2;break}throw s(f);case 2:if(void 0!==(d=void 0===p?l():l(p))){t.next=3;break}throw i(f);case 3:if(!(d instanceof Promise)){t.next=5;break}return t.next=4,d;case 4:g=t.sent,t.next=6;break;case 5:g=d;case 6:if(v=g,null!==a){t.next=8;break}if(void 0===v.result){t.next=7;break}throw c(f);case 7:t.next=10;break;case 8:if(void 0!==v.result){t.next=9;break}throw c(f);case 9:x=v.result,h=v.transferables,m=void 0===h?[]:h,e.postMessage({id:a,result:x},m);case 10:t.next=12;break;case 11:t.prev=11,w=t.catch(1),y=w.message,b=w.status,_=void 0===b?-32603:b,e.postMessage({error:{code:_,message:y},id:a});case 12:case\"end\":return t.stop()}},t,null,[[1,11]])}));return function(e){return o.apply(this,arguments)}}()},l=function(){return new Promise(function(e){var t=new ArrayBuffer(0),r=new MessageChannel,n=r.port1,o=r.port2;n.onmessage=function(t){var r=t.data;return e(null!==r)},o.postMessage(t,[t])})};function d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?d(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):d(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var x=new Map,h=function(e,n,u){return v(v({},n),{},{connect:function(t){var r=t.port;r.start();var u=e(r,n),a=o.generateUniqueNumber(x);return x.set(a,function(){u(),r.close(),x.delete(a)}),{result:a}},disconnect:function(e){var t=e.portId,r=x.get(t);if(void 0===r)throw f(t);return r(),{result:null}},isSupported:function(){var e=t(r.mark(function e(){var t,n,o;return r.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=1,l();case 1:if(!e.sent){e.next=5;break}if(!((t=u())instanceof Promise)){e.next=3;break}return e.next=2,t;case 2:o=e.sent,e.next=4;break;case 3:o=t;case 4:return n=o,e.abrupt(\"return\",{result:n});case 5:return e.abrupt(\"return\",{result:!1});case 6:case\"end\":return e.stop()}},e)}));function n(){return e.apply(this,arguments)}return n}()})},m=function(e,t){var r=h(m,t,arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0}),n=p(e,r);return e.addEventListener(\"message\",n),function(){return e.removeEventListener(\"message\",n)}};e.createWorker=m,e.isSupported=l}(t,r(293),r(756),r(693),r(389))},172(e){e.exports=function(e,t){this.v=e,this.k=t},e.exports.__esModule=!0,e.exports.default=e.exports},79(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n},e.exports.__esModule=!0,e.exports.default=e.exports},901(e,t,r){var n=r(79);e.exports=function(e){if(Array.isArray(e))return n(e)},e.exports.__esModule=!0,e.exports.default=e.exports},293(e){function t(e,t,r,n,o,u,a){try{var s=e[u](a),i=s.value}catch(e){return void r(e)}s.done?t(i):Promise.resolve(i).then(n,o)}e.exports=function(e){return function(){var r=this,n=arguments;return new Promise(function(o,u){var a=e.apply(r,n);function s(e){t(a,o,u,s,i,\"next\",e)}function i(e){t(a,o,u,s,i,\"throw\",e)}s(void 0)})}},e.exports.__esModule=!0,e.exports.default=e.exports},693(e,t,r){var n=r(736);e.exports=function(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},e.exports.__esModule=!0,e.exports.default=e.exports},291(e){e.exports=function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)},e.exports.__esModule=!0,e.exports.default=e.exports},250(e){e.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},e.exports.__esModule=!0,e.exports.default=e.exports},993(e,t,r){var n=r(546);function o(){var t,r,u=\"function\"==typeof Symbol?Symbol:{},a=u.iterator||\"@@iterator\",s=u.toStringTag||\"@@toStringTag\";function i(e,o,u,a){var s=o&&o.prototype instanceof f?o:f,i=Object.create(s.prototype);return n(i,\"_invoke\",function(e,n,o){var u,a,s,i=0,f=o||[],p=!1,l={p:0,n:0,v:t,a:d,f:d.bind(t,4),d:function(e,r){return u=e,a=0,s=t,l.n=r,c}};function d(e,n){for(a=e,s=n,r=0;!p&&i&&!o&&r<f.length;r++){var o,u=f[r],d=l.p,v=u[2];e>3?(o=v===n)&&(s=u[(a=u[4])?5:(a=3,3)],u[4]=u[5]=t):u[0]<=d&&((o=e<2&&d<u[1])?(a=0,l.v=n,l.n=u[1]):d<v&&(o=e<3||u[0]>n||n>v)&&(u[4]=e,u[5]=n,l.n=v,a=0))}if(o||e>1)return c;throw p=!0,n}return function(o,f,v){if(i>1)throw TypeError(\"Generator is already running\");for(p&&1===f&&d(f,v),a=f,s=v;(r=a<2?t:s)||!p;){u||(a?a<3?(a>1&&(l.n=-1),d(a,s)):l.n=s:l.v=s);try{if(i=2,u){if(a||(o=\"next\"),r=u[o]){if(!(r=r.call(u,s)))throw TypeError(\"iterator result is not an object\");if(!r.done)return r;s=r.value,a<2&&(a=0)}else 1===a&&(r=u.return)&&r.call(u),a<2&&(s=TypeError(\"The iterator does not provide a '\"+o+\"' method\"),a=1);u=t}else if((r=(p=l.n<0)?s:e.call(n,l))!==c)break}catch(e){u=t,a=1,s=e}finally{i=1}}return{value:r,done:p}}}(e,u,a),!0),i}var c={};function f(){}function p(){}function l(){}r=Object.getPrototypeOf;var d=[][a]?r(r([][a]())):(n(r={},a,function(){return this}),r),v=l.prototype=f.prototype=Object.create(d);function x(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,n(e,s,\"GeneratorFunction\")),e.prototype=Object.create(v),e}return p.prototype=l,n(v,\"constructor\",l),n(l,\"constructor\",p),p.displayName=\"GeneratorFunction\",n(l,s,\"GeneratorFunction\"),n(v),n(v,s,\"Generator\"),n(v,a,function(){return this}),n(v,\"toString\",function(){return\"[object Generator]\"}),(e.exports=o=function(){return{w:i,m:x}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports},869(e,t,r){var n=r(887);e.exports=function(e,t,r,o,u){var a=n(e,t,r,o,u);return a.next().then(function(e){return e.done?e.value:a.next()})},e.exports.__esModule=!0,e.exports.default=e.exports},887(e,t,r){var n=r(993),o=r(791);e.exports=function(e,t,r,u,a){return new o(n().w(e,t,r,u),a||Promise)},e.exports.__esModule=!0,e.exports.default=e.exports},791(e,t,r){var n=r(172),o=r(546);e.exports=function e(t,r){function u(e,o,a,s){try{var i=t[e](o),c=i.value;return c instanceof n?r.resolve(c.v).then(function(e){u(\"next\",e,a,s)},function(e){u(\"throw\",e,a,s)}):r.resolve(c).then(function(e){i.value=e,a(i)},function(e){return u(\"throw\",e,a,s)})}catch(e){s(e)}}var a;this.next||(o(e.prototype),o(e.prototype,\"function\"==typeof Symbol&&Symbol.asyncIterator||\"@asyncIterator\",function(){return this})),o(this,\"_invoke\",function(e,t,n){function o(){return new r(function(t,r){u(e,n,t,r)})}return a=a?a.then(o,o):o()},!0)},e.exports.__esModule=!0,e.exports.default=e.exports},546(e){function t(r,n,o,u){var a=Object.defineProperty;try{a({},\"\",{})}catch(r){a=0}e.exports=t=function(e,r,n,o){function u(r,n){t(e,r,function(e){return this._invoke(r,n,e)})}r?a?a(e,r,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[r]=n:(u(\"next\",0),u(\"throw\",1),u(\"return\",2))},e.exports.__esModule=!0,e.exports.default=e.exports,t(r,n,o,u)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},373(e){e.exports=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},e.exports.__esModule=!0,e.exports.default=e.exports},633(e,t,r){var n=r(172),o=r(993),u=r(869),a=r(887),s=r(791),i=r(373),c=r(579);function f(){\"use strict\";var t=o(),r=t.m(f),p=(Object.getPrototypeOf?Object.getPrototypeOf(r):r.__proto__).constructor;function l(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===p||\"GeneratorFunction\"===(t.displayName||t.name))}var d={throw:1,return:2,break:3,continue:3};function v(e){var t,r;return function(n){t||(t={stop:function(){return r(n.a,2)},catch:function(){return n.v},abrupt:function(e,t){return r(n.a,d[e],t)},delegateYield:function(e,o,u){return t.resultName=o,r(n.d,c(e),u)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(e.exports=f=function(){return{wrap:function(e,r,n,o){return t.w(v(e),r,n,o&&o.reverse())},isGeneratorFunction:l,mark:t.m,awrap:function(e,t){return new n(e,t)},AsyncIterator:s,async:function(e,t,r,n,o){return(l(t)?a:u)(v(e),t,r,n,o)},keys:i,values:c}},e.exports.__esModule=!0,e.exports.default=e.exports)()}e.exports=f,e.exports.__esModule=!0,e.exports.default=e.exports},579(e,t,r){var n=r(738).default;e.exports=function(e){if(null!=e){var t=e[\"function\"==typeof Symbol&&Symbol.iterator||\"@@iterator\"],r=0;if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(n(e)+\" is not iterable\")},e.exports.__esModule=!0,e.exports.default=e.exports},132(e,t,r){var n=r(901),o=r(291),u=r(122),a=r(250);e.exports=function(e){return n(e)||o(e)||u(e)||a()},e.exports.__esModule=!0,e.exports.default=e.exports},45(e,t,r){var n=r(738).default;e.exports=function(e,t){if(\"object\"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||\"default\");if(\"object\"!=n(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},736(e,t,r){var n=r(738).default,o=r(45);e.exports=function(e){var t=o(e,\"string\");return\"symbol\"==n(t)?t:t+\"\"},e.exports.__esModule=!0,e.exports.default=e.exports},738(e){function t(r){return e.exports=t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},122(e,t,r){var n=r(79);e.exports=function(e,t){if(e){if(\"string\"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports},756(e,t,r){var n=r(633)();e.exports=n;try{regeneratorRuntime=n}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=n:Function(\"r\",\"regeneratorRuntime = r\")(n)}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var u=t[n]={exports:{}};return e[n].call(u.exports,u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";r(10)})()})();"; // tslint:disable-line:max-line-length var loadOrReturnBroker = createLoadOrReturnBroker(webAudioBeatDetectorBroker.load, worker); var analyze = function analyze() { var _loadOrReturnBroker; return (_loadOrReturnBroker = loadOrReturnBroker()).analyze.apply(_loadOrReturnBroker, arguments); }; var guess = function guess() { var _loadOrReturnBroker2; return (_loadOrReturnBroker2 = loadOrReturnBroker()).guess.apply(_loadOrReturnBroker2, arguments); }; exports.analyze = analyze; exports.guess = guess; }));