summaryrefslogtreecommitdiff
path: root/tran/instrfluteall.alg
diff options
context:
space:
mode:
Diffstat (limited to 'tran/instrfluteall.alg')
-rw-r--r--tran/instrfluteall.alg43
1 files changed, 43 insertions, 0 deletions
diff --git a/tran/instrfluteall.alg b/tran/instrfluteall.alg
new file mode 100644
index 0000000..045b52b
--- /dev/null
+++ b/tran/instrfluteall.alg
@@ -0,0 +1,43 @@
+(INSTRFLUTEALL-ALG
+
+;; parameters are:
+;; freq_env -- frequency modulation, aftertouch 128
+;; breath_env -- amplitude envelope, aftertouch 128
+;; vibrato_freq -- vibrato frequency, ModFreq 11
+;; vibrato_gain -- vibrato gain, ModWheel 1
+;; jet_delay -- jet delay, 2
+;; noise -- noise, Noise 4
+;;
+(NAME "flute_all")
+(ARGUMENTS ("double" "freq") ("sound_type" "breath_env") ("sound_type" "freq_env")
+ ("double" "vibrato_freq") ("double" "vibrato_gain")
+ ("sound_type" "jet_delay") ("sound_type" "noise") ("rate_type" "sr"))
+;; use a constant rate of 1.0 because it will actually be conrolled
+;; by breath_env
+(STATE ("struct instr *" "myflute" "initInstrument(FLUTE, round(sr));
+ noteOn(susp->myflute, freq, 1.0);
+ controlChange(susp->myflute, 11, FLUTE_CONTROL_CHANGE_CONST * vibrato_freq);
+ controlChange(susp->myflute, 1, FLUTE_CONTROL_CHANGE_CONST * vibrato_gain);")
+ ("double" "frequency" "freq"))
+(START (min breath_env))
+(MATCHED-SAMPLE-RATE freq_env breath_env jet_delay noise)
+(ALWAYS-SCALE freq_env breath_env jet_delay noise)
+(CONSTANT "frequency")
+(SAMPLE-RATE "sr")
+(TERMINATE (min breath_env))
+(INNER-LOOP "
+ controlChange(myflute, 128, FLUTE_CONTROL_CHANGE_CONST * breath_env);
+ controlChange(myflute, 2, FLUTE_CONTROL_CHANGE_CONST * jet_delay);
+ controlChange(myflute, 4, FLUTE_CONTROL_CHANGE_CONST * noise);
+ setFrequency(myflute, frequency + freq_env);
+ output = (sample_type) tick(myflute)")
+(SUPPORT-HEADER "
+ #define FLUTE_CONTROL_CHANGE_CONST 128
+")
+(SUPPORT-FUNCTIONS "
+ #include \"instr.h\"
+")
+(FINALIZATION "
+ deleteInstrument(susp->myflute);
+")
+)