120 lines
3.6 KiB
JavaScript
120 lines
3.6 KiB
JavaScript
/* *
|
|
*
|
|
* (c) 2009-2020 Øystein Moseng
|
|
*
|
|
* Sonification module for Highcharts
|
|
*
|
|
* License: www.highcharts.com/license
|
|
*
|
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
*
|
|
* */
|
|
'use strict';
|
|
import H from '../../parts/Globals.js';
|
|
import Point from '../../parts/Point.js';
|
|
import U from '../../parts/Utilities.js';
|
|
var addEvent = U.addEvent, extend = U.extend, merge = U.merge;
|
|
import Instrument from './Instrument.js';
|
|
import instruments from './instrumentDefinitions.js';
|
|
import Earcon from './Earcon.js';
|
|
import pointSonifyFunctions from './pointSonify.js';
|
|
import chartSonifyFunctions from './chartSonify.js';
|
|
import utilities from './utilities.js';
|
|
import TimelineClasses from './Timeline.js';
|
|
import sonificationOptions from './options.js';
|
|
// Expose on the Highcharts object
|
|
/**
|
|
* Global classes and objects related to sonification.
|
|
*
|
|
* @requires module:modules/sonification
|
|
*
|
|
* @name Highcharts.sonification
|
|
* @type {Highcharts.SonificationObject}
|
|
*/
|
|
/**
|
|
* Global classes and objects related to sonification.
|
|
*
|
|
* @requires module:modules/sonification
|
|
*
|
|
* @interface Highcharts.SonificationObject
|
|
*/ /**
|
|
* Note fade-out-time in milliseconds. Most notes are faded out quickly by
|
|
* default if there is time. This is to avoid abrupt stops which will cause
|
|
* perceived clicks.
|
|
* @name Highcharts.SonificationObject#fadeOutDuration
|
|
* @type {number}
|
|
*/ /**
|
|
* Utility functions.
|
|
* @name Highcharts.SonificationObject#utilities
|
|
* @private
|
|
* @type {object}
|
|
*/ /**
|
|
* The Instrument class.
|
|
* @name Highcharts.SonificationObject#Instrument
|
|
* @type {Function}
|
|
*/ /**
|
|
* Predefined instruments, given as an object with a map between the instrument
|
|
* name and the Highcharts.Instrument object.
|
|
* @name Highcharts.SonificationObject#instruments
|
|
* @type {Object}
|
|
*/ /**
|
|
* The Earcon class.
|
|
* @name Highcharts.SonificationObject#Earcon
|
|
* @type {Function}
|
|
*/ /**
|
|
* The TimelineEvent class.
|
|
* @private
|
|
* @name Highcharts.SonificationObject#TimelineEvent
|
|
* @type {Function}
|
|
*/ /**
|
|
* The TimelinePath class.
|
|
* @private
|
|
* @name Highcharts.SonificationObject#TimelinePath
|
|
* @type {Function}
|
|
*/ /**
|
|
* The Timeline class.
|
|
* @private
|
|
* @name Highcharts.SonificationObject#Timeline
|
|
* @type {Function}
|
|
*/
|
|
H.sonification = {
|
|
fadeOutDuration: 20,
|
|
// Classes and functions
|
|
utilities: utilities,
|
|
Instrument: Instrument,
|
|
instruments: instruments,
|
|
Earcon: Earcon,
|
|
TimelineEvent: TimelineClasses.TimelineEvent,
|
|
TimelinePath: TimelineClasses.TimelinePath,
|
|
Timeline: TimelineClasses.Timeline
|
|
};
|
|
// Add default options
|
|
merge(true, H.defaultOptions, sonificationOptions);
|
|
// Chart specific
|
|
Point.prototype.sonify = pointSonifyFunctions.pointSonify;
|
|
Point.prototype.cancelSonify = pointSonifyFunctions.pointCancelSonify;
|
|
H.Series.prototype.sonify = chartSonifyFunctions.seriesSonify;
|
|
extend(H.Chart.prototype, {
|
|
sonify: chartSonifyFunctions.chartSonify,
|
|
pauseSonify: chartSonifyFunctions.pause,
|
|
resumeSonify: chartSonifyFunctions.resume,
|
|
rewindSonify: chartSonifyFunctions.rewind,
|
|
cancelSonify: chartSonifyFunctions.cancel,
|
|
getCurrentSonifyPoints: chartSonifyFunctions.getCurrentPoints,
|
|
setSonifyCursor: chartSonifyFunctions.setCursor,
|
|
resetSonifyCursor: chartSonifyFunctions.resetCursor,
|
|
resetSonifyCursorEnd: chartSonifyFunctions.resetCursorEnd
|
|
});
|
|
/* eslint-disable no-invalid-this */
|
|
// Prepare charts for sonification on init
|
|
addEvent(H.Chart, 'init', function () {
|
|
this.sonification = {};
|
|
});
|
|
// Update with chart/series/point updates
|
|
addEvent(H.Chart, 'update', function (e) {
|
|
var newOptions = e.options.sonification;
|
|
if (newOptions) {
|
|
merge(true, this.options.sonification, newOptions);
|
|
}
|
|
});
|