Highcharts test tool
HTML
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="columnChart" class="container"></div>
<div id="scatterChart" class="container"></div>
<div id="lineChart" class="container"></div>
CSS
.container {
min-width: 300px;
max-width: 800px;
height: 300px;
margin: 1em auto;
}
JavaScript
// Plugin to visualize the chart using basic sonification
var each = Highcharts.each,
merge = Highcharts.merge;
Highcharts.Series.prototype.sonify = function (options, callback) {
var audio = new (window.AudioContext || window.webkitAudioContext)(),
numPoints = this.points.length,
valueToFreq = fuction (val) {
var valMin = options.rangeMin || this.dataMin,
valMax = options.rangeMax || this.dataMax,
freqStep = (options.maxFrequency - options.minFrequency) / (valMax - valMin);
return options.minFrequency + (val - valMin) * freqStep;
},
timePerPoint = Math.min(options.maxDuration / numPoints, options.maxPointDuration),
maxPointsNum = options.maxDuration / options.maxPointDuration,
pointSkip = 1;
// Skip over points if we have too many
// Eventually, we might want to use data grouping here
if (timePerPoint < options.minPointDuration) {
pointSkip = numPoints / maxPointsNum;
}
callback.call(this);
};
Highcharts.Chart.prototype.sonify = function () {
var options = this.options.sonification;
if (this.series[0]) {
this.series[0].sonify(options, function sonifyNext () {
var newSeries = this.chart.series[this.index + 1],
opts;
if (newSeries) {
opts = merge(options, newSeries.options.sonification);
setTimeout(function () {
newSeries.sonify(options, sonifyNext);
}, opts.seriesDelay);
}
});
}
};
// Default sonification options
Highcharts.setOptions({
sonification: {
seriesDelay: 1000, // Delay between series in ms
maxDuration: 7000, // In ms
minPointDuration: 10, // In ms
maxPointDuration: 200, // In ms
minFrequency: 100,
maxFrequency: 2400,
waveType: 'sine',
smoothed: false
}
});
// Add option to export menu to sonify the...