OK, here is a proof of concept. It doesn't quite do what you want yet, but it demonstrates the strategy we can use to pull it off. Using node-map-controls we can connect a bus to a synth parameter. So here I did it all by hand. The idea version, like your example, should be in a macro that allocates the bus, maps the parameter to it, creates and fires off the control synth, and then once the synth completes free the bus. Currently there is an /n_end event sent when a synth node completes, but I think we should have a higher level and easier to use event to catch when a synth finishes. Sam, you've been doing a lot of work with the event system lately. Any thoughts on how this should work? Anyway, you should be able to give this example a go. Just evaluate form by form.
-Jeff
(ns examples.synth-control
(:use overtone.live))
(definst simple
[freq 440 depth 30 warble 0.3]
(let [freq (slew freq 7 12)
snd (apply + (saw (+ [freq (* freq 1.013) (* freq 0.992)]
(* warble (sin-osc:kr warble [0 2.0945 4.7])))))
filt (rlpf snd
(+ (* freq 2) (* freq (sin-osc 0.2)))
(+ 0.31 (* 0.3 (sin-osc 0.03))))]
filt))
(defn synth-ctl
[node param ctl-synth]
(let [cur-val (node-get-control node [param])]
(ctl-synth test-bus)
(node-map-controls node [param test-bus])))
(defsynth bus-line
[start 0 end 1 dur 1 bus 0]
(out bus (line:kr start end dur :action FREE)))
(def test-bus (control-bus 1))
(def s (simple))
(synth-ctl s :freq (partial bus-line 880 220 4))
(stop)