Hi all! Great thread. I own a Model:Cycles and I found these couple functions very useful:
-
mc [...]
: receives a list of patterns and sends them in order to the six M:C channels -
mamps [...]
: sets the input gains of messages sent to these channels (again, in order).-
ma/mamp <n> <value>
: sets the input gain of messages sent to channel<n>
to<value>
-
-- Model:Cycles
:{
let mc pats = p "cycles"
$ stack
$ zipWith (\idx pat -> pat # amp (cF 0.5 $ "m" ++ (show idx)++ "amp")) [0..]
$ zipWith (\cycleschannel pat -> pat # s "mc" # midichan cycleschannel) [0, 1, 2, 3, 4, 5] pats
cyclesDecayTime value = ccn 80 # ccv (value |* 125)
cyclesColor value = ccn 16 # ccv (value |* 125)
cyclesShape value = ccn 17 # ccv (value |* 125)
cyclesSweep value = ccn 18 # ccv (value |* 125)
open = cyclesDecayTime
mamp idx value = setF ("m" ++ (show idx) ++ "amp") value
mamps amps = mapM_ (\(v,i) -> mamp i v) $ zip (take 6 $ amps ++ repeat 0) [0..5]
mampall = mamp . repeat
ma = mamp
:}
Alternatively, you can declare each channel as a different instrument as such:
:{
let mcTrack n time pat = xfadeIn ("cycles" ++ show n) time $ pat # s "mc" # midichan n
m1' = mcTrack 0
m2' = mcTrack 1
m3' = mcTrack 2
m4' = mcTrack 3
m5' = mcTrack 4
m6' = mcTrack 5
m1 pat = do
m1' 0.01 pat
m1' 0.01 pat
m2 pat = do
m2' 0.01 pat
m2' 0.01 pat
m3 pat = do
m3' 0.01 pat
m3' 0.01 pat
m4 pat = do
m4' 0.01 pat
m4' 0.01 pat
m5 pat = do
m5' 0.01 pat
m5' 0.01 pat
m6 pat = do
m6' 0.01 pat
m6' 0.01 pat
:}
Though I find the first option more convenient. I did implement some other stuff like receiving values from the cycles but I'll go through it later