[CM] Syntactic changes to snd-rt

Kjetil S. Matheussen k.s.matheussen at notam02.no
Wed Aug 12 09:04:36 PDT 2009

On Wed, 12 Aug 2009, Kjetil S. Matheussen wrote:

> I've added a few improvements to the syntax of snd-rt.
> What I like most is the use of the keywords ":where" and
> ":when" which can be placed anywhere in code. (inspired
> by various functional languages)
> ":where" is a postfix operator to add local variables,
> and ":when" is a postfix operator for doing conditional tests.

Not quite used to the new syntax yet. Here is another version of the 
softsynth which exploits it better:

     (out (+ (* 0.5 softsynth)
 	    (* 0.1 reverb)

 	    :where reverb (+ (comb :scaler 0.742 :size  9601 allpass-sum)
 			     (comb :scaler 0.733 :size 10007 allpass-sum)
 			     (comb :scaler 0.715 :size 10799 allpass-sum)
 			     (comb :scaler 0.697 :size 11597 allpass-sum)
 			     :where allpass-sum (send softsynth :through
 						      (all-pass :feedback -0.7 :feedforward 0.7)
 						      (all-pass :feedback -0.7 :feedforward 0.7)
 						      (all-pass :feedback -0.7 :feedforward 0.7)
 						      (all-pass :feedback -0.7 :feedforward 0.7)))
 	    :where softsynth (in (while #t
 				   (wait-midi :command note-on
 				       (out (* (-> adsr next) (midi-vol) (oscil :freq (midi-to-freq (midi-note)))))
 				       (stop :when (-> adsr is-finished)))
 				       (wait-midi :command note-off :note (midi-note)
 					 (-> adsr stop)))
 				     :where adsr (make-adsr :a 20:-ms :d 30:-ms :s 0.2 :r 70:-ms))))))))

More information about the Cmdist mailing list