UNPKG

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