UNPKG

gibberish-dsp

Version:

Gibberish is designed to be an optimized API for audio synthesis using per-sample techniques.

50 lines (38 loc) 1.34 kB
const g = require( 'genish.js' ), instrument = require( './instrument.js' ) module.exports = function( Gibberish ) { const Tom = argumentProps => { let tom = Object.create( instrument ) const decay = g.in( 'decay' ), pitch = g.in( 'frequency' ), gain = g.in( 'gain' ), loudness = g.in( 'loudness' ), triggerLoudness = g.in( '__triggerLoudness' ) const props = Object.assign( {}, Tom.defaults, argumentProps ) const trigger = g.bang(), impulse = g.mul( trigger, 1 ), eg = g.decay( g.mul( decay, g.gen.samplerate * 2 ), { initValue:0 } ), bpf = g.mul( g.svf( impulse, pitch, .0175, 2, false ), 10 ), noise = g.gtp( g.noise(), 0 ), // rectify noise envelopedNoise = g.mul( noise, eg ), lpf = g.mul( g.svf( envelopedNoise, 120, .5, 0, false ), 2.5 ), out = g.mul( g.add( bpf, lpf ), g.mul( gain, g.mul( loudness, triggerLoudness ) ) ) tom.env = { trigger: function() { eg.trigger() trigger.trigger() } } tom.isStereo = false tom = Gibberish.factory( tom, out, ['instruments', 'tom'], props ) return tom } Tom.defaults = { gain: 1, decay:.7, frequency:120, loudness:1, __triggerLoudness:1 } return Tom }