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
JavaScript
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
}