highcharts
Version:
JavaScript charting framework
13 lines • 53.9 kB
JavaScript
/**
* Highcharts JS v12.6.0 (2026-04-13)
* @module highcharts/modules/sonification
* @requires highcharts
*
* Sonification module
*
* (c) 2010-2026 Highsoft AS
* Author: Øystein Moseng
*
* A commercial license may be required depending on use.
* See www.highcharts.com/license
*/import*as e from"../highcharts.js";var t={};t.n=e=>{var i=e&&e.__esModule?()=>e.default:()=>e;return t.d(i,{a:i}),i},t.d=(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},t.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);let i=e.default;var n=t.n(i);let{doc:s,win:o}=n();function a(e,t,i,s={}){let o="function"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(o,"hcEvents")||(o.hcEvents={});let l=o.hcEvents;n().Point&&e instanceof n().Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let r=e.addEventListener;r&&r.call(e,t,i,!!n().supportsPassiveEvents&&{passive:void 0===s.passive?-1!==t.indexOf("touch"):s.passive,capture:!1}),l[t]||(l[t]=[]);let h={fn:i,order:"number"==typeof s.order?s.order:1/0};return l[t].push(h),l[t].sort((e,t)=>e.order-t.order),function(){!function(e,t,i){function n(t,i){let n=e.removeEventListener;n&&n.call(e,t,i,!1)}function s(i){let s,o;e.nodeName&&(t?(s={})[t]=!0:s=i,f(s,function(e,t){if(i[t])for(o=i[t].length;o--;)n(t,i[t][o].fn)}))}let o="function"==typeof e&&e.prototype||e;if(Object.hasOwnProperty.call(o,"hcEvents")){let e=o.hcEvents;if(t){let o=e[t]||[];i?(e[t]=o.filter(function(e){return i!==e.fn}),n(t,i)):(s(e),e[t]=[])}else s(e),delete o.hcEvents}}(e,t,i)}}function l(e,t,i){return e>t?e<i?e:i:t}function r(e){return null!=e}function h(e,t){let i;for(i in e||(e={}),t)e[i]=t[i];return e}function c(e,t){let i=e.split(".");for(;i.length&&r(t);){let e=i.shift();if(void 0===e||"__proto__"===e)return;if("this"===e){let e;return m(t)&&(e=t["@this"]),e??t}let n=t[e.replace(/[\\'"]/g,"")];if(!r(n)||"function"==typeof n||"number"==typeof n.nodeType||n===o)return;t=n}return t}let u=Array.prototype.find?function(e,t){return e.find(t)}:function(e,t){let i,n=e.length;for(i=0;i<n;i++)if(t(e[i],i))return e[i]};function p(e){return m(e)&&"number"==typeof e.nodeType}function m(e,t){let i;return!!e&&"object"==typeof e&&(!t||"[object Array]"!==(i=Object.prototype.toString.call(e))&&"[object Array Iterator]"!==i)}function d(e,...t){let i,n=[e,...t],s={},o=function(e,t){return"object"!=typeof e&&(e={}),f(t,function(i,n){if("__proto__"!==n&&"constructor"!==n){let s;!m(i,!0)||(s=i?.constructor,m(i,!0)&&!p(i)&&s?.name&&"Object"!==s.name)||p(i)?e[n]=t[n]:e[n]=o(e[n]||{},i)}}),e};!0===e&&(s=n[1],n=Array.prototype.slice.call(n,2));let a=n.length;for(i=0;i<a;i++)s=o(s,n[i]);return s}function f(e,t,i){for(let n in e)Object.hasOwnProperty.call(e,n)&&t.call(i||e[n],e[n],n,e)}function y(){let e=arguments,t=e.length;for(let i=0;i<t;i++){let t=e[i];if(null!=t)return t}}function g(e,t){return(.2414*e-.2414)*Math.log(t)+(3.5-1.7*e)/1.8}function v(e,t,i){e.gain.cancelScheduledValues(t),e.gain.setTargetAtTime(i,t,x.stopRampTime/4),e.gain.setValueAtTime(i,t+x.stopRampTime)}function q(e,t,i,n,s=1){let o="attack"===t,a=n.gain;(a.cancelScheduledValues(i),e.length)?(e[0].t>1&&e.unshift({t:0,vol:+!o}),e.forEach((t,n)=>{let o=e[n-1],l=o?(t.t-o.t)/1e3:0,r=i+(o?o.t/1e3+x.stopRampTime:0);a.setTargetAtTime(t.vol*s,r,Math.max(l,x.stopRampTime)/2)})):v(n,i,o?s:0)}class T{constructor(e,t){this.pulseWidth=Math.min(Math.max(0,t.pulseWidth||.5));let i=()=>new OscillatorNode(e,{type:"sawtooth",detune:t.detune,frequency:Math.max(1,t.frequency||350)});this.sawOscA=i(),this.sawOscB=i(),this.phaseInverter=new GainNode(e,{gain:-1}),this.masterGain=new GainNode(e),this.delayNode=new DelayNode(e,{delayTime:this.pulseWidth/this.sawOscA.frequency.value}),this.sawOscA.connect(this.masterGain),this.sawOscB.connect(this.phaseInverter),this.phaseInverter.connect(this.delayNode),this.delayNode.connect(this.masterGain)}connect(e){this.masterGain.connect(e)}getFrequencyFacade(){let e=this;return{cancelScheduledValues:t=>(e.sawOscA.frequency.cancelScheduledValues(t),e.sawOscB.frequency.cancelScheduledValues(t),e.delayNode.delayTime.cancelScheduledValues(t),e.sawOscA.frequency),setValueAtTime(t,i){return this.cancelScheduledValues(i),e.sawOscA.frequency.setValueAtTime(t,i),e.sawOscB.frequency.setValueAtTime(t,i),e.delayNode.delayTime.setValueAtTime(Math.round(1e4*e.pulseWidth/t)/1e4,i),e.sawOscA.frequency},setTargetAtTime(t,i,n){return this.cancelScheduledValues(i),e.sawOscA.frequency.setTargetAtTime(t,i,n),e.sawOscB.frequency.setTargetAtTime(t,i,n),e.delayNode.delayTime.setTargetAtTime(Math.round(1e4*e.pulseWidth/t)/1e4,i,n),e.sawOscA.frequency}}}getPWMTarget(){return this.delayNode.delayTime}start(){this.sawOscA.start(),this.sawOscB.start()}stop(e){this.sawOscA.stop(e),this.sawOscB.stop(e)}}class w{constructor(e,t,i){this.audioContext=e,this.options=t,this.fmOscillatorIx=t.fmOscillator,this.vmOscillatorIx=t.vmOscillator,this.createSoundSource(),this.createGain(),this.createFilters(),this.createVolTracking(),i&&this.connect(i)}connect(e){[this.lowpassNode,this.highpassNode,this.volTrackingNode,this.vmNode,this.gainNode,this.whiteNoise,this.pulseNode,this.oscNode].reduce((e,t)=>t?(t.connect(e),t):e,e)}start(){this.oscNode&&this.oscNode.start(),this.whiteNoise&&this.whiteNoise.start(),this.pulseNode&&this.pulseNode.start()}stopAtTime(e){this.oscNode&&this.oscNode.stop(e),this.whiteNoise&&this.whiteNoise.stop(e),this.pulseNode&&this.pulseNode.stop(e)}setFreqAtTime(e,t,i=0){let n=this.options,s=l(y(n.fixedFrequency,t)*(n.freqMultiplier||1),0,21e3),o=this.getOscTarget(),a=i/5e3;o&&(o.cancelScheduledValues(e),i&&e-(this.lastUpdateTime||-1)>.01?(o.setTargetAtTime(s,e,a),o.setValueAtTime(s,e+a)):o.setValueAtTime(s,e)),this.scheduleVolTrackingChange(s,e,i),this.scheduleFilterTrackingChange(s,e,i),this.lastUpdateTime=e}getFMTarget(){return this.oscNode&&this.oscNode.detune||this.whiteNoise&&this.whiteNoise.detune||this.pulseNode&&this.pulseNode.getPWMTarget()}getVMTarget(){return this.vmNode&&this.vmNode.gain}runEnvelopeAtTime(e,t){this.gainNode&&q(("attack"===e?this.options.attackEnvelope:this.options.releaseEnvelope)||[],e,t,this.gainNode,this.options.volume)}cancelScheduled(){this.gainNode&&this.gainNode.gain.cancelScheduledValues(this.audioContext.currentTime);let e=this.getOscTarget();e&&e.cancelScheduledValues(0),this.lowpassNode&&this.lowpassNode.frequency.cancelScheduledValues(0),this.highpassNode&&this.highpassNode.frequency.cancelScheduledValues(0),this.volTrackingNode&&this.volTrackingNode.gain.cancelScheduledValues(0)}scheduleVolTrackingChange(e,t,i){if(this.volTrackingNode){let n=g(this.options.volumePitchTrackingMultiplier||1,e),s=i?i/1e3:x.stopRampTime;this.volTrackingNode.gain.cancelScheduledValues(t),this.volTrackingNode.gain.setTargetAtTime(n,t,s/5),this.volTrackingNode.gain.setValueAtTime(n,t+s)}}scheduleFilterTrackingChange(e,t,i){let n=this.options,s=i?i/1e3:x.stopRampTime,o=(i,n)=>{let o=g(n.frequencyPitchTrackingMultiplier||1,e),a=l((n.frequency||1e3)*o,0,21e3);i.frequency.cancelScheduledValues(t),i.frequency.setTargetAtTime(a,t,s/5),i.frequency.setValueAtTime(a,t+s)};this.lowpassNode&&n.lowpass&&o(this.lowpassNode,n.lowpass),this.highpassNode&&n.highpass&&o(this.highpassNode,n.highpass)}createGain(){let e=this.options;(r(e.volume)||e.attackEnvelope&&e.attackEnvelope.length||e.releaseEnvelope&&e.releaseEnvelope.length)&&(this.gainNode=new GainNode(this.audioContext,{gain:y(e.volume,1)})),this.vmNode=new GainNode(this.audioContext)}createSoundSource(){let e=this.options,t=this.audioContext,i=(e.fixedFrequency||0)*(e.freqMultiplier||1);if("whitenoise"===e.type){let e=2*t.sampleRate,i=t.createBuffer(1,e,t.sampleRate),n=i.getChannelData(0);for(let t=0;t<e;++t)n[t]=1.2*Math.random()-.6;let s=this.whiteNoise=t.createBufferSource();s.buffer=i,s.loop=!0}else"pulse"===e.type?this.pulseNode=new T(t,{detune:e.detune,pulseWidth:e.pulseWidth,frequency:i}):this.oscNode=new OscillatorNode(t,{type:e.type||"sine",detune:e.detune,frequency:i})}createFilters(){let e=this.options;e.lowpass&&e.lowpass.frequency&&(this.lowpassNode=new BiquadFilterNode(this.audioContext,{type:"lowpass",Q:e.lowpass.Q||1,frequency:e.lowpass.frequency})),e.highpass&&e.highpass.frequency&&(this.highpassNode=new BiquadFilterNode(this.audioContext,{type:"highpass",Q:e.highpass.Q||1,frequency:e.highpass.frequency}))}createVolTracking(){let e=this.options;e.volumePitchTrackingMultiplier&&1!==e.volumePitchTrackingMultiplier&&(this.volTrackingNode=new GainNode(this.audioContext,{gain:1}))}getOscTarget(){return this.oscNode?this.oscNode.frequency:this.pulseNode&&this.pulseNode.getFrequencyFacade()}}class x{constructor(e,t){this.audioContext=e,this.options=t,this.eqNodes=[],this.midiInstrument=t.midiInstrument||1,this.outputNode=new GainNode(e,{gain:0}),this.createEqChain(this.outputNode);let i=this.eqNodes.length?this.eqNodes[0]:this.outputNode;this.oscillators=(this.options.oscillators||[]).map(t=>new w(e,t,r(t.fmOscillator)||r(t.vmOscillator)?void 0:i)),this.oscillators.forEach(e=>{let t=(t,i)=>{if(i){let n=i[t]();n&&e.connect(n)}};r(e.fmOscillatorIx)&&t("getFMTarget",this.oscillators[e.fmOscillatorIx]),r(e.vmOscillatorIx)&&t("getVMTarget",this.oscillators[e.vmOscillatorIx])})}startSilently(){this.outputNode.gain.value=0,this.oscillators.forEach(e=>e.start())}stop(){let e=this.audioContext.currentTime,t=e+x.stopRampTime;v(this.outputNode,e,0),this.oscillators.forEach(e=>e.stopAtTime(t)),this.outputNode.disconnect()}silenceAtTime(e){if(!e&&this.outputNode.gain.value<.01){this.outputNode.gain.value=0;return}this.releaseAtTime((e||0)+this.audioContext.currentTime)}mute(){this.cancelScheduled(),v(this.outputNode,this.audioContext.currentTime,0)}playFreqAtTime(e,t,i){let n=(e||0)+this.audioContext.currentTime,s=this.options;this.oscillators.forEach(e=>{e.setFreqAtTime(n,t,s.noteGlideDuration),e.runEnvelopeAtTime("attack",n)}),q(s.masterAttackEnvelope||[],"attack",n,this.outputNode,s.masterVolume),i&&this.releaseAtTime(n+i/1e3)}cancelScheduled(){this.outputNode.gain.cancelScheduledValues(this.audioContext.currentTime),this.oscillators.forEach(e=>e.cancelScheduled())}connect(e){return this.outputNode.connect(e)}createEqChain(e){this.eqNodes=(this.options.eq||[]).map(e=>new BiquadFilterNode(this.audioContext,{type:"peaking",...e})),this.eqNodes.reduceRight((e,t)=>(t.connect(e),t),e)}releaseAtTime(e){let t=0;this.oscillators.forEach(i=>{let n=i.options.releaseEnvelope;n&&n.length&&(t=Math.max(t,n[n.length-1].t),i.runEnvelopeAtTime("release",e))});let i=this.options.masterReleaseEnvelope||[];i.length&&(q(i,"release",e,this.outputNode,this.options.masterVolume),t=Math.max(t,i[i.length-1].t)),v(this.outputNode,e+t/1e3,0)}}x.stopRampTime=.012;let E={piano:{masterVolume:.45,masterAttackEnvelope:[{t:1,vol:.71},{t:40,vol:.79},{t:82,vol:.64},{t:147,vol:.29},{t:260,vol:.15},{t:417,vol:.05},{t:589,vol:0}],eq:[{frequency:200,Q:.7,gain:6},{frequency:450,gain:6},{frequency:1300,gain:2},{frequency:2600,Q:.8,gain:8},{frequency:3500,Q:.8,gain:6},{frequency:6200,Q:.8,gain:10},{frequency:8e3,gain:-23},{frequency:1e4,Q:.4,gain:-12}],oscillators:[{type:"pulse",volume:.5,pulseWidth:.55,volumePitchTrackingMultiplier:.1,lowpass:{frequency:4.5,frequencyPitchTrackingMultiplier:900,Q:-2},highpass:{frequency:270},attackEnvelope:[{t:1,vol:1}],releaseEnvelope:[{t:1,vol:1},{t:282,vol:.64},{t:597,vol:0}]},{type:"whitenoise",volume:.8,lowpass:{frequency:400},highpass:{frequency:300},attackEnvelope:[{t:1,vol:1},{t:19,vol:0}]}]},plucked:{masterVolume:.5,midiInstrument:25,masterAttackEnvelope:[{t:1,vol:.71},{t:4,vol:.71},{t:31,vol:.4},{t:109,vol:.12},{t:234,vol:.04},{t:442,vol:0}],eq:[{frequency:800,gain:-8},{frequency:1400,Q:4,gain:4},{frequency:1600,gain:-14},{frequency:2200,gain:-8},{frequency:3600,gain:-2},{frequency:6400,Q:2,gain:-6}],oscillators:[{type:"sawtooth",volume:.9,volumePitchTrackingMultiplier:.6,highpass:{frequency:100},lowpass:{frequency:8e3},releaseEnvelope:[{t:1,vol:1},{t:315,vol:.56},{t:550,vol:0}]}]},flute:{masterVolume:1.1,midiInstrument:74,noteGlideDuration:30,masterAttackEnvelope:[{t:0,vol:0},{t:29,vol:1},{t:76,vol:.48},{t:600,vol:.36}],masterReleaseEnvelope:[{t:1,vol:.36},{t:24,vol:.15},{t:119,vol:0}],eq:[{frequency:150,Q:.6,gain:-10},{frequency:500,gain:4},{frequency:1100,gain:-4},{frequency:2200,gain:-14},{frequency:5e3,gain:8},{frequency:6400,gain:10},{frequency:8e3,gain:12},{frequency:10800,gain:8}],oscillators:[{type:"triangle",volume:1,volumePitchTrackingMultiplier:.4,lowpass:{frequency:12,frequencyPitchTrackingMultiplier:100},highpass:{frequency:200}},{type:"sine",fixedFrequency:5,volume:.2,vmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:48,vol:0},{t:225,vol:.05},{t:600,vol:.77}]},{type:"whitenoise",volume:.13,lowpass:{frequency:9e3,Q:3},highpass:{frequency:6e3,Q:3},vmOscillator:0,attackEnvelope:[{t:0,vol:0},{t:26,vol:1},{t:93,vol:.8}]}]},lead:{masterVolume:1,midiInstrument:20,masterAttackEnvelope:[{t:1,vol:.81},{t:98,vol:.5},{t:201,vol:.18},{t:377,vol:.04},{t:586,vol:0},{t:586,vol:0}],eq:[{frequency:200,gain:-6},{frequency:400,gain:-8},{frequency:800,Q:.5,gain:-10},{frequency:1200,gain:4},{frequency:3600,gain:-4},{frequency:4200,gain:-12},{frequency:7400,gain:-14},{frequency:1e4,gain:2}],oscillators:[{type:"triangle",volume:1.1,volumePitchTrackingMultiplier:.6,lowpass:{frequency:5e3},highpass:{frequency:100}},{type:"sawtooth",volume:.4,lowpass:{frequency:7e3},highpass:{frequency:800,Q:6},releaseEnvelope:[{t:0,vol:.99},{t:200,vol:.83},{t:495,vol:0}]}]},vibraphone:{masterVolume:1,midiInstrument:12,masterAttackEnvelope:[{t:1,vol:0},{t:10,vol:.63},{t:82,vol:.64},{t:149,vol:.26},{t:600,vol:0}],eq:[{frequency:200,Q:.8,gain:-12},{frequency:400,gain:-4},{frequency:1600,Q:.5,gain:6},{frequency:2200,Q:.5,gain:6},{frequency:6400,gain:4},{frequency:12800,gain:4}],oscillators:[{type:"sine",volume:1.5,volumePitchTrackingMultiplier:1e-7,attackEnvelope:[{t:1,vol:1}],releaseEnvelope:[{t:1,vol:1},{t:146,vol:.39},{t:597,vol:0}]},{type:"whitenoise",volume:.03,volumePitchTrackingMultiplier:1e-4,lowpass:{frequency:900},highpass:{frequency:800},attackEnvelope:[{t:1,vol:1},{t:9,vol:0}]},{type:"sine",freqMultiplier:4,volume:.15,volumePitchTrackingMultiplier:1e-4},{type:"sine",fixedFrequency:3,volume:6,fmOscillator:0,releaseEnvelope:[{t:1,vol:1},{t:190,vol:.41},{t:600,vol:0}]},{type:"sine",fixedFrequency:6,volume:3,fmOscillator:2},{type:"sine",freqMultiplier:9,volume:5e-4,volumePitchTrackingMultiplier:1e-4,releaseEnvelope:[{t:1,vol:.97},{t:530,vol:0}]}]},saxophone:{masterVolume:1,midiInstrument:67,noteGlideDuration:10,masterAttackEnvelope:[{t:1,vol:.57},{t:35,vol:1},{t:87,vol:.84},{t:111,vol:.6},{t:296,vol:.49},{t:600,vol:.58}],masterReleaseEnvelope:[{t:1,vol:.58},{t:47,vol:.16},{t:119,vol:0}],eq:[{frequency:200,gain:-2},{frequency:600,gain:2},{frequency:800,gain:-10},{frequency:1100,gain:-2},{frequency:2200,gain:-2},{frequency:3500,gain:10},{frequency:12800,gain:4}],oscillators:[{type:"sawtooth",volume:.45,volumePitchTrackingMultiplier:.06,lowpass:{frequency:18,frequencyPitchTrackingMultiplier:200},highpass:{frequency:300}},{type:"whitenoise",fixedFrequency:1,volume:.4,highpass:{frequency:7e3},vmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:51,vol:1},{t:86,vol:.84},{t:500,vol:.78}]},{type:"sine",fixedFrequency:4,volume:2,fmOscillator:0,attackEnvelope:[{t:0,vol:0},{t:15,vol:.94},{t:79,vol:1},{t:172,vol:.47},{t:500,vol:.26}]},{type:"sine",fixedFrequency:7,volume:6,fmOscillator:0,attackEnvelope:[{t:0,vol:0},{t:25,vol:.99},{t:85,vol:0},{t:85,vol:0},{t:387,vol:.02},{t:511,vol:.43},{t:600,vol:0}]}]},trumpet:{masterVolume:.3,midiInstrument:57,noteGlideDuration:40,masterAttackEnvelope:[{t:1,vol:0},{t:17,vol:1},{t:42,vol:.85},{t:76,vol:1},{t:202,vol:.65},{t:226,vol:.86},{t:282,vol:.63}],masterReleaseEnvelope:[{t:1,vol:.62},{t:34,vol:.14},{t:63,vol:.21},{t:96,vol:0}],eq:[{frequency:200,Q:.6,gain:10},{frequency:600,Q:.5,gain:6},{frequency:1500,Q:.7,gain:14},{frequency:3200,Q:2,gain:8},{frequency:3800,Q:.8,gain:10},{frequency:6200,gain:12},{frequency:8400,gain:-20},{frequency:12800,Q:.5,gain:-18}],oscillators:[{type:"sawtooth",volume:.15,pulseWidth:.5,volumePitchTrackingMultiplier:.5,lowpass:{frequency:1900,Q:3}},{type:"sine",fixedFrequency:6,volume:.2,vmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:102,vol:.13},{t:556,vol:.24}]},{type:"whitenoise",volume:.45,highpass:{frequency:7e3,Q:9},vmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:89,vol:.51},{t:577,vol:.29}]},{type:"sine",fixedFrequency:5.7,volume:20,fmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:89,vol:1},{t:137,vol:.46},{t:283,vol:.15},{t:600,vol:.28}]}]},sawsynth:{masterVolume:.3,midiInstrument:51,noteGlideDuration:40,masterAttackEnvelope:[{t:0,vol:.6},{t:9,vol:1},{t:102,vol:.48}],eq:[{frequency:200,gain:-6}],oscillators:[{type:"sawtooth",volume:.4,volumePitchTrackingMultiplier:.3},{type:"sawtooth",volume:.4,detune:11,volumePitchTrackingMultiplier:.3},{type:"sawtooth",volume:.4,detune:-11,volumePitchTrackingMultiplier:.3}]},basic1:{masterVolume:1,noteGlideDuration:0,masterReleaseEnvelope:[{t:1,vol:.36},{t:24,vol:.15},{t:119,vol:0}],eq:[{frequency:150,Q:.6,gain:-12},{frequency:1100,gain:-2},{frequency:2200,gain:-16},{frequency:5e3,gain:8},{frequency:6400,gain:10},{frequency:8e3,gain:12},{frequency:10800,gain:8}],oscillators:[{type:"triangle",volume:1,volumePitchTrackingMultiplier:.05,lowpass:{frequency:17,frequencyPitchTrackingMultiplier:100},highpass:{frequency:200}},{type:"whitenoise",volume:.04,lowpass:{frequency:9e3,Q:3},highpass:{frequency:6e3,Q:3},vmOscillator:0,attackEnvelope:[{t:0,vol:0},{t:26,vol:1},{t:71,vol:.73}]}]},basic2:{masterVolume:.3,eq:[{frequency:200,Q:.7,gain:6},{frequency:450,gain:2},{frequency:1300,gain:-2},{frequency:2600,Q:.8,gain:6},{frequency:3500,Q:.8,gain:6},{frequency:6200,Q:.8,gain:10},{frequency:8e3,gain:-18},{frequency:1e4,Q:.4,gain:-12}],oscillators:[{type:"pulse",volume:.4,pulseWidth:.55,volumePitchTrackingMultiplier:.1,lowpass:{frequency:4.5,frequencyPitchTrackingMultiplier:900,Q:-2},highpass:{frequency:270}}]},chord:{masterVolume:1,masterAttackEnvelope:[{t:1,vol:.79},{t:27,vol:.86},{t:62,vol:.81},{t:150,vol:.35},{t:408,vol:.04},{t:600,vol:0}],eq:[{frequency:200,gain:-8},{frequency:600,Q:2,gain:4},{frequency:800,gain:-10},{frequency:1600,gain:-2},{frequency:2200,gain:-6},{frequency:3600,Q:.7,gain:-2},{frequency:6400,gain:6},{frequency:12800,gain:6}],oscillators:[{type:"triangle",volume:1.1,volumePitchTrackingMultiplier:.05,lowpass:{frequency:8e3},highpass:{frequency:100},releaseEnvelope:[{t:1,vol:1},{t:315,vol:.56},{t:540,vol:0}]},{type:"triangle",freqMultiplier:1.17,volume:.4,volumePitchTrackingMultiplier:.07,lowpass:{frequency:5e3},highpass:{frequency:100},releaseEnvelope:[{t:0,vol:1},{t:476,vol:0}]},{type:"triangle",freqMultiplier:1.58333,volume:.7,volumePitchTrackingMultiplier:.02,highpass:{frequency:200},releaseEnvelope:[{t:0,vol:1},{t:422,vol:.56},{t:577,vol:0}]},{type:"sine",fixedFrequency:10,volume:4,fmOscillator:0,attackEnvelope:[{t:1,vol:1},{t:157,vol:.65}]},{type:"sine",fixedFrequency:5,volume:.3,vmOscillator:2,attackEnvelope:[{t:1,vol:1},{t:155,vol:.91},{t:289,vol:.78}]}]},wobble:{masterVolume:.9,masterReleaseEnvelope:[{t:1,vol:.36},{t:24,vol:.15},{t:119,vol:0}],eq:[{frequency:150,Q:.6,gain:-12},{frequency:1100,gain:-2},{frequency:2200,gain:-16},{frequency:5e3,gain:8},{frequency:6400,gain:10},{frequency:8e3,gain:12},{frequency:10800,gain:8}],oscillators:[{type:"triangle",volume:.9,volumePitchTrackingMultiplier:.1,lowpass:{frequency:17,frequencyPitchTrackingMultiplier:100},highpass:{frequency:200}},{type:"whitenoise",volume:.04,lowpass:{frequency:9e3,Q:3},highpass:{frequency:6e3,Q:3},vmOscillator:0,attackEnvelope:[{t:0,vol:0},{t:26,vol:1},{t:71,vol:.73}]},{type:"sine",freqMultiplier:.011,volume:30,fmOscillator:0}]},sine:{masterVolume:1,oscillators:[{type:"sine",volumePitchTrackingMultiplier:.07}]},sineGlide:{masterVolume:1,noteGlideDuration:100,oscillators:[{type:"sine",volumePitchTrackingMultiplier:.07}]},triangle:{masterVolume:.5,oscillators:[{type:"triangle",volume:1,volumePitchTrackingMultiplier:.07}]},sawtooth:{masterVolume:.25,midiInstrument:82,oscillators:[{type:"sawtooth",volume:.3,volumePitchTrackingMultiplier:.07}]},square:{masterVolume:.3,midiInstrument:81,oscillators:[{type:"square",volume:.2,volumePitchTrackingMultiplier:.07}]},chop:{masterVolume:1,midiInstrument:116,masterAttackEnvelope:[{t:1,vol:1},{t:44,vol:0}],oscillators:[{type:"whitenoise",volume:1,lowpass:{frequency:600},highpass:{frequency:200}}]},shaker:{masterVolume:.4,midiInstrument:116,masterAttackEnvelope:[{t:1,vol:1},{t:44,vol:0}],oscillators:[{type:"whitenoise",volume:1,lowpass:{frequency:6500},highpass:{frequency:5e3}}]},step:{masterVolume:1,midiInstrument:116,masterAttackEnvelope:[{t:1,vol:1},{t:44,vol:0}],eq:[{frequency:200,gain:-1},{frequency:400,gain:-14},{frequency:800,gain:8},{frequency:1e3,Q:5,gain:-24},{frequency:1600,gain:8},{frequency:2200,gain:-10},{frequency:5400,gain:4},{frequency:12800,gain:-36}],oscillators:[{type:"whitenoise",volume:1.5,lowpass:{frequency:300},highpass:{frequency:100,Q:6}}]},kick:{masterVolume:.55,masterAttackEnvelope:[{t:1,vol:.8},{t:15,vol:1},{t:45,vol:.35},{t:121,vol:.11},{t:242,vol:0}],eq:[{frequency:50,gain:6},{frequency:400,gain:-18},{frequency:1600,gain:18}],oscillators:[{type:"triangle",fixedFrequency:90,volume:1,lowpass:{frequency:300},attackEnvelope:[{t:1,vol:1},{t:6,vol:1},{t:45,vol:.01}]},{type:"whitenoise",volume:.4,lowpass:{frequency:200},attackEnvelope:[{t:1,vol:1},{t:30,vol:0}]},{type:"triangle",freqMultiplier:.1,volume:1,lowpass:{frequency:200}}]},shortnote:{masterVolume:.8,midiInstrument:116,masterAttackEnvelope:[{t:1,vol:1},{t:15,vol:0}],eq:[{frequency:400,gain:-4},{frequency:800,gain:-12},{frequency:2400,gain:4},{frequency:7200,gain:-20},{frequency:1e3,Q:5,gain:-12},{frequency:5400,gain:-32},{frequency:12800,gain:-14}],oscillators:[{type:"sawtooth",volume:.6,lowpass:{frequency:1e3}},{type:"whitenoise",volume:.2,lowpass:{frequency:1e4},highpass:{frequency:7e3},attackEnvelope:[{t:1,vol:1},{t:10,vol:0}]},{type:"whitenoise",volume:1.3,lowpass:{frequency:700,Q:4},highpass:{frequency:250}}]},noise:{masterVolume:.3,midiInstrument:122,oscillators:[{type:"whitenoise"}]},filteredNoise:{masterVolume:.3,midiInstrument:122,eq:[{frequency:1600,gain:-8},{frequency:2200,gain:-4}],oscillators:[{type:"whitenoise",lowpass:{frequency:5,frequencyPitchTrackingMultiplier:1300,Q:6},highpass:{frequency:5,frequencyPitchTrackingMultiplier:300,Q:6}}]},wind:{masterVolume:.75,midiInstrument:122,noteGlideDuration:150,masterReleaseEnvelope:[{t:0,vol:1},{t:124,vol:.24},{t:281,vol:0}],oscillators:[{type:"whitenoise",volume:1,lowpass:{frequency:100,frequencyPitchTrackingMultiplier:6,Q:23},highpass:{frequency:170,frequencyPitchTrackingMultiplier:6}},{type:"sine",freqMultiplier:.016,volume:1e3,fmOscillator:0}]}};class N{constructor(e,t,i){this.audioContext=e,this.curParams={},this.midiTrackName=i.midiTrackName,this.masterVolNode=new GainNode(e),this.masterVolNode.connect(t),this.volumeNode=new GainNode(e),this.createNodesFromCapabilities(h({pan:!0},i.capabilities||{})),this.connectCapabilityNodes(this.volumeNode,this.masterVolNode),this.synthPatch=new x(e,"string"==typeof i.synthPatch?E[i.synthPatch]:i.synthPatch),this.midiInstrument=this.synthPatch.midiInstrument||1,this.synthPatch.startSilently(),this.synthPatch.connect(this.volumeNode)}setMasterVolume(e){this.masterVolNode.gain.setTargetAtTime(e,0,N.rampTime)}scheduleEventAtTime(e,t){let i=h(this.curParams,t),n=r(t.frequency)?t.frequency:r(t.note)?N.musicalNoteToFrequency(t.note):220;r(n)&&this.synthPatch.playFreqAtTime(e,n,i.noteDuration),(r(i.tremoloDepth)||r(i.tremoloSpeed))&&this.setTremoloAtTime(e,i.tremoloDepth,i.tremoloSpeed),r(i.pan)&&this.setPanAtTime(e,i.pan),r(i.volume)&&this.setVolumeAtTime(e,i.volume),(r(i.lowpassFreq)||r(i.lowpassResonance))&&this.setFilterAtTime("lowpass",e,i.lowpassFreq,i.lowpassResonance),(r(i.highpassFreq)||r(i.highpassResonance))&&this.setFilterAtTime("highpass",e,i.highpassFreq,i.highpassResonance)}silenceAtTime(e){this.synthPatch.silenceAtTime(e)}cancel(){this.synthPatch.mute(),[this.tremoloDepth&&this.tremoloDepth.gain,this.tremoloOsc&&this.tremoloOsc.frequency,this.lowpassNode&&this.lowpassNode.frequency,this.lowpassNode&&this.lowpassNode.Q,this.highpassNode&&this.highpassNode.frequency,this.highpassNode&&this.highpassNode.Q,this.panNode&&this.panNode.pan,this.volumeNode.gain].forEach(e=>e&&e.cancelScheduledValues(0))}destroy(){this.cancel(),this.synthPatch.stop(),this.tremoloOsc&&this.tremoloOsc.stop(),[this.tremoloDepth,this.tremoloOsc,this.lowpassNode,this.highpassNode,this.panNode,this.volumeNode,this.masterVolNode].forEach(e=>e&&e.disconnect())}setPanAtTime(e,t){this.panNode&&this.panNode.pan.setTargetAtTime(t,e+this.audioContext.currentTime,N.rampTime)}setFilterAtTime(e,t,i,n){let s=this[e+"Node"],o=this.audioContext.currentTime+t;s&&(r(n)&&s.Q.setTargetAtTime(n,o,N.rampTime),r(i)&&s.frequency.setTargetAtTime(i,o,N.rampTime))}setVolumeAtTime(e,t){this.volumeNode&&this.volumeNode.gain.setTargetAtTime(t,e+this.audioContext.currentTime,N.rampTime)}setTremoloAtTime(e,t,i){let n=this.audioContext.currentTime+e;this.tremoloDepth&&r(t)&&this.tremoloDepth.gain.setTargetAtTime(t,n,N.rampTime),this.tremoloOsc&&r(i)&&this.tremoloOsc.frequency.setTargetAtTime(15*i,n,N.rampTime)}createNodesFromCapabilities(e){let t=this.audioContext;e.pan&&(this.panNode=new StereoPannerNode(t)),e.tremolo&&(this.tremoloOsc=new OscillatorNode(t,{type:"sine",frequency:3}),this.tremoloDepth=new GainNode(t),this.tremoloOsc.connect(this.tremoloDepth),this.tremoloDepth.connect(this.masterVolNode.gain),this.tremoloOsc.start()),e.filters&&(this.lowpassNode=new BiquadFilterNode(t,{type:"lowpass",frequency:2e4}),this.highpassNode=new BiquadFilterNode(t,{type:"highpass",frequency:0}))}connectCapabilityNodes(e,t){[this.panNode,this.lowpassNode,this.highpassNode,e].reduce((e,t)=>t?(t.connect(e),t):e,t)}static noteStringToC0Distance(e){let t=e.match(/^([a-g][#b]?)([0-8])$/i),i=t?t[1]:"a",n=i[0].toLowerCase(),s=i[1];return(({c:0,d:2,e:4,f:5,g:7,a:9,b:11})[n]||0)+("#"===s?1:"b"===s?-1:0)+12*(t?parseInt(t[2],10):4)}static musicalNoteToFrequency(e){return 16.3516*Math.pow(2,Math.min("string"==typeof e?this.noteStringToC0Distance(e):e,107)/12)}}N.rampTime=x.stopRampTime/4;let P=class{constructor(e){this.options=e,this.masterVolume=1,this.synthesis=window.speechSynthesis,void 0!==speechSynthesis.onvoiceschanged&&(speechSynthesis.onvoiceschanged=this.setVoice.bind(this)),this.setVoice(),this.scheduled=[]}say(e,t){if(this.synthesis){this.synthesis.cancel();let i=new SpeechSynthesisUtterance(e);this.voice&&(i.voice=this.voice),i.rate=t&&t.rate||this.options.rate||1,i.pitch=t&&t.pitch||this.options.pitch||1,i.volume=y(t&&t.volume,this.options.volume,1)*this.masterVolume,this.synthesis.speak(i)}}sayAtTime(e,t,i){this.scheduled.push(setTimeout(this.say.bind(this,t,i),e))}cancel(){this.scheduled.forEach(clearTimeout),this.scheduled=[],this.synthesis.cancel()}destroy(){this.cancel()}setMasterVolume(e){this.masterVolume=e}setVoice(){if(this.synthesis){let e,t=this.options.name,i=this.options.language||"en-US",n=this.synthesis.getVoices(),s=n.length;for(let o=0;o<s;++o){if(t&&n[o].name===t){this.voice=n[o];return}if(!e&&n[o].lang===i&&(e=n[o],!t))break}this.voice=e}}},k=class{constructor(e,t,i=!1,n,s){this.type=e,this.engine=t,this.showPlayMarker=i,this.muted=s,this.events=n||[]}addEvent(e){let t=this.events[this.events.length-1];if(t&&e.time<t.time){let t=this.events.length;for(;t--&&this.events[t].time>e.time;);this.events.splice(t+1,0,e)}else this.events.push(e);return e}mute(){this.muted=!0}unmute(){this.muted=!1}cancel(){this.engine.cancel()}destroy(){this.engine.destroy()}},b=(e,t)=>t>>>8*e&255,M=[0,255,81,3,7,161,32],A=e=>{let t=127&e,i=[];for(;e>>=7;)t<<=8,t|=127&e|128;for(;;)if(i.push(255&t),128&t)t>>=8;else break;return i},O=(e,t,i,n)=>{let s,o,a,l,r=0,h=((e,t)=>{let i=[];if(t&&i.push(0,192,127&t),e){let t=[];for(let i=0;i<e.length;++i){let n=e.charCodeAt(i);n<128&&t.push(n)}return i.concat([0,255,3],A(t.length),t)}return i})(i,n),c=(a=[],l=e=>{let t=a.length;for(;t--&&a[t].timeMS>e.timeMS;);a.splice(t+1,0,e)},e.forEach(e=>{let t=e.instrumentEventOptions||{},i=e.time,n=o=y(t.noteDuration,o),a=n&&e.time+n,r=[{valMap:e=>64+63*e&127,data:{10:t.pan,92:t.tremoloDepth,93:t.tremoloSpeed}},{valMap:e=>127*e/2e4&127,data:{74:t.lowpassFreq,75:t.highpassFreq}},{valMap:e=>63*Math.min(18,Math.max(-18,e))/18+63&127,data:{71:t.lowpassResonance,76:t.highpassResonance}}],h=s=void 0===t.volume?y(s,127):127*t.volume&127,c=t.frequency,u=t.note||0,p=12+(c?Math.round(12*Math.log(c)/Math.LN2-48.37632):"string"==typeof u?N.noteStringToC0Distance(u):u)&127;r.forEach(e=>Object.keys(e.data).forEach(t=>{let n=e.data[t];void 0!==n&&l({timeMS:i,type:"CTRL_CHG",data:[176,parseInt(t,10),e.valMap(n)]})})),a&&(l({timeMS:i,type:"NON",data:[144,p,h]}),l({timeMS:a,type:"NOF",data:[128,p,h]}))}),a).reduce((e,t)=>{let i=A(t.timeMS-r);return r=t.timeMS,e.concat(i,t.data)},[]),u=[0,255,47,0],p=(t?M.length:0)+h.length+c.length+u.length;return[77,84,114,107,b(3,p),b(2,p),b(1,p),b(0,p)].concat(t?M:[],h,c,u)},C=function(e){let t,i=e.filter(e=>!!e.events.length),n=i.length,s=n>1;return new Uint8Array([77,84,104,100,0,0,0,6,0,+((t=s?n+1:n)>1),b(1,t),b(0,t),1,244].concat(s?O([],!0):[],i.reduce((e,t)=>{let i=t.engine;return e.concat(O(t.events,!s,i.midiTrackName,i.midiInstrument))},[])))},{isSafari:S,win:V,win:{document:I}}=n(),F=V.URL||V.webkitURL||V,D=class{constructor(e,t){this.chart=t,this.isPaused=!1,this.isPlaying=!1,this.channels=[],this.scheduledCallbacks=[],this.playTimestamp=0,this.resumeFromTime=0,this.options=e||{}}addChannel(e,t,i=!1,n){if("instrument"===e&&!t.scheduleEventAtTime||"speech"===e&&!t.sayAtTime)throw Error("Highcharts Sonification: Invalid channel engine.");let s=new k(e,t,i,n);return this.channels.push(s),s}play(e,t=!0,i=!0,n){let s,o;this.isPlaying?this.cancel():this.clearScheduledCallbacks(),this.onEndArgument=n,this.playTimestamp=Date.now(),this.resumeFromTime=0,this.isPaused=!1,this.isPlaying=!0;let a=this.options.skipThreshold||2,l=this.options.onPlay,r=this.options.showTooltip,h=this.options.showCrosshair,c=e?(o=(s=(this.playingChannels||this.channels).map(t=>(t.cancel(),{channel:t,filteredEvents:t.muted?[]:t.events.filter(e)}))).reduce((e,t)=>Math.min(e,t.filteredEvents.length?t.filteredEvents[0].time:1/0),1/0),s.map(e=>new k(e.channel.type,e.channel.engine,e.channel.showPlayMarker,e.filteredEvents.map(e=>d(e,{time:e.time-o})),e.channel.muted))):this.channels,p=e=>Object.keys(e.speechOptions||{}).concat(Object.keys(e.instrumentEventOptions||{})).join(),m=[];t&&(this.playingChannels=c),l&&l({chart:this.chart,timeline:this});let f=0;c.forEach(e=>{if(e.muted)return;let t=e.events.length,i=-1/0,n=-1/0,s="";f=Math.max(e.events[t-1]&&e.events[t-1].time||0,f);for(let o=0;o<t;++o){let l=e.events[o],c=p(l);if(c===s&&l.time-n<a)continue;s=c,n=l.time,"instrument"===e.type?e.engine.scheduleEventAtTime(l.time/1e3,l.instrumentEventOptions||{}):e.engine.sayAtTime(l.time,l.message||"",l.speechOptions||{});let d=l.relatedPoint,f=d&&d.series&&d.series.chart,y=l.callback||d&&(r||h)&&!1!==e.showPlayMarker&&(l.time-i>50||o===t-1);d&&m.push(d),y&&(this.scheduledCallbacks.push(setTimeout(()=>{if(l.callback&&l.callback(),d){if(h){let e=d.series;e&&e.xAxis&&e.xAxis.crosshair&&e.xAxis.drawCrosshair(void 0,d),e&&e.yAxis&&e.yAxis.crosshair&&e.yAxis.drawCrosshair(void 0,d)}r&&!(f&&f.hoverPoints&&f.hoverPoints.length>1&&u(f.hoverPoints,e=>e===d)&&d.onMouseOver)&&d.onMouseOver()}},l.time)),i=l.time)}});let y=this.options.onEnd,g=this.options.onStop;this.scheduledCallbacks.push(setTimeout(()=>{let e=this.chart,t={chart:e,timeline:this,pointsPlayed:m};this.isPlaying=!1,i&&this.resetPlayState(),g&&g(t),y&&y(t),n&&n(t),e&&(e.tooltip&&e.tooltip.hide(0),e.hoverSeries&&e.hoverSeries.onMouseOut(),e.axes.forEach(e=>e.hideCrosshair()))},f+250)),this.resumeFromTime=t?f:this.getLength()}pause(){return this.isPaused=!0,this.cancel(),this.resumeFromTime=Date.now()-this.playTimestamp-10,this.resumeFromTime}getCurrentTime(){return this.isPlaying?Date.now()-this.playTimestamp:this.resumeFromTime}getLength(){return this.channels.reduce((e,t)=>{let i=t.events[t.events.length-1];return i?Math.max(i.time,e):e},0)}resume(){if(this.playingChannels){let e=this.resumeFromTime-50;this.play(t=>t.time>e,!1,!1,this.onEndArgument),this.playTimestamp-=e}else this.play(void 0,!1,!1,this.onEndArgument)}anchorPlayMoment(e,t){this.isPlaying&&this.pause();let i=0;this.play((t,n,s)=>{let o=e(t,n,s);return o&&t.time>i&&(i=t.time),o},!1,!1,t),this.playingChannels=this.playingChannels||this.channels,this.isPaused=!0,this.isPlaying=!1,this.resumeFromTime=i}playAdjacent(e,t,i,n){this.isPlaying&&this.pause();let s=this.resumeFromTime,o=this.channels.reduce((t,i)=>{let o=n?i.events.filter(n):i.events,a=0,l=o.length,r=t;for(;a<l;){let t=a+l>>1,i=o[t].time,n=i-s;n>0?(e&&i<r&&(r=i),l=t):n<0?(!e&&i>r&&(r=i),a=t+1):e?a=t+1:l=t}return r},e?1/0:-1/0);if(o===1/0||o===-1/0){i&&i({chart:this.chart,timeline:this,attemptedNext:e});return}this.anchorPlayMoment((t,i,a)=>{let l=e?t.time>s&&t.time<=o+.02:t.time<s&&t.time>=o-.02;return n?l&&n(t,i,a):l},t)}playClosestToPropValue(e,t,i,n,s){let o=(e,t,i)=>!!(s?s(e,t,i)&&e.relatedPoint:e.relatedPoint),a=1/0,l=null;(this.playingChannels||this.channels).forEach(i=>{let n=i.events,s=n.length;for(;s--;){if(!o(n[s],s,n))continue;let i=n[s].relatedPoint[e],h=r(i)&&Math.abs(t-i);!1!==h&&h<a&&(a=h,l=n[s])}}),l?(this.play(e=>!!(l&&e.time<l.time+1&&e.time>l.time-1&&e.relatedPoint===l.relatedPoint),!1,!1,i),this.playingChannels=this.playingChannels||this.channels,this.isPaused=!0,this.isPlaying=!1,this.resumeFromTime=l.time):n&&n({chart:this.chart,timeline:this})}getEventsForPoint(e){return this.channels.reduce((t,i)=>{let n=i.events.filter(t=>t.relatedPoint===e);return t.concat(n)},[])}playSegment(e,t){let i={first:1/0,last:-1/0};if(this.channels.forEach(e=>{e.events.length&&(i.first=Math.min(e.events[0].time,i.first),i.last=Math.max(e.events[e.events.length-1].time,i.last))}),i.first<1/0){let n=(i.last-i.first)/100,s=i.first+e*n,o=s+n;if(!this.channels.some(e=>{let t=e.events,i=0,n=t.length;for(;i<n;){let e=i+n>>1,a=t[e].time;if(a<s)i=e+1;else{if(!(a>o))return!0;n=e}}return!1}))return;this.play(e=>e.time>=s&&e.time<=o,!1,!1,t),this.playingChannels=this.playingChannels||this.channels,this.isPaused=!0,this.isPlaying=!1,this.resumeFromTime=o}}getLastPlayedPoint(e){let t=this.getCurrentTime(),i=this.playingChannels||this.channels,n=1/0,s=null;return i.forEach(i=>{let o=i.events.filter((i,n,s)=>!!(i.relatedPoint&&i.time<=t&&(!e||e(i,n,s)))),a=o[o.length-1];if(a){let e=Math.abs(a.time-t);e<n&&(n=e,s=a.relatedPoint)}}),s}reset(){this.isPlaying&&this.cancel(),this.resetPlayState()}cancel(){let e=this.options.onStop;e&&e({chart:this.chart,timeline:this}),this.isPlaying=!1,this.channels.forEach(e=>e.cancel()),this.playingChannels&&this.playingChannels!==this.channels&&this.playingChannels.forEach(e=>e.cancel()),this.clearScheduledCallbacks(),this.resumeFromTime=0}destroy(){this.cancel(),this.playingChannels&&this.playingChannels!==this.channels&&this.playingChannels.forEach(e=>e.destroy()),this.channels.forEach(e=>e.destroy())}setMasterVolume(e){this.channels.forEach(t=>t.engine.setMasterVolume(e))}getMIDIData(){return C(this.channels.filter(e=>"instrument"===e.type))}downloadMIDI(e){let t=this.getMIDIData(),i=(e||this.chart&&this.chart.options.title&&this.chart.options.title.text||"chart")+".mid",n=new Blob([t],{type:"application/octet-stream"}),s=window.URL.createObjectURL(n);!function(e,t){let i=V.navigator,n=I.createElement("a");if("string"!=typeof e&&!(e instanceof String)&&i.msSaveOrOpenBlob)return i.msSaveOrOpenBlob(e,t);if(e=""+e,i.userAgent.length>1e3)throw Error("Input too long");let s=/Edge\/\d+/.test(i.userAgent);if((S&&"string"==typeof e&&0===e.indexOf("data:application/pdf")||s||e.length>2e6)&&!(e=function(e){let t=e.replace(/filename=.*;/,"").match(/data:([^;]*)(;base64)?,([A-Z+\d\/]+)/i);if(t&&t.length>3&&V.atob&&V.ArrayBuffer&&V.Uint8Array&&V.Blob&&F.createObjectURL){let e=V.atob(t[3]),i=new V.ArrayBuffer(e.length),n=new V.Uint8Array(i);for(let t=0;t<n.length;++t)n[t]=e.charCodeAt(t);return F.createObjectURL(new V.Blob([n],{type:t[1]}))}}(e)||""))throw Error("Failed to convert to blob");if(void 0!==n.download)n.href=e,n.download=t,I.body.appendChild(n),n.click(),I.body.removeChild(n);else try{if(!V.open(e,"chart"))throw Error("Failed to open window")}catch{V.location.href=e}}(s,i),window.URL.revokeObjectURL(s)}resetPlayState(){delete this.playingChannels,delete this.onEndArgument,this.playTimestamp=this.resumeFromTime=0,this.isPaused=!1}clearScheduledCallbacks(){this.scheduledCallbacks.forEach(clearTimeout),this.scheduledCallbacks=[]}},Q=e.default.Templating,{format:j}=t.n(Q)();function R(e,t){let i;if(t){if("number"==typeof(i=e[t]))return i;i=c(t,e)}return"number"==typeof i?i:void 0}function B(e,t,i,n,s){let o=t.max-t.min;if(o<=0)return i.min;let a=i.max-i.min,r=a*(e-t.min)/o;if(s){let i=t.min>0?e=>Math.log(e)/Math.LOG10E:e=>{let t=Math.abs(e);t<10&&(t+=(10-t)/10);let i=Math.log(t)/Math.LN10;return e<0?-i:i},n=i(t.min);r=a*(i(e)-n)/(i(t.max)-n)}return l(n?i.max-r:i.min+r,i.min,i.max)}function G(e,t,i,n,s,o,a){return y(function(e,t,i,n,s,o){if("number"==typeof s)return s;if("function"==typeof s)return s(h({time:0},e));let a=s,l=n.mapFunction,u=n.min,p=n.max,m=n.within,d;if("object"==typeof s&&(a=s.mapTo,l=s.mapFunction||l,u=y(s.min,u),p=y(s.max,p),m=s.within||n.within,d=s.scale),!a)return null;let f="-"===a.charAt(0);f&&(a=a.slice(1));let g=e.value,v="value"===a&&void 0!==g&&o;if(!v){let t=s.value;if(void 0!==t)g=t;else{if(!e.point)return null;g=e.point[a]}void 0===g&&(g=c(a,e.point))}if("number"!=typeof g||null===g)return null;let q=null;if(e.point)if("xAxis"===m||"yAxis"===m){let t=e.point.series[m];t&&r(t.dataMin)&&r(t.dataMax)&&(q={min:t.dataMin,max:t.dataMax})}else("series"===m||i)&&e.point.series&&(q=t.seriesExtremes[e.point.series.index][v?o:a]);if(q||(q=t.globalExtremes[v?o:a]),d){let e=[],t=Math.floor(u/12),i=Math.ceil(p/12)+1,n=d.length;for(let s=t;s<i;++s)for(let t=0;t<n;++t){let i=12*s+d[t];i>=u&&i<=p&&e.push(i)}let s=B(g,q,{min:0,max:e.length-1},f,"logarithmic"===l);return e[Math.round(s)]}return B(g,q,{min:u,max:p},f,"logarithmic"===l)}(e,t,i,h({min:0,max:1,mapTo:"y",mapFunction:"linear",within:"chart"},o||{}),n,a),s)}function U(e,t,i,n){let s=n.mapping||{},o="speech"===n.type?new P({language:n.language,name:n.preferredVoice}):new N(t,i,{capabilities:{pan:!!s.pan,tremolo:!!s.tremolo,filters:!!(s.highpass||s.lowpass)},synthPatch:n.instrument,midiTrackName:n.midiName});return e.addChannel(n.type||"instrument",o,y(n.showPlayMarker,!0))}function L(e,t,i,n,s,o){let a=(t,s,a,l)=>G(e,n,!1,(l||i)[t],s,a,o),l=[],r={noteDuration:a("noteDuration",200,{min:40,max:1e3}),pan:a("pan",0,{min:-1,max:1}),volume:a("volume",1,{min:.1,max:1})};i.frequency&&(r.frequency=a("frequency",440,{min:50,max:6e3})),i.lowpass&&(r.lowpassFreq=a("frequency",2e4,{min:0,max:2e4},i.lowpass),r.lowpassResonance=a("resonance",0,{min:-6,max:12},i.lowpass)),i.highpass&&(r.highpassFreq=a("frequency",2e4,{min:0,max:2e4},i.highpass),r.highpassResonance=a("resonance",0,{min:-6,max:12},i.highpass)),i.tremolo&&(r.tremoloDepth=a("depth",0,{min:0,max:.8},i.tremolo),r.tremoloSpeed=a("speed",0,{min:0,max:.8},i.tremolo));let c=a("gapBetweenNotes",150,{min:50,max:1e3}),u=a("playDelay",0,{max:200}),p=(i,a=0)=>{let p=i;if(i.mapTo)"string"==typeof i.min&&(p.min=N.noteStringToC0Distance(i.min)),"string"==typeof i.max&&(p.max=N.noteStringToC0Distance(i.max));else"string"==typeof i&&/^([a-g][#b]?)[0-8]$/i.test(i)&&(p=N.noteStringToC0Distance(i));r.note=G(e,n,!1,p,-1,{min:0,max:107},o),r.note>-1&&(s&&(r.note=Math.round(r.note)),l.push(t.addEvent({time:e.time+u+c*a,relatedPoint:e.point,instrumentEventOptions:void 0!==a?h({},r):r})))};return i.pitch&&i.pitch.constructor===Array?i.pitch.forEach(p):i.pitch?p(i.pitch):i.frequency&&l.push(t.addEvent({time:e.time+u,relatedPoint:e.point,instrumentEventOptions:r})),l}function W(e,t,i,n,s){var o;let a=(t,o,a)=>G(e,n,!1,i[t],o,a,s),l=a("playDelay",0,{max:200}),r=a("pitch",1,{min:.3,max:2}),h=a("rate",1,{min:.4,max:4}),c=a("volume",1,{min:.1}),u=j("function"==typeof(o=i.text)?o(e):o,e,e.point&&e.point.series.chart);if(u)return t.addEvent({time:e.time+l,relatedPoint:e.point,speechOptions:{pitch:r,rate:h,volume:c},message:u})}function _(e,t,i){if("function"==typeof t)return t(e);if("object"==typeof t){let n=t.prop,s=y(e.value,e.point&&R(e.point,n));if("number"!=typeof s)return!1;let o=!0,a=t.crossingUp,l=t.crossingDown,r="number"==typeof i;o=a&&l?r&&(i<a&&s>=a||i>l&&s<=l):(void 0===a||r&&i<a&&s>=a)&&(void 0===l||r&&i>l&&s<=l);let h=y(t.max,1/0),c=y(t.min,-1/0);return s<=h&&s>=c&&o}return!0}let H=function(e,t,i){let n,s,o,a,l,r,u,p,m,f,g,v,q=i.options.sonification||{},T=q.defaultInstrumentOptions,w=q.defaultSpeechOptions,x=d({enabled:!0,groupTimespan:15,algorithm:"minmax",prop:"y"},q.pointGrouping),E=q.globalTracks||[],N=q.globalContextTracks||[],P="sequential"===q.order,k=Math.max(50,q.duration-300),b=q.afterSeriesWait,M=q.events||{},A=(s=((n=i.options.sonification||{}).defaultInstrumentOptions||{}).mapping||{time:"x",pitch:"y"},o=n.defaultSpeechOptions&&n.defaultSpeechOptions.mapping||{},a=[],l={},r=(e,t)=>{null!==t?(a[t]=a[t]||{},a[t][e]=!0):l[e]=!0},u={},p={},m=(e,t,i)=>{let n=e=>"-"===e.charAt(0)?e.slice(1):e;if("string"==typeof t&&"text"!==e){if("pitch"===e&&/^([a-g][#b]?)[0-8]$/i.test(t))return;"time"===e&&(p[t]=!0,r(t,i)),u[n(t)]=!0;return}if(t&&t.mapTo&&"string"==typeof t.mapTo){let s=n(t.mapTo);"time"===e&&r(s,i),("time"===e||"series"===t.within)&&(p[s]=!0),u[s]=!0;return}["tremolo","lowpass","highpass"].indexOf(e)>-1&&"object"==typeof t&&Object.keys(t).forEach(e=>m(e,t[e],i))},f=(e,t)=>{Object.keys(e).forEach(i=>m(i,e[i],t))},g=e=>e.forEach(e=>{u[e.valueProp||"x"]=p[e.valueProp||"x"]=!0}),f(s,null),f(o,null),g(n.globalContextTracks||[]),v=Object.keys(l).length,i.series.forEach(e=>{let t=e.options.sonification;if(e.visible&&!(t&&!1===t.enabled)&&(v&&(a[e.index]=d(l)),t)){let i=(t.defaultInstrumentOptions||{}).mapping,n=(t.defaultSpeechOptions||{}).mapping;i&&f(i,e.index),n&&f(n,e.index),g(t.contextTracks||[]),(t.tracks||[]).concat(t.contextTracks||[]).forEach(t=>{t.mapping&&f(t.mapping,e.index)})}}),{seriesTimeProps:a,...function(e,t,i){let n=e.series,s=t.length,o=i.length,a=e=>e.reduce((e,t)=>(e[t]={min:1/0,max:-1/0},e),{}),l=(e,t,i)=>{let n=t[i];void 0===n&&(n=c(i,t)),"number"==typeof n&&(e[i].min=Math.min(e[i].min,n),e[i].max=Math.max(e[i].max,n))},r=a(t),h=n.length,u=Array(h);for(;h--;){let e=a(i),c=n[h].options;if(!n[h].visible||c&&c.sonification&&!1===c.sonification.enabled)continue;let p=n[h].points||[],m=p.length;for(;m--;){let n=s;for(;n--;)l(r,p[m],t[n]);for(n=o;n--;)l(e,p[m],i[n])}u[h]=e}return{globalExtremes:r,seriesExtremes:u}}(i,Object.keys(u),Object.keys(p))}),O=new D({onPlay:M.onPlay,onEnd:M.onEnd,onStop:M.onStop,showCrosshair:q.showCrosshair,showTooltip:q.showTooltip},i);i.sonification&&(i.sonification.propMetrics=A);let C=0;return i.series.forEach((i,n)=>{let s=i.options.sonification||{};if(i.visible&&!1!==s.enabled){let o,a=P?function(e,t,i,n){let s,o,a=t-(e.chart.series.length-1)*n;if(i.seriesTimeProps.every(e=>{let t=Object.keys(e);return!(t.length>1)&&(s||(s=t[0]),s===t[0])})){let t=i.seriesExtremes[e.index][s];o=Math.round((t.max-t.min)/i.seriesExtremes.reduce((e,t)=>t[s]?e+t[s].max-t[s].min:e,0)*a)}else{let t=e.chart.series.reduce((e,t)=>e+t.points.length,0);o=Math.round((e.points||[]).length/t*a)}return Math.max(50,o)}(i,k,A,b):k,l=d(T,s.defaultInstrumentOptions),r=d(w,s.defaultSpeechOptions),c=d(x,s.pointGrouping),u=(s.tracks||[l]).concat(E),p=O.channels.length&&!P?s.contextTracks||[]:(s.contextTracks||[]).concat(N),m=[];u.forEach(n=>{let s=d({pointGrouping:c,midiName:n.midiName||i.name},"speech"===n.type?r:l,n),h=s.pointGrouping,u=s.activeWhen,p=e=>{"object"==typeof u&&u.prop&&(o=R(e,u.prop))},f=U(O,e,t,s),g=e=>m.push(...function(e,t,i,n){let s=[];if("speech"===i.type&&i.mapping){let o=W(e,t,i.mapping,n);o&&(s=[o])}else i.mapping&&(s=L(e,t,i.mapping,n,y(i.roundToMusicalNotes,!0)));return s}(e,f,s,A)),v=[],q=0,T=e=>{if(1===v.length)g({point:v[0].point,time:q+e/2});else{let t=function(e,t){let i=e.algorithm||"minmax",n=e=>t[e]?[t[e].point]:[];if("first"===i)return n(0);if("last"===i)return n(t.length-1);if("middle"===i)return n(t.length>>1);if("firstlast"===i)return n(0).concat(n(t.length-1));if("minmax"===i){let i,n,s,o,a=e.prop||"y";if(t.forEach(e=>{let t=R(e.point,a);void 0!==t&&((!i||t<s)&&(i=e,s=t),(!n||t>o)&&(n=e,o=t))}),i&&n)return i.point===n.point?[i.point]:i.time>n.time?[n.point,i.point]:[i.point,n.point]}return[]}(h,v),i=e/t.length;t.forEach((e,t)=>g({point:e,time:q+i/2+i*t}))}v=[]};(i.points||[]).forEach((e,t)=>{var n;let l=t===i.points.length-1,r=(n=C,G({point:e,time:0},A,P,s.mapping&&s.mapping.time||0,0,{min:0,max:a,mapTo:"x"})+n),c={point:e,time:r};if(!s.mapping||!_(c,u,o)){p(e),l&&v.length&&T(v[v.length-1].time-v[0].time);return}if(p(e),h.enabled){let e=r-q,t=h.groupTimespan,i=l&&e<=t?e:t;l||e>t?(e<=t&&v.push(c),T(i),q=Math.floor(r/t)*t,l&&e>t?g({point:c.point,time:q+i/2}):v=[c]):v.push(c)}else g(c)})});let f=m.reduce((e,t)=>t.time<e.time?t:e,{time:1/0}),g=m.reduce((e,t)=>t.time>e.time?t:e,{time:-1/0});f.callback=M.onSeriesStart?M.onSeriesStart.bind(null,{series:i,timeline:O}):void 0,g.callback=M.onSeriesEnd?M.onSeriesEnd.bind(null,{series:i,timeline:O}):void 0,p.forEach(i=>{let s="speech"===i.type?d(w,i):d(T,{mapping:{pitch:{mapTo:"value"}}},i),l=U(O,e,t,s);o=void 0;let{timeInterval:r,valueInterval:c}=s,u=s.valueProp||"x",p=s.activeWhen,m=A.seriesExtremes[n][u],f=(e,t)=>{if(!s.mapping||!_({time:e,value:t},"object"==typeof p?h({prop:u},p):p,o)){o=t;return}o=t,"speech"===s.type?W({time:e,value:t},l,s.mapping,A,u):L({time:e,value:t},l,s.mapping,A,y(s.roundToMusicalNotes,!0),u)};if(r){let e=0;for(;e<=a;){let t=B(e,{min:0,max:a},m);f(e+C,t),e+=r}}if(c){let e=m.min;for(;e<=m.max;)f(B(e,m,{min:0,max:a},!1,"logarithmic"===s.valueMapFunction)+C,e),e+=c}}),P&&(C+=a+b)}}),O},{defaultOptions:K,getOptions:$}=n(),{doc:Z,win:z}=n();class J{constructor(e){this.retryContextCounter=0,this.lastUpdate=0,this.chart=e,this.unbindKeydown=a(Z,"keydown",function(t){e&&e.sonification&&("Esc"===t.key||"Escape"===t.key)&&e.sonification.cancel()});try{this.audioContext=new z.AudioContext,this.audioContext.suspend(),this.audioDestination=this.audioContext.destination}catch{}}setAudioDestination(e){this.audioDestination=e,this.update()}isPlaying(){return!!this.timeline&&this.timeline.isPlaying}playSegment(e,t){this.ready(this.playSegment.bind(this,e,t))&&this.timeline&&this.timeline.playSegment(e,t)}playAdjacent(e,t,i){if(this.ready(this.playAdjacent.bind(this,e,t,i))&&this.timeline){let n=this.chart.options.sonification,s=n&&n.events&&n.events.onBoundaryHit;s||this.initBoundaryInstrument(),this.timeline.playAdjacent(e,t,s||(()=>{this.defaultBoundaryHit()}),i)}}playAdjacentSeries(e,t="x",i){let n=this.getLastPlayedPoint();if(n){let s=n.series.index+(e?1:-1);return this.playClosestToProp(t,n[t],e=>!!e.relatedPoint&&e.relatedPoint.series.index===s,i),this.chart.series[s]||null}return null}playClosestToProp(e,t,i,n){if(this.ready(this.playClosestToProp.bind(this,e,t,i,n))&&this.timeline){let s=this.chart.options.sonification,o=s&&s.events&&s.events.onBoundaryHit;o||this.initBoundaryInstrument(),this.timeline.playClosestToPropValue(e,t,n,o||(()=>this.defaultBoundaryHit()),i)}}getLastPlayedPoint(){return this.timeline?this.timeline.getLastPlayedPoint():null}playNote(e,t,i=0){if(!this.ready(this.playNote.bind(this,e,t)))return;let n=t.noteDuration=t.noteDuration||500,s=new N(this.audioContext,this.audioDestination,{synthPatch:e,capabilities:{filters:!0,tremolo:!0,pan:!0}});s.scheduleEventAtTime(i/1e3,t),setTimeout(()=>s&&s.destroy(),i+n+500)}speak(e,t,i=0){new P(d({language:"en-US",rate:1.5,volume:.4},t||{})).sayAtTime(i,e)}cancel(){this.timeline&&this.timeline.cancel(),function(e,t,i,o){if(i=i||{},s?.createEvent&&(e.dispatchEvent||e.fireEvent&&e!==n())){let n=s.createEvent("Events");n.initEvent(t,!0,!0),i=h(n,i),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent(t,i)}else if(e.hcEvents){i.target||h(i,{preventDefault:function(){i.defaultPrevented=!0},target:e,type:t});let n=[],s=e,o=!1;for(;s.hcEvents;)Object.hasOwnProperty.call(s,"hcEvents")&&s.hcEvents[t]&&(n.length&&(o=!0),n.unshift.apply(n,s.hcEvents[t])),s=Object.getPrototypeOf(s);o&&n.sort((e,t)=>e.order-t.order),n.forEach(t=>{!1===t.fn.call(e,i,e)&&i.preventDefault()})}}(this,"cancel")}downloadMIDI(){this.ready(this.downloadMIDI.bind(this))&&this.timeline&&(this.timeline.reset(),this.timeline.downloadMIDI())}sonifyChart(e,t){this.ready(this.sonifyChart.bind(this,e,t))&&this.timeline&&(this.timeline.reset(),this.beforePlay(),this.timeline.play(void 0,void 0,e,t))}sonifySeries(e,t,i){this.ready(this.sonifySeries.bind(this,e,t,i))&&this.timeline&&(this.timeline.reset(),this.beforePlay(),this.timeline.play(t=>!!t.relatedPoint&&t.relatedPoint.series===e,void 0,t,i))}sonifyPoint(e,t){this.ready(this.sonifyPoint.bind(this,e,t))&&this.timeline&&(this.timeline.reset(),this.beforePlay(),this.timeline.anchorPlayMoment(t=>t.relatedPoint===e,t))}setMasterVolume(e){this.timeline&&this.timeline.setMasterVolume(e)}destroy(){this.unbindKeydown(),this.timeline&&(this.timeline.destroy(),delete this.timeline),this.boundaryInstrument&&this.boundaryInstrument.stop(),this.audioContext&&(this.audioContext.close(),delete this.audioContext)}update(){let e=this.chart.options&&this.chart.options.sonification;if(!this.ready(this.update.bind(this))||!e)return;let t=Date.now(),i=e.updateInterval;if(t-this.lastUpdate<i&&!this.forceReady){var n;r(n=this.scheduledUpdate)&&clearTimeout(n),this.scheduledUpdate=setTimeout(this.update.bind(this),i/2);return}let s=e.events||{};if(s.beforeUpdate&&s.beforeUpdate({chart:this.chart,timeline:this.timeline}),this.lastUpdate=t,this.timeline&&this.timeline.des