diff options
author | David Runge <dave@sleepmap.de> | 2016-06-22 02:02:31 +0200 |
---|---|---|
committer | David Runge <dave@sleepmap.de> | 2016-06-22 02:02:31 +0200 |
commit | 6c9bc8fc9d882ddccd197c8eddf51f9e664b7723 (patch) | |
tree | 1a963cd9d264bf6759d40cb90b7c737ba02e479d | |
parent | a907465ca6f480d523b69f95537a72d7efa89e91 (diff) | |
download | bowelyzer-6c9bc8fc9d882ddccd197c8eddf51f9e664b7723.tar.gz bowelyzer-6c9bc8fc9d882ddccd197c8eddf51f9e664b7723.tar.bz2 bowelyzer-6c9bc8fc9d882ddccd197c8eddf51f9e664b7723.tar.xz bowelyzer-6c9bc8fc9d882ddccd197c8eddf51f9e664b7723.zip |
BowelyzerAnalyzer.sc: Further deviding functionality by moving adding and starting (alongside stopping, toggling) of Synths to their own sub functions. Adding input channel as separate argument to the analysis synths. Adding separate SendReply Ugen for LevelIndicator in GUI.
-rw-r--r-- | BowelyzerAnalyzer.sc | 192 |
1 files changed, 114 insertions, 78 deletions
diff --git a/BowelyzerAnalyzer.sc b/BowelyzerAnalyzer.sc index f50f89d..f6ad54e 100644 --- a/BowelyzerAnalyzer.sc +++ b/BowelyzerAnalyzer.sc @@ -33,107 +33,143 @@ BowelyzerAnalyzer{ arg config; config.at(\inputs).keysValuesDo({|name, inputChannel| ("Adding SynthDef \""++name++"\" on input "++inputChannel).postln; - SynthDef(name, { - arg sendReplyFreq, - amplitudeAttackTime, - amplitudeReleaseTime, - hfHainsworth, - hfFoote, - hfThreshold, - hfWaitTime, - pitchInitFreq, - pitchMinFreq, - pitchMaxFreq, - pitchExecFreq, - pitchMaxBinsPerOctave, - pitchMedian, - pitchAmpThreshold, - pitchPeakThreshold, - pitchDownSample - ; - var amplitude, input, detect, pitch, hasPitch; - //TODO: Add volume for SoundIn - input = SoundIn.ar(bus: inputChannel); - amplitude = Amplitude.kr( - in: input, - attackTime: amplitudeAttackTime, - releaseTime: amplitudeReleaseTime - ); - detect = A2K.kr( - PV_HainsworthFoote.ar( - FFT(LocalBuf(2048), input), - proph: hfHainsworth, - propf: hfFoote, - threshold: hfThreshold, - waittime: hfWaitTime - ) - ); - # pitch, hasPitch = Pitch.kr( - in: input, - initFreq: pitchInitFreq, - minFreq: pitchMinFreq, - maxFreq: pitchMaxFreq, - execFreq: pitchExecFreq, - maxBinsPerOctave: pitchMaxBinsPerOctave, - median: pitchMedian, - ampThreshold: pitchAmpThreshold, - peakThreshold: pitchPeakThreshold, - downSample: pitchDownSample - ); - SendReply.kr( - Impulse.kr(sendReplyFreq), - "/"++name, - [amplitude, pitch, hasPitch, detect] - ); - }).add; + this.addSynthWithName(name); }); } + addSynthWithName{ + arg name; + SynthDef(name, { + arg inputChannel, + sendReplyFreq, + amplitudeAttackTime, + amplitudeReleaseTime, + hfHainsworth, + hfFoote, + hfThreshold, + hfWaitTime, + pitchInitFreq, + pitchMinFreq, + pitchMaxFreq, + pitchExecFreq, + pitchMaxBinsPerOctave, + pitchMedian, + pitchAmpThreshold, + pitchPeakThreshold, + pitchDownSample + ; + var amplitude, input, detect, pitch, hasPitch; + //TODO: Add volume for SoundIn + input = SoundIn.ar(bus: inputChannel); + amplitude = Amplitude.kr( + in: input, + attackTime: amplitudeAttackTime, + releaseTime: amplitudeReleaseTime + ); + detect = A2K.kr( + PV_HainsworthFoote.ar( + FFT(LocalBuf(2048), input), + proph: hfHainsworth, + propf: hfFoote, + threshold: hfThreshold, + waittime: hfWaitTime + ) + ); + # pitch, hasPitch = Pitch.kr( + in: input, + initFreq: pitchInitFreq, + minFreq: pitchMinFreq, + maxFreq: pitchMaxFreq, + execFreq: pitchExecFreq, + maxBinsPerOctave: pitchMaxBinsPerOctave, + median: pitchMedian, + ampThreshold: pitchAmpThreshold, + peakThreshold: pitchPeakThreshold, + downSample: pitchDownSample + ); + // SendReply for OSCHub + SendReply.kr( + Impulse.kr(sendReplyFreq), + "/"++name, + [amplitude, pitch, hasPitch, detect] + ); + // SendReply for LevelIndicator + SendReply.kr( + Impulse.kr(10), + "/levels/"++name, + [ + Amplitude.kr(input), + K2A.ar( + Peak.ar( + input, + Delay1.kr(Impulse.kr(10)) + ).lag(0, 3) + ) + ] + ); + }).add; + } + startSynthsFromConfig{ arg config; config.at(\controls).keysValuesDo({|name, controls| postln("Starting synth \""++name++"\"."); - synths.add(name -> Synth( - name, - [ - sendReplyFreq: controls.at(\sendReplyFreq), - amplitudeAttackTime: controls.at(\amplitudeAttackTime), - amplitudeReleaseTime: controls.at(\amplitudeReleaseTime), - hfHainsworth: controls.at(\hfhainsworth), - hfFoote: controls.at(\hfFoote), - hfThreshold: controls.at(\hfThreshold), - hfWaitTime: controls.at(\hfWaitTime), - pitchInitFreq: controls.at(\pitchInitFreq), - pitchMinFreq: controls.at(\pitchMinFreq), - pitchMaxFreq: controls.at(\pitchMaxFreq), - pitchExecFreq: controls.at(\pitchExecFreq), - pitchMaxBinsPerOctave: controls.at(\pitchMaxBinsPerOctave), - pitchMedian: controls.at(\pitchMedian), - pitchAmpThreshold: controls.at(\pitchAmpThreshold), - pitchPeakThreshold: controls.at(\pitchPeakThreshold), - pitchDownSample: controls.at(\pitchDownSample) - ], - analyzerGroup - ); - ); + this.startSynthWithNameAndControls(name, controls, config.at(\inputs).at(name)); }); } + startSynthWithNameAndControls{ + arg name, controls, input; + synths.add(name -> Synth( + name, + [ + inputChannel: input, + sendReplyFreq: controls.at(\sendReplyFreq), + amplitudeAttackTime: controls.at(\amplitudeAttackTime), + amplitudeReleaseTime: controls.at(\amplitudeReleaseTime), + hfHainsworth: controls.at(\hfhainsworth), + hfFoote: controls.at(\hfFoote), + hfThreshold: controls.at(\hfThreshold), + hfWaitTime: controls.at(\hfWaitTime), + pitchInitFreq: controls.at(\pitchInitFreq), + pitchMinFreq: controls.at(\pitchMinFreq), + pitchMaxFreq: controls.at(\pitchMaxFreq), + pitchExecFreq: controls.at(\pitchExecFreq), + pitchMaxBinsPerOctave: controls.at(\pitchMaxBinsPerOctave), + pitchMedian: controls.at(\pitchMedian), + pitchAmpThreshold: controls.at(\pitchAmpThreshold), + pitchPeakThreshold: controls.at(\pitchPeakThreshold), + pitchDownSample: controls.at(\pitchDownSample) + ], + analyzerGroup + ); + ); + } + + // set a synth control by provoding its name, its control name and control value setSynthControl{ - arg name, control; - synths.at(name).set(control[0], control[1]); + arg name, controlName, controlValue; + synths.at(name).set(controlName, controlValue); } + // start a synth by name startAnalysisSynth{ arg name; synths.at(name).run(true); } + // stop a synth by name stopAnalysisSynth{ arg name; synths.at(name).run(false); } + // free a synth by name + freeAnalysisSynth{ + arg name; + synths.at(name).free; + } + startAllAnalysisSynths{ analyzerGroup.run(true); } |