/* Highcharts JS v8.0.0 (2019-12-10) Sonification module (c) 2012-2019 ystein Moseng License: www.highcharts.com/license */ (function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/sonification",["highcharts"],function(m){d(m);d.Highcharts=m;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function m(e,d,g,h){e.hasOwnProperty(d)||(e[d]=h.apply(null,g))}d=d?d._modules:{};m(d,"modules/sonification/Instrument.js",[d["parts/Globals.js"],d["parts/Utilities.js"]],function(e,d){function g(c){this.init(c)} var h=d.pick,k={type:"oscillator",playCallbackInterval:20,oscillator:{waveformShape:"sine"}};g.prototype.init=function(c){this.initAudioContext()?(this.options=e.merge(k,c),this.id=this.options.id=c&&c.id||e.uniqueKey(),c=e.audioContext,this.gainNode=c.createGain(),this.setGain(0),(this.panNode=c.createStereoPanner&&c.createStereoPanner())?(this.setPan(0),this.gainNode.connect(this.panNode),this.panNode.connect(c.destination)):this.gainNode.connect(c.destination),"oscillator"===this.options.type&& this.initOscillator(this.options.oscillator),this.playCallbackTimers=[]):e.error(29)};g.prototype.copy=function(c){return new g(e.merge(this.options,{id:null},c))};g.prototype.initAudioContext=function(){var c=e.win.AudioContext||e.win.webkitAudioContext,b=!!e.audioContext;return c?(e.audioContext=e.audioContext||new c,!b&&e.audioContext&&"running"===e.audioContext.state&&e.audioContext.suspend(),!!(e.audioContext&&e.audioContext.createOscillator&&e.audioContext.createGain)):!1};g.prototype.initOscillator= function(c){this.oscillator=e.audioContext.createOscillator();this.oscillator.type=c.waveformShape;this.oscillator.connect(this.gainNode);this.oscillatorStarted=!1};g.prototype.setPan=function(c){this.panNode&&this.panNode.pan.setValueAtTime(c,e.audioContext.currentTime)};g.prototype.setGain=function(c,b){this.gainNode&&(1.2d?a:b},Infinity):c};g.prototype.clearPlayCallbackTimers= function(){this.playCallbackTimers.forEach(function(c){clearInterval(c)});this.playCallbackTimers=[]};g.prototype.setFrequency=function(c,b){b=b||{};c=this.getValidFrequency(c,b.min,b.max);"oscillator"===this.options.type&&this.oscillatorPlay(c)};g.prototype.oscillatorPlay=function(c){this.oscillatorStarted||(this.oscillator.start(),this.oscillatorStarted=!0);this.oscillator.frequency.setValueAtTime(c,e.audioContext.currentTime)};g.prototype.preparePlay=function(){this.setGain(.001);"suspended"=== e.audioContext.state&&e.audioContext.resume();this.oscillator&&!this.oscillatorStarted&&(this.oscillator.start(),this.oscillatorStarted=!0)};g.prototype.play=function(c){var b=this,a=c.duration||0,f=function(a,f,e){var d=c.duration,k=0,g=b.options.playCallbackInterval;if("function"===typeof a){var p=setInterval(function(){k++;var c=k*g/d;if(1<=c)b[f](a(1),e),clearInterval(p);else b[f](a(c),e)},g);b.playCallbackTimers.push(p)}else b[f](a,e)};if(b.id)if("suspended"===e.audioContext.state||this.oscillator&& !this.oscillatorStarted)b.preparePlay(),setTimeout(function(){b.play(c)},10);else{b.playCallbackTimers.length&&b.clearPlayCallbackTimers();b.cancelGainRamp();b.stopOscillatorTimeout&&(clearTimeout(b.stopOscillatorTimeout),delete b.stopOscillatorTimeout);b.stopTimeout&&(clearTimeout(b.stopTimeout),delete b.stopTimeout,b.stopCallback&&(b._play=b.play,b.play=function(){},b.stopCallback("cancelled"),b.play=b._play));var d=a=b.max||d.push(new e.sonification.TimelineEvent({time:b.max}));d.length&&a.addTimelineEvents(d)})}function w(a){return a.reduce(function(a,b){return a+q(b).reduce(function(a,b){return(b=b.series&&b.seriesOptions&&b.seriesOptions.timeExtremes)?Math.max(a,b.max-b.min):a},0)},0)}function x(a,b){var c= Math.max(b-m(a),0),d=w(a);return a.reduce(function(a,b){b=q(b).reduce(function(a,b){b instanceof e.sonification.TimelinePath?a.push(b):b.series&&(b.seriesOptions.duration=b.seriesOptions.duration||g.virtualAxisTranslate(b.seriesOptions.timeExtremes.max-b.seriesOptions.timeExtremes.min,{min:0,max:d},{min:0,max:c}),a.push(f(b.series,b.seriesOptions)));return a},[]);a.push(b);return a},[])}var u=d.isArray,r=d.pick,q=d.splat;return{chartSonify:function(a){this.sonification.timeline&&this.sonification.timeline.pause(); var b=c(this,a.instruments,a.dataExtremes),f=n(a.order,this,function(c){return l(c,b,a)});f=p(f,a.afterSeriesWait||0);f=x(f,a.duration);f.forEach(function(a){v(a)});this.sonification.timeline=new e.sonification.Timeline({paths:f,onEnd:a.onEnd});this.sonification.timeline.play()},seriesSonify:function(a){a=f(this,a);var b=this.chart.sonification;b.timeline&&b.timeline.pause();b.timeline=new e.sonification.Timeline({paths:[a]});b.timeline.play()},pause:function(a){this.sonification.timeline?this.sonification.timeline.pause(r(a, !0)):this.sonification.currentlyPlayingPoint&&this.sonification.currentlyPlayingPoint.cancelSonify(a)},resume:function(a){this.sonification.timeline&&this.sonification.timeline.play(a)},rewind:function(a){this.sonification.timeline&&this.sonification.timeline.rewind(a)},cancel:function(a){this.pauseSonify(a);this.resetSonifyCursor()},getCurrentPoints:function(){if(this.sonification.timeline){var a=this.sonification.timeline.getCursor();return Object.keys(a).map(function(b){return a[b].eventObject}).filter(function(a){return a instanceof e.Point})}return[]},setCursor:function(a){var b=this.sonification.timeline;b&&q(a).forEach(function(a){b.setCursor(a.id)})},resetCursor:function(){this.sonification.timeline&&this.sonification.timeline.resetCursor()},resetCursorEnd:function(){this.sonification.timeline&&this.sonification.timeline.resetCursorEnd()}}});m(d,"modules/sonification/Timeline.js",[d["parts/Globals.js"],d["parts/Utilities.js"],d["modules/sonification/utilities.js"]],function(e,d,g){function h(a){this.init(a||{})}function k(a){this.init(a)} function c(a){this.init(a||{})}var b=d.splat;h.prototype.init=function(a){this.options=a;this.time=a.time||0;this.id=this.options.id=a.id||e.uniqueKey()};h.prototype.play=function(a){var b=this.options.eventObject,c=this.options.onEnd,d=a&&a.onEnd,g=this.options.playOptions&&this.options.playOptions.onEnd;a=e.merge(this.options.playOptions,a);b&&b.sonify?(a.onEnd=c||d||g?function(){var a=arguments;[c,d,g].forEach(function(b){b&&b.apply(this,a)})}:void 0,b.sonify(a)):(d&&d(),c&&c())};h.prototype.cancel= function(a){this.options.eventObject.cancelSonify(a)};k.prototype.init=function(a){this.options=a;this.id=this.options.id=a.id||e.uniqueKey();this.cursor=0;this.eventsPlaying={};this.events=a.silentWait?[new h({time:0}),new h({time:a.silentWait})]:this.options.events;this.sortEvents();this.updateEventIdMap();this.signalHandler=new g.SignalHandler(["playOnEnd","masterOnEnd","onStart","onEventStart","onEventEnd"]);this.signalHandler.registerSignalCallbacks(e.merge(a,{masterOnEnd:a.onEnd}))};k.prototype.sortEvents= function(){this.events=this.events.sort(function(a,b){return a.time-b.time})};k.prototype.updateEventIdMap=function(){this.eventIdMap=this.events.reduce(function(a,b,c){a[b.id]=c;return a},{})};k.prototype.addTimelineEvents=function(a){this.events=this.events.concat(a);this.sortEvents();this.updateEventIdMap()};k.prototype.getCursor=function(){return this.events[this.cursor]};k.prototype.setCursor=function(a){a=this.eventIdMap[a];return"undefined"!==typeof a?(this.cursor=a,!0):!1};k.prototype.play= function(a){this.pause();this.signalHandler.emitSignal("onStart");this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(1)};k.prototype.rewind=function(a){this.pause();this.signalHandler.emitSignal("onStart");this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(-1)};k.prototype.resetCursor=function(){this.cursor=0};k.prototype.resetCursorEnd=function(){this.cursor= this.events.length-1};k.prototype.pause=function(a){var b=this;clearTimeout(b.nextScheduledPlay);Object.keys(b.eventsPlaying).forEach(function(c){b.eventsPlaying[c]&&b.eventsPlaying[c].cancel(a)});b.eventsPlaying={}};k.prototype.playEvents=function(a){var b=this,c=b.events[this.cursor],d=b.events[this.cursor+a],e=function(a){b.signalHandler.emitSignal("masterOnEnd",a);b.signalHandler.emitSignal("playOnEnd",a)};c.timelinePath=b;if(!1===b.signalHandler.emitSignal("onEventStart",c))e({event:c,cancelled:!0}); else if(b.eventsPlaying[c.id]=c,c.play({onEnd:function(a){a={event:c,cancelled:!!a};delete b.eventsPlaying[c.id];b.signalHandler.emitSignal("onEventEnd",a);d||e(a)}}),d){var g=Math.abs(d.time-c.time);1>g?(b.cursor+=a,b.playEvents(a)):this.nextScheduledPlay=setTimeout(function(){b.cursor+=a;b.playEvents(a)},g)}};c.prototype.init=function(a){this.options=a;this.cursor=0;this.paths=a.paths;this.pathsPlaying={};this.signalHandler=new g.SignalHandler(["playOnEnd","masterOnEnd","onPathStart","onPathEnd"]); this.signalHandler.registerSignalCallbacks(e.merge(a,{masterOnEnd:a.onEnd}))};c.prototype.play=function(a){this.pause();this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(1)};c.prototype.rewind=function(a){this.pause();this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(-1)};c.prototype.playPaths=function(a){var c=b(this.paths[this.cursor]),d=this.paths[this.cursor+ a],g=this,h=this.signalHandler,k=0,m=function(e){h.emitSignal("onPathStart",e);g.pathsPlaying[e.id]=e;e[0=c.length&&(d&&!f?(g.cursor+=a,b(d).forEach(function(b){b[0