Sonification.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /* *
  2. *
  3. * (c) 2009-2021 Øystein Moseng
  4. *
  5. * Sonification module for Highcharts
  6. *
  7. * License: www.highcharts.com/license
  8. *
  9. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  10. *
  11. * */
  12. 'use strict';
  13. import Chart from '../../Core/Chart/Chart.js';
  14. import H from '../../Core/Globals.js';
  15. import O from '../../Core/Options.js';
  16. var defaultOptions = O.defaultOptions;
  17. import Point from '../../Core/Series/Point.js';
  18. import Series from '../../Core/Series/Series.js';
  19. import U from '../../Core/Utilities.js';
  20. var addEvent = U.addEvent, extend = U.extend, merge = U.merge;
  21. import Instrument from './Instrument.js';
  22. import instruments from './InstrumentDefinitions.js';
  23. import Earcon from './Earcon.js';
  24. import pointSonifyFunctions from './PointSonify.js';
  25. import chartSonifyFunctions from './ChartSonify.js';
  26. import utilities from './Utilities.js';
  27. import TimelineClasses from './Timeline.js';
  28. import sonificationOptions from './Options.js';
  29. // Expose on the Highcharts object
  30. /**
  31. * Global classes and objects related to sonification.
  32. *
  33. * @requires module:modules/sonification
  34. *
  35. * @name Highcharts.sonification
  36. * @type {Highcharts.SonificationObject}
  37. */
  38. /**
  39. * Global classes and objects related to sonification.
  40. *
  41. * @requires module:modules/sonification
  42. *
  43. * @interface Highcharts.SonificationObject
  44. */ /**
  45. * Note fade-out-time in milliseconds. Most notes are faded out quickly by
  46. * default if there is time. This is to avoid abrupt stops which will cause
  47. * perceived clicks.
  48. * @name Highcharts.SonificationObject#fadeOutDuration
  49. * @type {number}
  50. */ /**
  51. * Utility functions.
  52. * @name Highcharts.SonificationObject#utilities
  53. * @private
  54. * @type {object}
  55. */ /**
  56. * The Instrument class.
  57. * @name Highcharts.SonificationObject#Instrument
  58. * @type {Function}
  59. */ /**
  60. * Predefined instruments, given as an object with a map between the instrument
  61. * name and the Highcharts.Instrument object.
  62. * @name Highcharts.SonificationObject#instruments
  63. * @type {Object}
  64. */ /**
  65. * The Earcon class.
  66. * @name Highcharts.SonificationObject#Earcon
  67. * @type {Function}
  68. */ /**
  69. * The TimelineEvent class.
  70. * @private
  71. * @name Highcharts.SonificationObject#TimelineEvent
  72. * @type {Function}
  73. */ /**
  74. * The TimelinePath class.
  75. * @private
  76. * @name Highcharts.SonificationObject#TimelinePath
  77. * @type {Function}
  78. */ /**
  79. * The Timeline class.
  80. * @private
  81. * @name Highcharts.SonificationObject#Timeline
  82. * @type {Function}
  83. */
  84. H.sonification = {
  85. fadeOutDuration: 20,
  86. // Classes and functions
  87. utilities: utilities,
  88. Instrument: Instrument,
  89. instruments: instruments,
  90. Earcon: Earcon,
  91. TimelineEvent: TimelineClasses.TimelineEvent,
  92. TimelinePath: TimelineClasses.TimelinePath,
  93. Timeline: TimelineClasses.Timeline
  94. };
  95. // Add default options
  96. merge(true, defaultOptions, sonificationOptions);
  97. // Chart specific
  98. Point.prototype.sonify = pointSonifyFunctions.pointSonify;
  99. Point.prototype.cancelSonify = pointSonifyFunctions.pointCancelSonify;
  100. Series.prototype.sonify = chartSonifyFunctions.seriesSonify;
  101. extend(Chart.prototype, {
  102. sonify: chartSonifyFunctions.chartSonify,
  103. pauseSonify: chartSonifyFunctions.pause,
  104. resumeSonify: chartSonifyFunctions.resume,
  105. rewindSonify: chartSonifyFunctions.rewind,
  106. cancelSonify: chartSonifyFunctions.cancel,
  107. getCurrentSonifyPoints: chartSonifyFunctions.getCurrentPoints,
  108. setSonifyCursor: chartSonifyFunctions.setCursor,
  109. resetSonifyCursor: chartSonifyFunctions.resetCursor,
  110. resetSonifyCursorEnd: chartSonifyFunctions.resetCursorEnd
  111. });
  112. /* eslint-disable no-invalid-this */
  113. // Prepare charts for sonification on init
  114. addEvent(Chart, 'init', function () {
  115. this.sonification = {};
  116. });
  117. // Update with chart/series/point updates
  118. addEvent(Chart, 'update', function (e) {
  119. var newOptions = e.options.sonification;
  120. if (newOptions) {
  121. merge(true, this.options.sonification, newOptions);
  122. }
  123. });