Timbre.js

JavaScript Library for Objective Sound Programming
system requirements: Chrome 14- or Firefox 4-

Oscillator

Linear interpolating wavetable lookup oscillator with frequency modulation input.

Constructor

osc = T("osc", wave="sin", freq=440, mul=1, add=0);

// wave [String / Function / Float32Array]
// freq [Object] Frequency
// mul  [Number] Multiply the output  (default is 1)
// add  [Number]   and add the output (default is 0)

osc.play();
        

Properties

osc.wave  // [String / Function / Float32Array]
osc.freq  // [Object] Frequency
osc.phase // [Number] Initial phase offset
osc.mul   // [Number] Output will be multiplied by this value
osc.add   // [Number]    and will be added to the output
        

Methods

// Reset phase          
osc.bang();
        

Events

        

Change the wavetable

wave = ["sin", "tri", "saw", "pulse", "fami"][(Math.random()*5)|0];

T("osc", wave, 660, 0.5).play();


// The oscillator class has some aliases.
T("sin"), T("tri"), T("saw"), T("pulse"), T("fami");

// It's same as the above code.
T(wave, 1320, 0.5).play();

// (push [bang] button to change the wave)
        

Customize the wavetable

// Define custom wavetable from a function
func = function(x) { return x * x * x; };
T("osc", func, 880).play(); 

// From an array (PWM25%)
T("osc", [ -1, +1, +1, +1 ], 880);

// Directly set
T("osc", new Float32Array(1024), 880);
        

Register the wavetable

// Register a wavetable and use it
T("osc").setWavetable("myosc", function(x) {
    return Math.random() - 0.5;
});

T("osc", "myosc", 1340).play();

// Get a wavetable
// (push [bang] button and see the result at WebConsole)
T("osc").getWavetable("myosc"); // Float32Array(1024)
        

Example: Tremolo

T("*", T("tri", 880, 0.25),
       T("+sin", 8).kr()).play();

// kr() method switches to processing mode 'Control Rate'
// Control rate are used for low frequency or slowly chaning control signal.

// T("+sin") generate signals between 0.0 and 1.0.
// It's convenient to control amplitude.
//   T("+sin"), T("+saw"), T("+tri") or T("+pulse")
        

Example: Vibrato

T("tri", T("tri", 2, 30, 880).kr(), 0.25).play();
        

Example: Glide

synth = T("fami", T("glide", msec=150, freq.value=880), 0.25).play();


// push [bang] button to execute the below code
cnt   = 0;
synth.onbang = function() {
    synth.freq.value = [880, 1320, 1100, 660][++cnt % 4]
};