/* Highcharts JS v8.1.2 (2020-06-16) Sonification module (c) 2012-2019 ystein Moseng License: www.highcharts.com/license */ (function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/sonification",["highcharts"],function(l){b(l);b.Highcharts=l;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function l(d,b,f,n){d.hasOwnProperty(b)||(d[b]=n.apply(null,f))}b=b?b._modules:{};l(b,"modules/sonification/Instrument.js",[b["parts/Globals.js"],b["parts/Utilities.js"]],function(d,b){function f(c){this.init(c)} var n=b.error,m=b.merge,k=b.pick,x=b.uniqueKey,p={type:"oscillator",playCallbackInterval:20,oscillator:{waveformShape:"sine"}};f.prototype.init=function(c){this.initAudioContext()?(this.options=m(p,c),this.id=this.options.id=c&&c.id||x(),c=d.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=[]):n(29)};f.prototype.copy=function(c){return new f(m(this.options,{id:null},c))};f.prototype.initAudioContext=function(){var c=d.win.AudioContext||d.win.webkitAudioContext,a=!!d.audioContext;return c?(d.audioContext=d.audioContext||new c,!a&&d.audioContext&&"running"===d.audioContext.state&&d.audioContext.suspend(),!!(d.audioContext&&d.audioContext.createOscillator&&d.audioContext.createGain)):!1};f.prototype.initOscillator= function(c){this.oscillator=d.audioContext.createOscillator();this.oscillator.type=c.waveformShape;this.oscillator.connect(this.gainNode);this.oscillatorStarted=!1};f.prototype.setPan=function(c){this.panNode&&this.panNode.pan.setValueAtTime(c,d.audioContext.currentTime)};f.prototype.setGain=function(c,a){this.gainNode&&(1.2b?e:a},Infinity):c};f.prototype.clearPlayCallbackTimers= function(){this.playCallbackTimers.forEach(function(c){clearInterval(c)});this.playCallbackTimers=[]};f.prototype.setFrequency=function(c,a){a=a||{};c=this.getValidFrequency(c,a.min,a.max);"oscillator"===this.options.type&&this.oscillatorPlay(c)};f.prototype.oscillatorPlay=function(c){this.oscillatorStarted||(this.oscillator.start(),this.oscillatorStarted=!0);this.oscillator.frequency.setValueAtTime(c,d.audioContext.currentTime)};f.prototype.preparePlay=function(){this.setGain(.001);"suspended"=== d.audioContext.state&&d.audioContext.resume();this.oscillator&&!this.oscillatorStarted&&(this.oscillator.start(),this.oscillatorStarted=!0)};f.prototype.play=function(c){var a=this,e=c.duration||0,h=function(e,h,b){var d=c.duration,f=0,k=a.options.playCallbackInterval;if("function"===typeof e){var m=setInterval(function(){f++;var c=f*k/d;if(1<=c)a[h](e(1),b),clearInterval(m);else a[h](e(c),b)},k);a.playCallbackTimers.push(m)}else a[h](e,b)};if(a.id)if("suspended"===d.audioContext.state||this.oscillator&& !this.oscillatorStarted)a.preparePlay(),setTimeout(function(){a.play(c)},10);else{a.playCallbackTimers.length&&a.clearPlayCallbackTimers();a.cancelGainRamp();a.stopOscillatorTimeout&&(clearTimeout(a.stopOscillatorTimeout),delete a.stopOscillatorTimeout);a.stopTimeout&&(clearTimeout(a.stopTimeout),delete a.stopTimeout,a.stopCallback&&(a._play=a.play,a.play=function(){},a.stopCallback("cancelled"),a.play=a._play));var b=e=c.max||f.push(new b.sonification.TimelineEvent({time:c.max}));f.length&&a.addTimelineEvents(f)})}function z(a){return a.reduce(function(a,b){return a+u(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 r(c,e){var d=Math.max(e-t(c),0),f=z(c);return c.reduce(function(c,e){e=u(e).reduce(function(c,e){e instanceof b.sonification.TimelinePath?c.push(e):e.series&&(e.seriesOptions.duration=e.seriesOptions.duration||n.virtualAxisTranslate(e.seriesOptions.timeExtremes.max-e.seriesOptions.timeExtremes.min,{min:0,max:f},{min:0,max:d}),c.push(a(e.series,e.seriesOptions)));return c},[]);c.push(e);return c},[])}"";var A=f.find,B=f.isArray, w=f.merge,y=f.pick,u=f.splat;return{chartSonify:function(a){var c=w(this.options.sonification,a);this.sonification.timeline&&this.sonification.timeline.pause();this.sonification.duration=c.duration;var d=l(this,c.instruments,c.dataExtremes);a=h(c.order,this,function(a){return e(a,d,c)});a=q(a,c.afterSeriesWait||0);a=r(a,c.duration);a.forEach(function(a){v(a)});this.sonification.timeline=new b.sonification.Timeline({paths:a,onEnd:c.onEnd});this.sonification.timeline.play()},seriesSonify:function(c){var e= a(this,c),d=this.chart.sonification;d.timeline&&d.timeline.pause();d.duration=c.duration;d.timeline=new b.sonification.Timeline({paths:[e]});d.timeline.play()},pause:function(a){this.sonification.timeline?this.sonification.timeline.pause(y(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 g})}return[]},setCursor:function(a){var b=this.sonification.timeline;b&&u(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()}}});l(b,"modules/sonification/Timeline.js",[b["parts/Globals.js"],b["parts/Utilities.js"],b["modules/sonification/utilities.js"]],function(b,g,f){function d(a){this.init(a||{})}function m(a){this.init(a)}function k(a){this.init(a||{})}var l=g.merge,p=g.splat,c=g.uniqueKey;d.prototype.init=function(a){this.options=a;this.time=a.time||0;this.id=this.options.id=a.id||c()};d.prototype.play=function(a){var b=this.options.eventObject,c=this.options.onEnd,d=a&& a.onEnd,f=this.options.playOptions&&this.options.playOptions.onEnd;a=l(this.options.playOptions,a);b&&b.sonify?(a.onEnd=c||d||f?function(){var a=arguments;[c,d,f].forEach(function(b){b&&b.apply(this,a)})}:void 0,b.sonify(a)):(d&&d(),c&&c())};d.prototype.cancel=function(a){this.options.eventObject.cancelSonify(a)};m.prototype.init=function(a){this.options=a;this.id=this.options.id=a.id||c();this.cursor=0;this.eventsPlaying={};this.events=a.silentWait?[new d({time:0}),new d({time:a.silentWait})]:this.options.events; this.sortEvents();this.updateEventIdMap();this.signalHandler=new f.SignalHandler(["playOnEnd","masterOnEnd","onStart","onEventStart","onEventEnd"]);this.signalHandler.registerSignalCallbacks(l(a,{masterOnEnd:a.onEnd}))};m.prototype.sortEvents=function(){this.events=this.events.sort(function(a,b){return a.time-b.time})};m.prototype.updateEventIdMap=function(){this.eventIdMap=this.events.reduce(function(a,b,c){a[b.id]=c;return a},{})};m.prototype.addTimelineEvents=function(a){this.events=this.events.concat(a); this.sortEvents();this.updateEventIdMap()};m.prototype.getCursor=function(){return this.events[this.cursor]};m.prototype.setCursor=function(a){a=this.eventIdMap[a];return"undefined"!==typeof a?(this.cursor=a,!0):!1};m.prototype.play=function(a){this.pause();this.signalHandler.emitSignal("onStart");this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(1)};m.prototype.rewind=function(a){this.pause();this.signalHandler.emitSignal("onStart"); this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(-1)};m.prototype.resetCursor=function(){this.cursor=0};m.prototype.resetCursorEnd=function(){this.cursor=this.events.length-1};m.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={}};m.prototype.playEvents=function(a){var b=this,c=b.events[this.cursor], d=b.events[this.cursor+a],f=function(a){b.signalHandler.emitSignal("masterOnEnd",a);b.signalHandler.emitSignal("playOnEnd",a)};c.timelinePath=b;if(!1===b.signalHandler.emitSignal("onEventStart",c))f({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||f(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)}};k.prototype.init=function(a){this.options=a;this.cursor=0;this.paths=a.paths;this.pathsPlaying={};this.signalHandler=new f.SignalHandler(["playOnEnd","masterOnEnd","onPathStart","onPathEnd"]);this.signalHandler.registerSignalCallbacks(l(a,{masterOnEnd:a.onEnd}))};k.prototype.play=function(a){this.pause();this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(1)};k.prototype.rewind=function(a){this.pause(); this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(-1)};k.prototype.playPaths=function(a){var c=p(this.paths[this.cursor]),d=this.paths[this.cursor+a],f=this,g=this.signalHandler,k=0,m=function(b){g.emitSignal("onPathStart",b);f.pathsPlaying[b.id]=b;b[0=c.length&&(d&&!e?(f.cursor+=a,p(d).forEach(function(b){b[0< a?"resetCursor":"resetCursorEnd"]()}),f.playPaths(a)):(g.emitSignal("playOnEnd",h),g.emitSignal("masterOnEnd",h)))})};c.forEach(function(a){a&&(a.timeline=f,setTimeout(function(){m(a)},b.sonification.fadeOutDuration))})};k.prototype.pause=function(a){var b=this;Object.keys(b.pathsPlaying).forEach(function(c){b.pathsPlaying[c]&&b.pathsPlaying[c].pause(a)});b.pathsPlaying={}};k.prototype.resetCursor=function(){this.paths.forEach(function(a){p(a).forEach(function(a){a.resetCursor()})});this.cursor=0}; k.prototype.resetCursorEnd=function(){this.paths.forEach(function(a){p(a).forEach(function(a){a.resetCursorEnd()})});this.cursor=this.paths.length-1};k.prototype.setCursor=function(a){return this.paths.some(function(b){return p(b).some(function(b){return b.setCursor(a)})})};k.prototype.getCursor=function(){return this.getCurrentPlayingPaths().reduce(function(a,b){a[b.id]=b.getCursor();return a},{})};k.prototype.atStart=function(){return!this.getCurrentPlayingPaths().some(function(a){return a.cursor})}; k.prototype.getCurrentPlayingPaths=function(){return p(this.paths[this.cursor])};return{TimelineEvent:d,TimelinePath:m,Timeline:k}});l(b,"modules/sonification/options.js",[],function(){return{sonification:{enabled:!1,duration:2E3,afterSeriesWait:1E3,order:"sequential",pointPlayTime:"x",instruments:[{instrument:"sineMusical",instrumentMapping:{duration:400,frequency:"y",volume:.7},instrumentOptions:{minFrequency:392,maxFrequency:1046}}]}}});l(b,"modules/sonification/sonification.js",[b["parts/Globals.js"], b["parts/Options.js"],b["parts/Point.js"],b["parts/Utilities.js"],b["modules/sonification/Instrument.js"],b["modules/sonification/instrumentDefinitions.js"],b["modules/sonification/Earcon.js"],b["modules/sonification/pointSonify.js"],b["modules/sonification/chartSonify.js"],b["modules/sonification/utilities.js"],b["modules/sonification/Timeline.js"],b["modules/sonification/options.js"]],function(b,g,f,l,m,k,x,p,c,a,e,h){g=g.defaultOptions;var d=l.addEvent,n=l.extend,v=l.merge;b.sonification={fadeOutDuration:20, utilities:a,Instrument:m,instruments:k,Earcon:x,TimelineEvent:e.TimelineEvent,TimelinePath:e.TimelinePath,Timeline:e.Timeline};v(!0,g,h);f.prototype.sonify=p.pointSonify;f.prototype.cancelSonify=p.pointCancelSonify;b.Series.prototype.sonify=c.seriesSonify;n(b.Chart.prototype,{sonify:c.chartSonify,pauseSonify:c.pause,resumeSonify:c.resume,rewindSonify:c.rewind,cancelSonify:c.cancel,getCurrentSonifyPoints:c.getCurrentPoints,setSonifyCursor:c.setCursor,resetSonifyCursor:c.resetCursor,resetSonifyCursorEnd:c.resetCursorEnd}); d(b.Chart,"init",function(){this.sonification={}});d(b.Chart,"update",function(a){(a=a.options.sonification)&&v(!0,this.options.sonification,a)})});l(b,"masters/modules/sonification.src.js",[],function(){})}); //# sourceMappingURL=sonification.js.map