node package manager



NPM js-standard-style

Triple Oscillator Triangle Synthesizer AKA tri-tri AKA TOTS

(an experiment in publishing web audio synths to npm, much like

DEMO: a lil game in which you must show different colors to the camera in order to get it to perform a more pleasing drone.


var context = new (window.AudioContext || window.webkitAudioContext)()
var makeTriTri = require('tri-tri')
var triTri = makeTriTri(context)

makeTriTri returns an object that posses the following methods:

  • keys() => returns list of keys to audioNodes
  • connect(destination) => connect the output nodes to a destination or other nodes
  • start() => calls start() on all the source nodes
  • export() => returns JSON respresentation of the instrument
  • import(data) => loads JSON data, or uses default values if no data is passed.
  • updateNote(noteStr, scale) => sets the synth frequencies to play a major chord in the given note and str. note should look like "E4", etc. Scale can be "major", "minor", "pentMaj", "pentMin", or "blues", and defaults to "major".


// connect yr triTri to the audio context destination, or to other nodes
// => ['root', 'third', 'fifth', 'delay', 'pregain', 'filter', lowFilter', 'distortion', 'volume']
// returns a list of keys to audio nodes, so you can do stuff like triTri.source.type = "square" or whatever. 
// Mostly there for debugging. I guess hopefully they will always be named such that you can guess which type of node they will be....
triTri.start() // begin making noise
triTri.updateNote("C4", "pentMin") // update the root note/scale
var data = triTri.export() => exports the current state of the audio nodes to a json object
triTri.import(data) => resets state of audio nodes from JSON object

Can theoretically use this with