jianpurender
Version:
Render music score using SVG on browsers.
1 lines • 3.54 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mm=t():e.mm=t()}(global,(()=>(()=>{"use strict";var e={559:(e,t,r)=>{r.d(t,{MAX_QUARTER_DIVISION:()=>s,MIN_RESOLUTION:()=>n});const n=.0625,s=240},830:(e,t,r)=>{r.d(t,{DEFAULT_KEY_SIGNATURE:()=>s,DEFAULT_TEMPO:()=>n,DEFAULT_TIME_SIGNATURE:()=>a,getMeasureLength:()=>o});const n={start:0,qpm:60},s={start:0,key:0},a={start:0,numerator:4,denominator:4};function o(e){return e.numerator*(4/e.denominator)}}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}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),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};r.r(n),r.d(n,{MeasuresInfo:()=>o});var s=r(830),a=r(559);class o{measuresInfo;allowDottedRests=!0;constructor(e,t){this.measuresInfo=[];let r=0,n=0,o=0,u=e.tempos[0],i=e.keySignatures[0],m=e.timeSignatures[0],h=1,I=(0,s.getMeasureLength)(m),g=m.start;const f=a.MIN_RESOLUTION;for(let a=0;a<t;a+=f){const t={start:a,measureNumber:h+(a-g)/I,measureLength:I,tempo:u,keySignature:i,timeSignature:m};if(r<e.tempos.length&&Math.abs(e.tempos[r].start-a)<f/2&&(u=e.tempos[r++],t.tempo=u,t.tempoChange=!0),n<e.keySignatures.length&&Math.abs(e.keySignatures[n].start-a)<f/2&&(i=e.keySignatures[n++],t.keySignature=i,t.keyChange=!0),o<e.timeSignatures.length&&Math.abs(e.timeSignatures[o].start-a)<f/2){h+=(e.timeSignatures[o].start-g)/I,h=Math.round(1e3*h)/1e3,m=e.timeSignatures[o++],t.timeSignature=m,I=(0,s.getMeasureLength)(m),t.measureLength=I,t.measureNumber=h,t.timeChange=!0,g=t.start}this.measuresInfo.push(t)}}findIndex(e){return Math.max(0,Math.min(this.measuresInfo.length-1,Math.floor(e/a.MIN_RESOLUTION)))}measureNumberAtQ(e){if(0===this.measuresInfo.length)return 1;const t=this.findIndex(e),r=this.measuresInfo[t],n=(e-r.start)/r.measureLength;return r.measureNumber+n+1e-9}measureLengthAtQ(e){if(0===this.measuresInfo.length)return(0,s.getMeasureLength)(s.DEFAULT_TIME_SIGNATURE);const t=this.findIndex(e);return this.measuresInfo[t].measureLength}tempoAtQ(e,t=!1){if(0===this.measuresInfo.length)return s.DEFAULT_TEMPO.qpm;const r=this.findIndex(e),n=this.measuresInfo[r],o=Math.abs(n.start-e)<a.MIN_RESOLUTION/2;return!t||n.tempoChange&&o?n.tempo.qpm:-1}keySignatureAtQ(e,t=!1){if(0===this.measuresInfo.length)return s.DEFAULT_KEY_SIGNATURE.key;const r=this.findIndex(e),n=this.measuresInfo[r],o=Math.abs(n.start-e)<a.MIN_RESOLUTION/2;return!t||n.keyChange&&o?n.keySignature.key:-1}timeSignatureAtQ(e,t=!1){if(0===this.measuresInfo.length)return s.DEFAULT_TIME_SIGNATURE;const r=this.findIndex(e),n=this.measuresInfo[r],o=Math.abs(n.start-e)<a.MIN_RESOLUTION/2;return!t||n.timeChange&&o?n.timeSignature:null}quartersToTime(e,t){const r=this.tempoAtQ(t);return r<=0?0:e/r*60}timeToQuarters(e,t){const r=this.tempoAtQ(t);if(r<=0)return 0;const n=e*r/60;return Math.round(n*a.MAX_QUARTER_DIVISION)/a.MAX_QUARTER_DIVISION}isBeatStart(e){if(0===this.measuresInfo.length)return!1;const t=this.findIndex(e),r=this.measuresInfo[t],n=r.timeSignature,s=(e-(r.start-(r.measureNumber-Math.floor(r.measureNumber))*r.measureLength))/(4/n.denominator);return Math.abs(s-Math.round(s))<a.MIN_RESOLUTION/2}}return n})()));