UNPKG

gibberish-dsp

Version:

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

63 lines (51 loc) 1.94 kB
module.exports = function( Gibberish ) { const g = Gibberish.genish const filters = { Filter24Classic : require( './filter24.js' )( Gibberish ), Filter24Moog : require( './ladder.dsp.js' )( Gibberish ), Filter24TB303 : require( './diodeFilterZDF.js' )( Gibberish ), Filter12Biquad : require( './biquad.dsp.js' )( Gibberish ), Filter12SVF : require( './svf.js' )( Gibberish ), // not for use by end-users genish: { Comb : require( './combfilter.js' ), AllPass : require( './allpass.js' ) }, factory( input, cutoff, saturation, _props, isStereo = false ) { let filteredOsc let props = Object.assign({}, filters.defaults, _props ) switch( props.filterModel ) { case 1: filteredOsc = g.zd24( input, g.min( g.in('Q'), .9999 ), cutoff, 0 ) // g.max(.005, g.min( cutoff, 1 ) ) ) break; case 2: filteredOsc = g.diodeZDF( input, g.min( g.in('Q'), .9999 ), cutoff, saturation, isStereo ) break; case 3: filteredOsc = g.svf( input, cutoff, g.sub( 1, g.in('Q')), props.filterMode, isStereo, true ) break; case 4: filteredOsc = g.biquad( input, cutoff, g.in('Q'), props.filterMode, isStereo ) break; case 5: //isLowPass = g.param( 'lowPass', 1 ), filteredOsc = g.filter24( input, g.in('Q'), cutoff, props.filterMode, isStereo ) break; default: // return unfiltered signal filteredOsc = input //g.filter24( oscWithGain, g.in('resonance'), cutoff, isLowPass ) break; } return filteredOsc }, defaults: { filterMode: 0, filterModel:0 } } filters.export = target => { for( let key in filters ) { if( key !== 'export' && key !== 'genish' ) { target[ key ] = filters[ key ] } } } return filters }