n fm7 patches

about letting the computer generate sc code automatically... stefan kersten made a very nice plugin for supercollider. it's called FM7 and implements a 6x6 phase modulation oscillator matrix. while trying it out, i wrote some code (pasted in below) that automatically generates parameters for it. so every 8th bar it'll construct a new patch around the fm7. in these patches the fm7 parameters are ugens with random frequency, phase, range and offset.
at times, i start the generator, lean back and listen. when something good catches my ears, i copy the generated code from the post window. here are some ok ones i've collected... _n_fm7patches and below are mp3 excerpts of the same. but the best ones i of course keep to myself.
by randomly generating patches and synths like this i loose a lot of control and time listening to all the generated patches. most are crap sounding. but on the other hand the blind randomness sometimes comes up with with so strange rhythms and sounds that i never would've been able to think of myself. and the time lost could be minimised using for instance genetic algorithms or other types of searches in this huge parameter space.

s.boot

//--more repetitive 2ch instant clicks 'n cuts with code generation /f0
//when you hear something you like, you can save it by copy&paste from the post window
(
Routine.run{
        var syn, time= 16;              //allow each patch to run for 16sec / 8bars
        inf.do{|i|
                ("\n//fm7 patch"+i+"generated on"+Date.localtime).post;
                syn= ("
                        (
                        var x= #"
++({{{1.5.linrand.round(0.5)}!4}!3}!6).asCompileString++";
                        var y= #"
++({{{1.5.linrand.round(0.5)}!4}!6}!6).asCompileString++";
                        {
                                var ctls= x.collect{|a| a.collect{|b| LFSaw.kr(*b)}};
                                var mods= y.collect{|a| a.collect{|b| LFSaw.kr(*b)}};
                                var chans= #[0, 1];
                                FM7.ar(ctls, mods).slice(chans)*0.5;
                        }.play)"
).postln.interpret;
                time.wait;
                syn.free;
        };
};
)