Skip to content


Repository files navigation


A module that allows you to sonify timeseries data. The Sonify class will scale your data to a given pitch range and song length, and then allow you play it in the browser using the Web Audio API.

The duration of a note is calculated by measuring the time between two data points. This is then scaled to the timeframe provided by songLength. You can optionally set staticRythm: true to disregard timestamps and give each data point an equal note length.

View a live playground here.


import Sonify from "sonify";

const data = [
  [1536969666906, 1],
  [1546969674206, 2],
  [1556966695555, 4.3],
  [1566959697655, 2.3],
  [1576669693906, 3]

// Instantiate a new Sonify instance with our data,
// with a song length of 10 seconds. Resulting pitches
// should span 3 octaves, starting from C06.
const Sonifier = new Sonify({
  songLength: 10,
  octaves: 3,
  baseOctave: 6,
  glissando: true,
  staticRhythm: false,
  onEnded: () => console.log("that's all folks!")

console.log(Sonifier.isPlaying); // true



Sonify constructor options

* = required

Name Type Sample Value Description Default
data* Array<Array> [[1586969694206, 2.3], [1596969695555, 5.3]] Two dimensional array of data points
songLength* number 60 Length of the generated song in seconds
volume number 0.05 The volume of the song, from 0.0 to 1.0. 0.05
pitches Array ["A", "C#", "E"] Array of pitch names to use. Default is all 12 chromatic notes ["C", "C#", "D", "D#", "E", "F", "Gb", "G", "A", "Ab", "Bb", "B"]
octaveRange number 2 Number of octaves that the song should span. 3
baseOctave number 4 Starting octave for the sonification. There are 9 octaves available, so baseOctave must be less than 9 - octaveRange. 6
glissando boolean true Whether or not to glide from one pitch to another. With this option enabled you can clearly hear the shape of the data. false
staticRhythm boolean false Disregard timestamps and give each data point an equal note length by dividing the provided songLength by the number of data points. false
onEnded function () => console.log("That's all folks") Callback that is invoked when the song is finished playing


Initiates playback of the provided data


Stops playback and clears the web audio context



A module that allows you to sonify timeseries data







No releases published


No packages published