UNPKG

gibberish-dsp

Version:

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

64 lines (49 loc) 1.57 kB
let g = require( 'genish.js' ), effect = require( './effect.js' ) module.exports = function( Gibberish ) { let RingMod = inputProps => { let props = Object.assign( {}, RingMod.defaults, effect.defaults, inputProps ), ringMod = Object.create( effect ), out ringMod.__createGraph = function() { let isStereo = false if( out === undefined ) { isStereo = typeof props.input.isStereo !== 'undefined' ? props.input.isStereo : false }else{ isStereo = out.input.isStereo out.isStereo = isStereo } const input = g.in( 'input' ), inputGain = g.in( 'inputGain' ), frequency = g.in( 'frequency' ), gain = g.in( 'gain' ), mix = g.in( 'mix' ) const leftInput = isStereo ? g.mul( input[0], inputGain ) : g.mul( input, inputGain ), sine = g.mul( g.cycle( frequency ), gain ) const left = g.add( g.mul( leftInput, g.sub( 1, mix )), g.mul( g.mul( leftInput, sine ), mix ) ) if( isStereo === true ) { const rightInput = g.mul( input[1], inputGain ), right = g.add( g.mul( rightInput, g.sub( 1, mix )), g.mul( g.mul( rightInput, sine ), mix ) ) ringMod.graph = [ left, right ] }else{ ringMod.graph = left } } ringMod.__createGraph() ringMod.__requiresRecompilation = [ 'input' ] out = Gibberish.factory( ringMod, ringMod.graph, [ 'fx','ringMod'], props ) return out } RingMod.defaults = { input:0, frequency:220, gain: 1, mix:1 } return RingMod }