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