module.exports = function renderDipper(node){ var data = node() return h('ProcessorNode -dipper', [ Header(node, h('span', 'Dipper')), h('ParamList', [ Select(node.mode, { defaultValue: 'modulate', options: modeChoices }), ModRange(node.ratio, { title: 'ratio', defaultValue: 1, format: 'ratio', flex: true }) ]) ]) }
module.exports = function renderReverb (node) { return h('ProcessorNode -reverb', { hooks: [ AcceptSampleHook(node) ] }, [ Header(node, h('span', [ h('strong', 'Reverb:'), ' ', h('span', computed(node.buffer, getSampleName)) ])), h('ParamList', [ Select(QueryParam(node, 'node'), { defaultValue: 'processor/convolution-reverb', options: nodeChoices }), SampleChooser(node), ModRange(node.low, { title: 'low', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.mid, { title: 'mid', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.high, { title: 'high', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.highcut, { title: 'highcut', format: 'arfo', flex: 'small', defaultValue: 20000 }), ModRange(node.lowcut, { title: 'lowcut', format: 'arfo', flex: 'small', defaultValue: 0 }), ModRange(node.wet, { title: 'wet', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.dry, { title: 'dry', defaultValue: 1, format: 'dB', flex: true }) ]) ]) }
module.exports = function renderOscillator (node) { var shape = Value('pulse') shape(value => { if (value !== 'pulse') { node.set(extend(node(), { node: 'source/oscillator', shape: value })) } }) return h('SourceNode -oscillatorPulse', [ Header(node, h('span', [ h('strong', 'Oscillator:'), ' ', h('span', 'Pulse') ])), h('ParamList', [ Select(shape, { options: shapeChoices }), ModRange(node.amp, { title: 'amp', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.detune, { title: 'detune', format: 'cents', flex: true, defaultValue: 0 }), ModRange(node.pulseWidth, { title: 'pulse width', format: 'offset1', flex: true, defaultValue: 0 }), ModRange(node.noteOffset, { title: 'pitch', format: 'semitone', defaultValue: 0, flex: true }), ModRange(node.octave, { title: 'octave', format: 'octave', defaultValue: 0, flex: true }) ]) ]) }
module.exports = function renderGain (node){ return h('ProcessorNode -gain', [ Header(node, h('span', 'Gain')), h('ParamList', [ ModRange(node.gain, { defaultValue: 1, format: 'dB', flex: true }) ]) ]) }
module.exports = function renderReverb (node) { return h('ProcessorNode -reverb', [ Header(node, h('span', 'Reverb')), h('ParamList', [ Select(QueryParam(node, 'node'), { defaultValue: 'processor/freeverb', options: nodeChoices }), ToggleButton(node.reverse, { title: 'Reverse' }), Range(node.time, { title: 'time', defaultValue: 3, format: 'ms', flex: true }), Range(node.decay, { title: 'decay', defaultValue: 2, format: 'ratioExp', flex: true }), Select(node.filterType, { defaultValue: 'lowpass', options: filterChoices }), ModRange(node.cutoff, { title: 'cutoff', defaultValue: 20000, format: 'arfo', flex: true }), ModRange(node.wet, { title: 'wet', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.dry, { title: 'dry', defaultValue: 1, format: 'dB', flex: true }) ]) ]) }
module.exports = function renderDrumSynth (node){ var data = node() return h('SourceNode -drumSynth', [ Header(node, h('span', [ h('strong', 'Drum Synth:'), ' ', h('span', data.type) ])), h('ParamList', [ Select(node.type, { options: types }), ModRange(node.amp, { title: 'amp', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.tune, { title: 'tune', defaultValue: 0, format: 'cents+', flex: true }), ModRange(node.decay, { title: 'decay', defaultValue: 0.5, format: 'ms', flex: true }), node.type() === 'snare' ? [ ModRange(node.tone, { title: 'tone', defaultValue: 0.5, format: 'ratio', flex: true }), ModRange(node.snappy, { title: 'snappy', defaultValue: 0.5, format: 'ratio', flex: true }) ] : null ]) ]) }
module.exports = function renderNoise (node){ var data = node() return h('SourceNode -noise', [ Header(node, h('span', [ h('strong', 'Noise:'), ' ', h('span', data.type || 'white') ])), h('ParamList', [ Select(node.type, { options: types }), ModRange(node.amp, { title: 'amp', defaultValue: 1, format: 'dB', flex: true }) ]) ]) }
module.exports = function renderFilter(node) { return h('ProcessorNode -filter', [ Header(node, h('span', 'EQ')), h('section', [ h('ParamList', [ ModRange(node.low, { title: 'low', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.mid, { title: 'mid', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.high, { title: 'high', defaultValue: 0, format: 'dBn', flex: 'small' }), ModRange(node.highcut, { title: 'highcut', format: 'arfo', flex: 'small', defaultValue: 20000 }), ModRange(node.lowcut, { title: 'lowcut', format: 'arfo', flex: 'small', defaultValue: 0 }) ]) ]) ]) }
module.exports = function renderFilter (node) { var hasGain = computed(node.type, t => ~gainTypes.indexOf(t)) var hasQ = computed(node.type, t => ~qTypes.indexOf(t)) var params = [ Select(node.type, { defaultValue: 'lowpass', options: typeChoices }), ModRange(node.frequency, { title: 'freq', defaultValue: 300, format: 'arfo', flex: true }), when(hasQ, ModRange(node.Q, { title: 'Q', defaultValue: 1, format: 'ratio100', flex: true })), when(hasGain, ModRange(node.gain, { title: 'gain', defaultValue: 1, format: 'dBn', flex: true })) ] return h('ProcessorNode -filter', [ Header(node, h('span', 'Filter')), h('ParamList', params) ]) }
module.exports = function renderCompressor (node){ return h('ProcessorNode -compressor', [ Header(node, h('span', 'Compressor')), h('ParamList', [ ModRange(node.threshold, { title: 'threshold', format: 'dBn', flex: true }), ModRange(node.knee, { title: 'knee', format: 'dBn', flex: true }), ModRange(node.ratio, { title: 'ratio', format: 'compressionRatio', flex: true }), ModRange(node.reduction, { title: 'reduction', format: 'dBn', flex: true }), ModRange(node.attack, { title: 'attack', format: 'ms', flex: true }), ModRange(node.release, { title: 'release', format: 'ms', flex: true }) ]) ]) }
module.exports = function renderOscillator (node) { return h('ProcessorNode -ringModulator', [ Header(node, h('span', [ 'Ring Modulator' ])), h('ParamList', [ Select(node.carrier.shape, { options: shapeChoices }), ModRange(node.carrier.amp, { title: 'amp', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.carrier.frequency, { title: 'frequency', format: 'arfo', flex: true, defaultValue: 440 }) ]) ]) }
module.exports = function renderLfo (node) { var trigger = isTriggerable(node) return h('ModulatorNode -lfo', [ Header(node, h('span', [ h('strong', 'LFO:'), ' ', h('span', { hooks: [ EditableHook(node.id, { onChange: onRename, formatter: node.context.collection.resolveAvailable }) ] }) ])), h('ParamList', [ ToggleButton(node.sync, { title: 'BPM Sync' }), when(trigger, ToggleButton(node.trigger, { title: 'Retrigger' })), Select(node.mode, { options: modeOptions }), ModRange(node.value, { flex: true, title: 'centre', defaultValue: 0.5, format: 'ratio1' }), ModRange(node.amp, { flex: true, defaultValue: 0.5, title: 'amplitude', format: 'ratio1' }), when(node.sync, ModRange(node.rate, { flex: true, defaultValue: 1, title: 'rate', format: 'beat' }), ModRange(node.rate, { flex: true, defaultValue: 1, title: 'rate', format: 'lfo' }) ), ModRange(node.phaseOffset, { defaultValue: 0, title: 'phase offset', format: 'offset1', flex: true }), Range(node.skew, { defaultValue: 0, title: 'skew', format: 'offset1', flex: true }), Range(node.curve, { defaultValue: 1, title: 'curve', format: 'ratio1', flex: true }) ]) ]) }
module.exports = function renderDelay (node) { return h('ProcessorNode -delay', [ Header(node, h('span', 'Delay')), h('ParamList', [ ToggleButton(node.sync, { title: 'BPM Sync' }), ToggleButton(QueryParam(node, 'node'), { title: 'Ping Pong', onValue: 'processor/ping-pong-delay', offValue: 'processor/delay' }), when(node.sync, ModRange(node.time, { title: 'time', defaultValue: 0.25, format: 'beat', flex: true }), ModRange(node.time, { title: 'time', defaultValue: 0.25, format: 'ms', flex: true }) ), ModRange(node.feedback, { title: 'feedback', defaultValue: 0.6, format: 'dB', flex: true }), Select(node.filterType, { defaultValue: 'lowpass', options: filterChoices }), ModRange(node.cutoff, { title: 'cutoff', defaultValue: 20000, format: 'arfo', flex: true }), ModRange(node.wet, { title: 'wet', defaultValue: 1, format: 'dB', flex: true }), ModRange(node.dry, { title: 'dry', defaultValue: 1, format: 'dB', flex: true }) ]) ]) }