gibberish-dsp
Version:
Gibberish is designed to be an optimized API for audio synthesis using per-sample techniques.
50 lines (39 loc) • 1.42 kB
JavaScript
let g = require( 'genish.js' ),
instrument = require( './instrument.js' )
module.exports = function( Gibberish ) {
const Kick = inputProps => {
// establish prototype chain
const kick = Object.create( instrument )
// define inputs
const frequency = g.in( 'frequency' ),
decay = g.in( 'decay' ),
tone = g.in( 'tone' ),
gain = g.in( 'gain' ),
loudness = g.in( 'loudness' ),
triggerLoudness = g.in( '__triggerLoudness' ),
Loudness = g.mul( loudness, triggerLoudness )
// create initial property set
const props = Object.assign( {}, Kick.defaults, inputProps )
Object.assign( kick, props )
// create DSP graph
const trigger = g.bang(),
impulse = g.mul( trigger, 60 ),
scaledDecay = g.sub( 1.005, decay ), // -> range { .005, 1.005 }
scaledTone = g.add( 50, g.mul( tone, g.mul(4000, Loudness ) ) ), // -> range { 50, 4050 }
bpf = g.svf( impulse, frequency, scaledDecay, 2, false ),
lpf = g.svf( bpf, scaledTone, .5, 0, false ),
graph = g.mul( lpf, g.mul( gain, Loudness ) )
kick.env = trigger
const out = Gibberish.factory( kick, graph, ['instruments','kick'], props )
return out
}
Kick.defaults = {
gain: 1,
frequency:85,
tone: .25,
decay:.9,
loudness:1,
__triggerLoudness:1
}
return Kick
}