aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Runge <dave@sleepmap.de>2016-06-22 02:02:31 +0200
committerDavid Runge <dave@sleepmap.de>2016-06-22 02:02:31 +0200
commit6c9bc8fc9d882ddccd197c8eddf51f9e664b7723 (patch)
tree1a963cd9d264bf6759d40cb90b7c737ba02e479d
parenta907465ca6f480d523b69f95537a72d7efa89e91 (diff)
downloadbowelyzer-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.sc192
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);
}