From 53d15e978c3ea78048573ed6ddeeb09c7308a23b Mon Sep 17 00:00:00 2001 From: Paul-Louis NECH Date: Sat, 6 Feb 2021 00:40:22 +0100 Subject: [PATCH] live: methbass --- live/bdmania.tidal | 2 +- live/midi/nova/FFF/mad_fonk.tidal | 22 ++++++++++------------ live/midi/nova/FFF/pray.tidal | 2 +- live/midi/nova/breaks/StolenChoir.tidal | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/dnb/BreakBass.tidal | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/dnb/MethBass.tidal | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/dnb/prepabass.tidal | 3 --- live/midi/nova/fm.tidal | 43 +++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/instruments/AtomicRhodes.tidal | 3 ++- live/midi/nova/instruments/StolenChoir.tidal | 120 ------------------------------------------------------------------------------------------------------------------------ live/midi/nova/superFM.tidal | 290 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- live/transe/cosmos.tidal | 7 ++++--- 12 files changed, 776 insertions(+), 152 deletions(-) create mode 100644 live/midi/nova/breaks/StolenChoir.tidal create mode 100644 live/midi/nova/dnb/BreakBass.tidal create mode 100644 live/midi/nova/dnb/MethBass.tidal create mode 100644 live/midi/nova/fm.tidal delete mode 100644 live/midi/nova/instruments/StolenChoir.tidal diff --git a/live/bdmania.tidal b/live/bdmania.tidal index 43f000b..c9d6a01 100644 --- a/live/bdmania.tidal +++ b/live/bdmania.tidal @@ -1,5 +1,5 @@ - once $ s "bd" + once $ s "bd" # speed 3 d1 -- kick -- $ euclid "<4 6>" 4 diff --git a/live/midi/nova/FFF/mad_fonk.tidal b/live/midi/nova/FFF/mad_fonk.tidal index ac471ec..3b0d2a9 100644 --- a/live/midi/nova/FFF/mad_fonk.tidal +++ b/live/midi/nova/FFF/mad_fonk.tidal @@ -48,7 +48,7 @@ do $ novaOn "^41" (<|"k k k k k k k ") $ novaOff "^41" (<|"k . k(<3 5>,8)") -- L'agité $ "[cpu,jazz]" - # gM' 0 2 "^78" + # gM' 0 1.2 "^78" # pan 0.45 d2 $ g $ slow 2 @@ -69,9 +69,7 @@ do d4 $ g -- Bassline $ juxBy 0.5 id $ slow 2 - -- $ whenmod 16 8 ( - -- region reverse cowgirl - $ sometimesBy "^89" rev + $ sometimesBy "^89" rev -- reverse cowgirl $ novaOn "^58" (slice 8 $ "<0!3 1>*2 3*2 <0 1> 4*<2 4 8>") -- Jumpy rappel $ novaOn "^57" (slice 8 $ "<0!3 <1 2>>*8") -- COME ON CRUSH $ novaOff "^57" (slice 8 $ run 8) -- Classique: jumpy groovy @@ -82,7 +80,7 @@ do # pan 0.6 d5 $ g $ gDelay -- Guitare pompe -- region Guitare pompe - $ slice 8 (cat [ + $ novaOn "^59" (slice 8 (cat [ "0*4", "0 1 2 3", "0*4 1 3(3,8) 5", @@ -93,12 +91,12 @@ do "4*4 . 4*<8 16>", "7 0 7 0", "0*4" - ]) $ n 9 + ]) . (# n 9)) -- region INTRO-guitar - -- $ slice 8 ( -- Intro - -- "0(<1 4>,<1 4 8>) . [1*<1 2 4>, 3(<1 3 5>,8)]" - -- ) $ n 11 - # "fguitar" + $ novaOff "^59" (slice 8 ( -- Intro + "0(<1 4>,<1 4 8>) . [1*<1 2 4>, 3(<1 3 5>,8)]" + ) . (# n 11)) + $ "fguitar" # crush (range 10 5.5 "^54") -- CRUSH THIS -- # crush 5.5 -- TODO CRUSH THIS! 12 - 4 - 5 # cut 8 @@ -125,7 +123,7 @@ do # gM' 0.3 1.5 "^83" # cut 6 # pan 0.7 - d7 $ g $ fast 2 $ s "clap" - # lpf 2000 + d7 $ (|- lpf 1000) $ g + $ fast 2 $ s "clap" # gM' 0.3 1.5 "^84" # room 0.4 diff --git a/live/midi/nova/FFF/pray.tidal b/live/midi/nova/FFF/pray.tidal index 515cbd7..dc5a5fd 100644 --- a/live/midi/nova/FFF/pray.tidal +++ b/live/midi/nova/FFF/pray.tidal @@ -63,7 +63,7 @@ d3 $ g -- Metal drumroll d5 -- Fragments of Wiley $ (# lpf (range 5000 200 "^54")) $ g - $ novaOn "^90" (chop 16) + -- $ novaOn "^90" (chop 16) $ novaOn "^58" (slow 4) $ "pray" -- TODO INTRO then /4 # crush (range 10 2.5 "^54") diff --git a/live/midi/nova/breaks/StolenChoir.tidal b/live/midi/nova/breaks/StolenChoir.tidal new file mode 100644 index 0000000..4871633 --- /dev/null +++ b/live/midi/nova/breaks/StolenChoir.tidal @@ -0,0 +1,114 @@ +-- Stolen choir variations + +do -- Break the Choir +-- region moogBass parameters +let cutoff = pF "cutoff" +let lagamount = pF "lagamount" +let rel = pF "rel" +let chorus = pF "chorus" +-- endregion +-- region Nova Utils +let gF = 1.5 -- gain factor +let gG a = (gain (gF * "^77" * a)) -- gain Global +let gM' l h a = (gG (range l h a)) -- gain Modéré +let gM a = (gM' 0.2 0.8 a) -- gain Modéré doux +let novaOn ch pat = someCyclesBy ch pat +let novaOff ch pat = someCyclesBy (1 - ch) pat +let gReverb = ((# room "^29") . (# sz (range 0 0.9 "^30")) . (# dry (range 0 2 "^13"))) +let gLPF = (# lpf (min 10000 ((range 200 20400 ("^49"))))) +let gHPF = (# hpf (max 0 (min 7500 ((range "-7500" 7500 ("^49")))))) +let gDJF = (gLPF . gHPF) +-- endregion Nova Utils +let g = (gDJF . gReverb) +let chords = "" +setcps (80/60/4) +d1 $ g + $ "k ~ . k*2 ~" + # "jazz" + # gM' 0 1.1 "^78" +d2 $ g + $ (# gM' 0.35 0.9 "^79") + $ novaOn "^43" (slow 2) + $ novaOn "^75" (const $ loopAt 1 + $ slice 4 ("<0 0 2 0> <1 1 3 1> 2 3") + $ "breaks165") + $ novaOff "^75" (slice 8 "[~ <0 1>]*4" ) + $ loopAt 2 + $ "fbreak80:1" +d3 $ g + $ sometimesBy "" (# cut 3) + $ sometimesBy "" (# legato "<1!8 2!8>") + $ slice 4 ("<0!4 1!4>*4") $ "choir:4/4" + # pan 0.4 + # legato "<1!8 2!8>" + # gM' 0 1 "^80" +d4 $ g $ slice 8 ("<0!3 1 1 0 1 0>(<3 <1 5>>,8)") $ "choir:4" + # pan 0.8 + # cut 4 + # gM' 0 0.8 "^81" +d5 $ g + $ novaOn "^58" (chop (4 + ("12" * "^90"))) + $ whenmod 4 2 (stutWith 4 "e" (# legato 0.25)) + $ note (chords) + # "moogBass" + # gM' 0.2 0.5 ("^82" / (1 + (0.4) * "^54")) + # crush (range 16 4 "^34") + # chorus (range 0 4 "^54") -- 0.7 + +-- TODO REWORK ARABIC LOOP +do +-- resetCycles +setcps (85/60/4) +d1 + $ mask "" + $ "k . k(<3!3 5 5 5 3 [3 <1 5>]>,8)" + # "[h2ogmbd:0,bd]" +d2 + $ superimpose (const $ + fast "<8!4 [16 <8 8 16 [16 <8 4>]>]!4>" + $ "drum:2") + $ mask "" + $ fast "<2!2 4!4 [4 8 4]!4 [8 4 8 4]!4>" $ "~ snare:21" # gain 0.8 +d3 + $ whenmod 16 8 (scramble "<4 2 4 1> <1 4 8 16>") + $ whenmod 4 3 (rev) + $ note (scale "harmonic" ("0 1 2 3 3 2 1 <0!4 1 1 2 1>")) + # "choir" + # cut 3 + # room 0.5 # dry 0.8 + # pan 0.7 +d4 + $ mask "" + $ off 2 (slice 4 ("0 <1 2> <2 1> 3")) + $ "choir:2/4" + # gain 0.6 + # pan 0.9 + # cut 4 +d5 + $ mask "" + $ "c*<1 <<2 4> [8 4]>>" # "choir:3" + # gain 1 + # cut 5 +d5 + $ mask "" + $ "c*<1 <<2 4> [8 4]>>" # "choir:3" + # gain 1 + # cut 5 + + +do +d1 $ "tech:5*4" # gain 1.4 +d2 + $ whenmod 16 14 (# note "<-1 -2>") + $ fix (|* gain 0.95) (n 4) + $ n "5!7 <4!3 5>" + # "h2ogmcy" + # gain 0.9 + # cut 2 +d4 + -- $ superimpose ((|- note 12) . (# cut 41) . (|* gain 0.8)) + $ note (scale "harmonicMinor" ("0 2 . ~!<1!3 0 0!2 1!2> 3*[0|1] <4 <5 7>>")) + # "choir:1" # gain 1.25 + # octave 4 + # pan 0.2 + # cut 4 diff --git a/live/midi/nova/dnb/BreakBass.tidal b/live/midi/nova/dnb/BreakBass.tidal new file mode 100644 index 0000000..c828bef --- /dev/null +++ b/live/midi/nova/dnb/BreakBass.tidal @@ -0,0 +1,206 @@ +do -- BreakBass: Break to DNB +-- region moogBass parameters +let cutoff = pF "cutoff" +let lagamount = pF "lagamount" +let rel = pF "rel" +let chorus = pF "chorus" +-- endregion +-- region bassWarsaw parameters +let satt = pF "att" +let sdec = pF "dec" +let ssus = pF "sus" +let srel = pF "rel" +let width = pF "width" -- 0.15 +-- , detune = 1.005, preamp = 4 +-- endregion +-- region Nova Utils +let gF = 1.5 -- gain factor +let gG a = (gain (gF * "^77" * a)) -- gain Global +let gM' l h a = (gG (range l h a)) -- gain Modéré +let gM a = (gM' 0.2 0.8 a) -- gain Modéré doux +let novaOn ch pat = someCyclesBy ch pat +let novaOff ch pat = someCyclesBy (1 - ch) pat +let gReverb = ((# room "^29") . (# sz (range 0 0.9 "^30")) . (# dry (range 0 2 "^13"))) +let gLPF = (# lpf (min 10000 ((range 200 20400 ("^49"))))) +let gHPF = (# hpf (max 0 (min 7500 ((range "-7500" 7500 ("^49")))))) +let gDJF = (gLPF . gHPF) +-- endregion Nova Utils +let g = (gDJF . gReverb) +let prog = "<1 1 2 4>" +setcps (120/60/4) +-- resetCycles +d1 $ g + -- $ mask "" + $ novaOn "^42" (<| "k k k k") + $ novaOff "^42" (<| "k . ~ k ~ ~") + $ "[reverbkick,kick:5,kick:9]" + # gM' 0 1 "^78" +d2 $ g + $ whenmod 32 24 (slow 2) + $ "~ s ~ s*<1 2 1 1>" + # "snare:21" + # gM' 0 1.1 "^79" + # note (range "-4" 6 "^51") +d3 + $ g + $ novaOn ("^76") (slice 8 (run 8) . (loopAt 1) . (>| "breaks165")) + $ "d*[8!3 <[8 . 8 4] [16 <4 16>]>]" + # "drum:2" + # gM' 0 1 "^80" +d4 $ g + $ novaOn "^57" (# width 1) + -- $ whenmod 16 8 (|+ note (scale "lydian" ("<4 4 6 7>"))) + $ note (scale "lydian" (prog + "0 . 0(<3!3 5>,8)")) + # "bassWarsaw" + # satt ("^17") + # ssus ("^33") + # octave 2 + # gM' 0.35 1.1 "^81" + # crush (range 10 3.13 "^53") + # legato 0.85 +d5 + $ sometimesBy "<[f t!3]!1 t!7 f!24>" (# silence) + $ g + $ whenmod 4 3 (slice 4 "0 1 2 2") + $ every' 4 2 (slice 4 "0 1 0 1") + $ whenmod 16 8 (chop 16) + $ "choir:4" + # room 0.4 + # gM' 0 0.65 "^82" + # cut 5 +d6 + $ g + $ degradeBy (1 - "1 ^55!7") + $ juxBy 0.8 (rev . chop 2) + $ superimpose (|+ note 12) + $ note (scale "lydian" "<1!3 4> . [1 2] <1 4 4 4>") + # "FMRhodes2" + # octave 4 + # gM' 0.3 0.75 "^83" +d7 + $ mask "" + $ "~ clap" + # gM' 0 1 "^55" + # dry 0.99 # room 0 + # note (-2) +d8 + $ g + $ mask "" + $ slice 8 ("~ <0 0 1 <1 2>>") $ "methbass:2" + # pan 0.8 # room 0.2 + # gain ((range 0 1.3 "^56"* "^77") * (slow 16 $ range 0.45 0.65 sine)) +d9 + $ "<[~ ~ ~ w] w(3,8) w(5,8)>" + # "wobble:1" + # gain ((range 0 1.5 "^56" * "^77") * (slow 16 $ range 0.6 0.9 saw)) + # hpf 200 + # pan 0.8 + # room 0.2 + # cut 21 + + + +do +setcps (120/60/4) +d1 + $ mask "" + $ "k*<1!4 2!3 1> ~ . ~ k*<1!3 2>" # "jazz" # gain 0.9 +d2 + $ mask "" + $ mask "f t f t" + $ slice 4 "0 1 2 3*<1 2>" + $ "fbreak120:6" + # gain 0.65 + # cut 1 +d3 + -- $ mask "" + $ note "<0 0 [3 2] 0>" # "choir" # gain 0.75 # cut 2 + # room 0.2 +d5 + $ scramble 8 + $ slice 4 (run 4) + $ "fguitar:36" + # cut 5 + # pan 0.8 + # gain 0.6 + +d4 + $ note (slow 2 $ scale "lydianMinor" ("<0 1 2 3>")) + # "bassWarsaw" + # octave 2 + # gain 0.9 + # cut 2 + + +d5 $ loopAt 2 $ slice 4 ("0 0 1*2 2") $ "choir:2" # cut 1 # gain 0.55 + + + + +d2 $ g + $ (# gM' 0.35 0.9 "^79") + $ novaOn "^43" (slow 2) + $ novaOn "^75" (const $ loopAt 1 + $ slice 4 ("<0 0 2 0> <1 1 3 1> 2 3") + $ "breaks165") + $ novaOff "^75" (slice 8 "[~ <0 1>]*4" ) + $ loopAt 2 + $ "fbreak80:1" +d3 $ g + $ sometimesBy "" (# cut 3) + $ sometimesBy "" (# legato "<1!8 2!8>") + $ slice 4 ("<0!4 1!4>*4") $ "choir:4/4" + # pan 0.4 + # legato "<1!8 2!8>" + # gM' 0 1 "^80" +d4 $ g $ slice 8 ("<0!3 1 1 0 1 0>(<3 <1 5>>,8)") $ "choir:4" + # pan 0.8 + # cut 4 + # gM' 0 0.8 "^81" +d5 $ g + $ novaOn "^58" (chop (4 + ("12" * "^90"))) + $ whenmod 4 2 (stutWith 4 "e" (# legato 0.25)) + $ note (chords) + # "moogBass" + # gM' 0.2 0.5 ("^82" / (1 + (0.4) * "^54")) + # crush (range 16 4 "^34") + # chorus (range 0 4 "^54") -- 0.7 + + + +once $ slice 8 ("0 1 2 3") $ "choir:4" # gain 0.8 # cut 1 + +-- TODO REWORK ARABIC LOOP +do +-- resetCycles +setcps (85/60/4) +d1 + $ mask "" + $ "k . k(<3!3 5 5 5 3 [3 <1 5>]>,8)" + # "[h2ogmbd:0,bd]" +d2 + $ superimpose (const $ + fast "<8!4 [16 <8 8 16 [16 <8 4>]>]!4>" + $ "drum:2") + $ mask "" + $ fast "<2!2 4!4 [4 8 4]!4 [8 4 8 4]!4>" $ "~ snare:21" # gain 0.8 +d3 + $ whenmod 16 8 (scramble "<4 2 4 1> <1 4 8 16>") + $ whenmod 4 3 (rev) + $ note (scale "harmonic" ("0 1 2 3 3 2 1 <0!4 1 1 2 1>")) + # "choir" + # cut 3 + # room 0.5 # dry 0.8 + # pan 0.7 +d4 + -- $ mask "" + $ off 2 (slice 4 ("0 <1 2> <2 1> 3")) + $ "choir:2/4" + # gain 0.6 + # pan 0.9 + # cut 4 +d5 + $ mask "" + $ "c*<1 <<2 4> [8 4]>>" # "choir:3" + # gain 1 + # cut 5 diff --git a/live/midi/nova/dnb/MethBass.tidal b/live/midi/nova/dnb/MethBass.tidal new file mode 100644 index 0000000..e86a398 --- /dev/null +++ b/live/midi/nova/dnb/MethBass.tidal @@ -0,0 +1,116 @@ +do -- BreakBass: Break to DNB +-- region moogBass parameters +let cutoff = pF "cutoff" +let lagamount = pF "lagamount" +let rel = pF "rel" +let chorus = pF "chorus" +-- endregion +-- region bassWarsaw parameters +let satt = pF "att" +let sdec = pF "dec" +let ssus = pF "sus" +let srel = pF "rel" +let width = pF "width" -- 0.15 +-- , detune = 1.005, preamp = 4 +-- endregion +-- region Nova Utils +let gF = 1.5 -- gain factor +let gG a = (gain (gF * "^77" * a)) -- gain Global +let gM' l h a = (gG (range l h a)) -- gain Modéré +let gM a = (gM' 0.2 0.8 a) -- gain Modéré doux +let novaOn ch pat = someCyclesBy ch pat +let novaOff ch pat = someCyclesBy (1 - ch) pat +let gReverb = ((# room "^29") . (# sz (range 0 0.9 "^30")) . (# dry (range 0 2 "^13"))) +let gLPF = (# lpf (min 10000 ((range 200 20400 ("^49"))))) +let gHPF = (# hpf (max 0 (min 7500 ((range "-7500" 7500 ("^49")))))) +let gDJF = (gLPF . gHPF) +-- endregion Nova Utils +let g = (gDJF . gReverb) +let prog = "<1 1 2 4>" +setcps (160/60/4) +-- resetCycles +d1 $ g + -- $ mask "" + $ novaOn "^42" (<| "k k k k") + $ novaOff "^42" (<| "k . ~ k ~ ~") + $ "[reverbkick,kick:5,kick:9]" + # gM' 0 1 "^78" +d2 $ g + $ whenmod 32 24 (slow 2) + $ novaOn "^75" (slice 8 (run 8) . (loopAt 1) . (>| "breaks165")) + $ novaOff "^75" (<| "~ s ~ s*<1 2 1 1>") + $ "snare:21" + # note (range "-4" 6 "^51") + # gM' 0 1.1 "^79" +d3 + $ g + $ novaOn "^44" (chop 16) + $ slow (slow 2 "<1 2 2 4 4 8 8 8>") + $ "methbass:2" + # cut 1 + # gM' 0.3 1 "^80" +d4 + $ note ("") + # "bassWarsaw" + # crush (range 10 3.13 "^53") + # gM' 0.3 1.4 "^81" +d6 $ g + $ degradeBy (1 - "1 ^55!7") + $ note ("d g . d g ~ <~!3 g>" + "") + # "FMRhodes2" + # pan 0.8 + # octave 4 + # gM' 0.3 1 "^82" +d7 $ g + $ mask "" + $ "~ clap" + # gM' 0 1 "^55" + # dry 0.99 # room 0 + # note (-2) + +-- region SANDBOX +once $ "methbass:3" # cut 1 # gain 0.8 -- Comete + +once $ "methbass:4" # cut 1 # gain 0 -- ALERTE + +d3 + $ g + $ novaOn ("^76") (slice 8 (run 8) . (loopAt 1) . (>| "breaks165")) + $ "d*[8!3 <[8 . 8 4] [16 <4 16>]>]" + # "drum:2" + # gM' 0 1 "^80" +d4 $ g + $ novaOn "^57" (# width 1) + -- $ whenmod 16 8 (|+ note (scale "lydian" ("<4 4 6 7>"))) + $ note (scale "lydian" (prog + "0 . 0(<3!3 5>,8)")) + # "bassWarsaw" + # satt ("^17") + # ssus ("^33") + # octave 2 + # gM' 0.35 1.1 "^81" + # crush (range 10 3.13 "^53") + # legato 0.85 +d5 + $ sometimesBy "<[f t!3]!1 t!7 f!24>" (# silence) + $ g + $ whenmod 4 3 (slice 4 "0 1 2 2") + $ every' 4 2 (slice 4 "0 1 0 1") + $ whenmod 16 8 (chop 16) + $ "choir:4" + # room 0.4 + # gM' 0 0.65 "^82" + # cut 5 +d8 + $ g + $ mask "" + $ slice 8 ("~ <0 0 1 <1 2>>") $ "methbass:2" + # pan 0.8 # room 0.2 + # gain ((range 0 1.3 "^56"* "^77") * (slow 16 $ range 0.45 0.65 sine)) +d9 + $ "<[~ ~ ~ w] w(3,8) w(5,8)>" + # "wobble:1" + # gain ((range 0 1.5 "^56" * "^77") * (slow 16 $ range 0.6 0.9 saw)) + # hpf 200 + # pan 0.8 + # room 0.2 + # cut 21 diff --git a/live/midi/nova/dnb/prepabass.tidal b/live/midi/nova/dnb/prepabass.tidal index 9e4f2ff..c0a942c 100644 --- a/live/midi/nova/dnb/prepabass.tidal +++ b/live/midi/nova/dnb/prepabass.tidal @@ -1,7 +1,4 @@ - - - once $ "methbass:2" # cut 1 # gain 1 -- JUMP once $ "methbass:3" # cut 1 # gain 0 -- Comete diff --git a/live/midi/nova/fm.tidal b/live/midi/nova/fm.tidal new file mode 100644 index 0000000..b2ba62a --- /dev/null +++ b/live/midi/nova/fm.tidal @@ -0,0 +1,43 @@ +:{ + -- sets the amount of operator 'op' in the superfm output mix + -- (1 <= op <= 6) + fmamp :: Int -> Pattern Double -> ControlPattern + fmamp op = pF ("amp" ++ show op) + + -- sets the ratio for operator 'op'. + -- the frequency is note * ratio + detune Hz + -- (1 <= op <= 6) + fmratio :: Int -> Pattern Double -> ControlPattern + fmratio op = pF ("ratio" ++ show op) + + -- set the detune for operator 'op' + fmdetune :: Int -> Pattern Double -> ControlPattern + fmdetune op = pF ("detune" ++ show op) + + -- set the modulation of oerator opa by operator opb + -- if opa == opb, then the modulation amount is multiplied by the + -- 'feedback' parameter + fmmod :: Int -> Int -> Pattern Double -> ControlPattern + fmmod opa opb = pF ("mod" ++ show opa ++ show opb) + + -- feedback + fmfeedback :: Pattern Double -> ControlPattern + fmfeedback = pF "feedback" + + -- Envelope definition: each operator has an envelop with 4 steps + fmeglevel :: Int -> Int -> Pattern Double -> ControlPattern + fmeglevel op step = pF ("eglevel" ++ show op ++ show step) + + -- Envelope definition: sets the rate at which the envelope moves + -- between steps. Low numbers are slow, high numbers are fast. + fmegrate :: Int -> Int -> Pattern Double -> ControlPattern + fmegrate op step = pF ("egrate" ++ show op ++ show step) + +-- Array functions + fmparam function (x:xs) = foldr (#) (function 1 x) (zipWith function [2..] xs) + lfma = fmparam fmamp + lfmr = fmparam fmratio + lfmd = fmparam fmdetune + lfmer op = fmparam (fmegrate op) + lfmel op = fmparam (fmeglevel op) +} diff --git a/live/midi/nova/instruments/AtomicRhodes.tidal b/live/midi/nova/instruments/AtomicRhodes.tidal index f51b9fa..9fda833 100644 --- a/live/midi/nova/instruments/AtomicRhodes.tidal +++ b/live/midi/nova/instruments/AtomicRhodes.tidal @@ -1,7 +1,8 @@ resetCycles do -let gG a = (gain ("^77" * a)) -- gain Global +let gFactor = 1.2 +let gG a = (gain (gFactor * "^77" * a)) -- gain Global let gM' l h a = (gG (range l h a)) -- gain Modéré let gM a = (gM' 0.2 0.8 a) -- gain Modéré doux let novaOn ch pat = someCyclesBy ch pat diff --git a/live/midi/nova/instruments/StolenChoir.tidal b/live/midi/nova/instruments/StolenChoir.tidal deleted file mode 100644 index 2558127..0000000 --- a/live/midi/nova/instruments/StolenChoir.tidal +++ /dev/null @@ -1,120 +0,0 @@ --- Stolen choir variations - - -do -- Break the Choir --- region moogBass parameters -let cutoff = pF "cutoff" -let lagamount = pF "lagamount" -let rel = pF "rel" -let chorus = pF "chorus" --- endregion --- region Nova Utils -let gF = 1.5 -- gain factor -let gG a = (gain (gF * "^77" * a)) -- gain Global -let gM' l h a = (gG (range l h a)) -- gain Modéré -let gM a = (gM' 0.2 0.8 a) -- gain Modéré doux -let novaOn ch pat = someCyclesBy ch pat -let novaOff ch pat = someCyclesBy (1 - ch) pat -let gReverb = ((# room "^29") . (# sz (range 0 0.9 "^30")) . (# dry (range 0 2 "^13"))) -let gLPF = (# lpf (min 10000 ((range 200 20400 ("^49"))))) -let gHPF = (# hpf (max 0 (min 7500 ((range "-7500" 7500 ("^49")))))) -let gDJF = (gLPF . gHPF) --- endregion Nova Utils -let g = (gDJF . gReverb) -let chords = "" -setcps (80/60/4) -d1 $ g - $ "k ~ . k*2 ~" - # "jazz" - # gM' 0 1.1 "^78" -d2 $ g - $ (# gM' 0.35 0.9 "^79") - $ novaOn "^43" (slow 2) - $ novaOn "^75" (const $ loopAt 1 - $ slice 4 ("<0 0 2 0> <1 1 3 1> 2 3") - $ "breaks165") - $ novaOff "^75" (slice 8 "[~ <0 1>]*4" ) - $ loopAt 2 - $ "fbreak80:1" -d3 $ g - $ sometimesBy "" (# cut 3) - $ sometimesBy "" (# legato "<1!8 2!8>") - $ slice 4 ("<0!4 1!4>*4") $ "choir:4/4" - # pan 0.4 - # legato "<1!8 2!8>" - # gM' 0 1 "^80" -d4 $ g $ slice 8 ("<0!3 1 1 0 1 0>(<3 <1 5>>,8)") $ "choir:4" - # pan 0.8 - # cut 4 - # gM' 0 0.8 "^81" -d5 $ g - $ novaOn "^58" (chop (4 + ("12" * "^90"))) - $ whenmod 4 2 (stutWith 4 "e" (# legato 0.25)) - $ note (chords) - # "moogBass" - # gM' 0.2 0.8 ("^82" / (1 + (0.4) * "^54")) - # crush (range 16 4 "^34") - # chorus (range 0 4 "^54") -- 0.7 - - - - - --- TODO REWORK ARABIC LOOP -do --- resetCycles -setcps (85/60/4) -d1 - $ mask "" - $ "k . k(<3!3 5 5 5 3 [3 <1 5>]>,8)" - # "[h2ogmbd:0,bd]" -d2 - $ superimpose (const $ - fast "<8!4 [16 <8 8 16 [16 <8 4>]>]!4>" - $ "drum:2") - $ mask "" - $ fast "<2!2 4!4 [4 8 4]!4 [8 4 8 4]!4>" $ "~ snare:21" # gain 0.8 -d3 - $ whenmod 16 8 (scramble "<4 2 4 1> <1 4 8 16>") - $ whenmod 4 3 (rev) - $ note (scale "harmonic" ("0 1 2 3 3 2 1 <0!4 1 1 2 1>")) - # "choir" - # cut 3 - # room 0.5 # dry 0.8 - # pan 0.7 -d4 - -- $ mask "" - $ off 2 (slice 4 ("0 <1 2> <2 1> 3")) - $ "choir:2/4" - # gain 0.6 - # pan 0.9 - # cut 4 -d5 - $ mask "" - $ "c*<1 <<2 4> [8 4]>>" # "choir:3" - # gain 1 - # cut 5 - -d5 - $ mask "" - $ "c*<1 <<2 4> [8 4]>>" # "choir:3" - # gain 1 - # cut 5 - - -do -d1 $ "tech:5*4" # gain 1.4 -d2 - $ whenmod 16 14 (# note "<-1 -2>") - $ fix (|* gain 0.95) (n 4) - $ n "5!7 <4!3 5>" - # "h2ogmcy" - # gain 0.9 - # cut 2 -d4 - -- $ superimpose ((|- note 12) . (# cut 41) . (|* gain 0.8)) - $ note (scale "harmonicMinor" ("0 2 . ~!<1!3 0 0!2 1!2> 3*[0|1] <4 <5 7>>")) - # "choir:1" # gain 1.25 - # octave 4 - # pan 0.2 - # cut 4 diff --git a/live/midi/nova/superFM.tidal b/live/midi/nova/superFM.tidal index d69c126..abe7f7a 100644 --- a/live/midi/nova/superFM.tidal +++ b/live/midi/nova/superFM.tidal @@ -1,6 +1,5 @@ --- superfm --- 6-op FM synth (DX7-like). Works a bit different from the original DX7. Instead of algorithms, you set the amount of modulation every operator receives from other operators and itself (feedback), virtually providing an endless number of possible combinations (algorithms). - +-- # superfm +-- > 6-op FM synth (DX7-like). Works a bit different from the original DX7. Instead of algorithms, you set the amount of modulation every operator receives from other operators and itself (feedback), virtually providing an endless number of possible combinations (algorithms). -- voice is the preset number: 0 is user-defined; 1-5 are randomly generated presets -- lfofreq is the overall pitch modulation frequency -- lfodepth is the overall pitch modulation amplitude @@ -22,18 +21,287 @@ -- detune1 0.2 (op1 detune) -- eglevel12 0.1 (op1 EG level2) -- egrate11 0.01 (op1 EG rate1) – WARNING: higher values go FASTER! -d2 $ "gretsch*4" -once $ "dirac" # # gain 0.9 --- region DRONEDIM +-- region paul1 functions +do +-- sets the amount of operator 'op' in the superfm output mix +-- (1 <= op <= 6) +-- fmamp :: Int -> Pattern Double -> ControlPattern +let fmamp op = pF ("amp" ++ show op) +-- sets the ratio for operator 'op'. +-- the frequency is note * ratio + detune Hz +-- (1 <= op <= 6) +-- fmratio :: Int -> Pattern Double -> ControlPattern +let fmratio op = pF ("ratio" ++ show op) +-- set the detune for operator 'op' +-- fmdetune :: Int -> Pattern Double -> ControlPattern +let fmdetune op = pF ("detune" ++ show op) +-- set the modulation of oerator opa by operator opb +-- if opa == opb, then the modulation amount is multiplied by the +-- 'feedback' parameter +-- fmmod :: Int -> Int -> Pattern Double -> ControlPattern +let fmmod opa opb = pF ("mod" ++ show opa ++ show opb) +-- feedback +-- fmfeedback :: Pattern Double -> ControlPattern +let fmfeedback = pF "feedback" +-- Envelope definition: each operator has an envelop with 4 steps +-- fmeglevel :: Int -> Int -> Pattern Double -> ControlPattern +let fmeglevel op step = pF ("eglevel" ++ show op ++ show step) +-- Envelope definition: sets the rate at which the envelope moves +-- between steps. Low numbers are slow, high numbers are fast. +-- fmegrate :: Int -> Int -> Pattern Double -> ControlPattern +let fmegrate op step = pF ("egrate" ++ show op ++ show step) +let fmparam function (x:xs) = foldr (#) (function 1 x) (zipWith function [2..] xs) +let fmamps = fmparam fmamp +let fmratios = fmparam fmratio +let fmdetunes = fmparam fmdetune +let envrate op = fmparam (fmegrate op) +let envlevel op = fmparam (fmeglevel op) +d1 + $ stut 2 0.7 0.125 + $ slow 3 $ s "superfm" + |+| note (arp "pinkyup" "[0,4,7,12] [0,5,7,9]" ) + # fmfeedback 1 + # fmamps [1, 1, 1, 0, 0, 0] + # fmratios [1, (range 0 4 (slow 4 sine)), 0.26, 0.5, 0.5, 0.5] + # fmdetunes [0, 1, 0, 0, 0, 0] + # fmmod 1 1 "<0 1.25>" + # fmmod 1 2 (range 0 4 (slow 4 sine)) + # fmmod 1 3 (range 0 4 (slow 3 saw)) + # fmmod 3 2 (range 0 3 (slow 2 sine)) + # envlevel 1 [1, 0.5, 0, 0, 0, 0] + # envrate 1 [10, 0.1, 0.1, 1, 0, 0] + # envlevel 2 [1, 0, 0, 0, 0, 0] + # envrate 2 [1, 0.3, 0.7, 1, 0, 0] + # envlevel 3 [1, 0.2, 0, 1, 0, 0] + # envrate 3 [10, 0.5, 0.4, 1, 0, 0] + # lpf 1000 + # room 0.3 + + + +d1 $ stut 2 0.7 0.125 $ slow 3 $ s "superfm" + |+| note (arp "pinkyup" "[0,4,7,12] [0,5,7,9]" ) + # fmfeedback 1 -- global multiplier for 'fmod x x' feedback parameters. + # fmamp 1 0 -- amplitudes default to '1', so probably need to set all 6 of them... + # fmamp 2 0 + # fmamp 3 1 + # fmamp 4 0 + # fmamp 5 0 + # fmamp 6 0 + # fmratio 1 1 -- oscillator frequency is note * ratio + detune Hz. + # fmratio 2 0.5 -- (range 0.25 20 (slow 3 $ sine)) + # fmdetune 2 1 + # fmratio 3 0.26 + # fmmod 1 1 "0" + # fmmod 1 2 (range 0 4 (slow 4 $ sine)) -- fmod a b Pattern = modulate op a with op b.. + # fmmod 1 3 (range 0 4 (slow 3 $ sine)) + # fmmod 3 2 (range 0 3 (slow 2 $ sine)) + # fmeglevel 1 1 "1" -- envelope generator has 4 rates and 4 steps for each operator... + # fmeglevel 1 2 "0.5" + # fmeglevel 1 3 "0" + # fmeglevel 1 4 "0" + # fmegrate 1 1 "10" + # fmegrate 1 2 "0.1" + # fmegrate 1 3 "0.1" + # fmegrate 1 4 "1" + # fmeglevel 2 1 "1" -- envelope generator has 4 rates and 4 steps for each operator... + # fmeglevel 2 2 "0" + # fmeglevel 2 3 "0" + # fmeglevel 2 4 "0" + # fmegrate 2 1 "1" + # fmegrate 2 2 "0.3" + # fmegrate 2 3 "0.7" + # fmegrate 2 4 "1" + # fmeglevel 3 1 "1" -- envelope generator has 4 rates and 4 steps for each operator... + # fmeglevel 3 2 "0.2" + # fmeglevel 3 3 "0" + # fmeglevel 3 4 "1" + # fmegrate 3 1 "10" + # fmegrate 3 2 "0.5" + # fmegrate 3 3 "0.4" + # fmegrate 3 4 "1" + # room 0.3 + -- # gain 0.7 +-- endregion + + +-- region manual definitions à la Yaxu +do-- modulators +let mod11 = pF "mod11" +let mod12 = pF "mod12" +let mod13 = pF "mod13" +let mod14 = pF "mod14" +let mod15 = pF "mod15" +let mod16 = pF "mod16" +let mod21 = pF "mod21" +let mod22 = pF "mod22" +let mod23 = pF "mod23" +let mod24 = pF "mod24" +let mod25 = pF "mod25" +let mod26 = pF "mod26" +let mod31 = pF "mod31" +let mod32 = pF "mod32" +let mod33 = pF "mod33" +let mod34 = pF "mod34" +let mod35 = pF "mod35" +let mod36 = pF "mod36" +let mod41 = pF "mod41" +let mod42 = pF "mod42" +let mod43 = pF "mod43" +let mod44 = pF "mod44" +let mod45 = pF "mod45" +let mod46 = pF "mod46" +let mod51 = pF "mod51" +let mod52 = pF "mod52" +let mod53 = pF "mod53" +let mod54 = pF "mod54" +let mod55 = pF "mod55" +let mod56 = pF "mod56" +let mod61 = pF "mod61" +let mod62 = pF "mod62" +let mod63 = pF "mod63" +let mod64 = pF "mod64" +let mod65 = pF "mod65" +let mod66 = pF "mod66" +-- operator envelope generator levels +let eglevel11 = pF "eglevel11" +let eglevel12 = pF "eglevel12" +let eglevel13 = pF "eglevel13" +let eglevel14 = pF "eglevel14" +let eglevel21 = pF "eglevel21" +let eglevel22 = pF "eglevel22" +let eglevel23 = pF "eglevel23" +let eglevel24 = pF "eglevel24" +let eglevel31 = pF "eglevel31" +let eglevel32 = pF "eglevel32" +let eglevel33 = pF "eglevel33" +let eglevel34 = pF "eglevel34" +let eglevel41 = pF "eglevel41" +let eglevel42 = pF "eglevel42" +let eglevel43 = pF "eglevel43" +let eglevel44 = pF "eglevel44" +let eglevel51 = pF "eglevel51" +let eglevel52 = pF "eglevel52" +let eglevel53 = pF "eglevel53" +let eglevel54 = pF "eglevel54" +let eglevel61 = pF "eglevel61" +let eglevel62 = pF "eglevel62" +let eglevel63 = pF "eglevel63" +let eglevel64 = pF "eglevel64" +-- operator envelope generator rates +let egrate11 = pF "egrate11" +let egrate12 = pF "egrate12" +let egrate13 = pF "egrate13" +let egrate14 = pF "egrate14" +let egrate21 = pF "egrate21" +let egrate22 = pF "egrate22" +let egrate23 = pF "egrate23" +let egrate24 = pF "egrate24" +let egrate31 = pF "egrate31" +let egrate32 = pF "egrate32" +let egrate33 = pF "egrate33" +let egrate34 = pF "egrate34" +let egrate41 = pF "egrate41" +let egrate42 = pF "egrate42" +let egrate43 = pF "egrate43" +let egrate44 = pF "egrate44" +let egrate51 = pF "egrate51" +let egrate52 = pF "egrate52" +let egrate53 = pF "egrate53" +let egrate54 = pF "egrate54" +let egrate61 = pF "egrate61" +let egrate62 = pF "egrate62" +let egrate63 = pF "egrate63" +let egrate64 = pF "egrate64" +-- operator output levels +let amp1 = pF "amp1" +let amp2 = pF "amp2" +let amp3 = pF "amp3" +let amp4 = pF "amp4" +let amp5 = pF "amp5" +let amp6 = pF "amp6" +-- operator frequency ratios +let ratio1 = pF "ratio1" +let ratio2 = pF "ratio2" +let ratio3 = pF "ratio3" +let ratio4 = pF "ratio4" +let ratio5 = pF "ratio5" +let ratio6 = pF "ratio6" +-- operator frequency detuners +let detune1 = pF "detune1" +let detune2 = pF "detune2" +let detune3 = pF "detune3" +let detune4 = pF "detune4" +let detune5 = pF "detune5" +let detune6 = pF "detune6" +-- other +let feedback = pF "feedback" +let lfofreq = pF "lfofreq" +let lfodepth = pF "lfodepth" d1 -- $ ply "3 4" -- $ ply 2 -- $ superimpose (# octave 3) - -- $ slow 2 - -- $ up (arpeggiate "'min7'") - $ "superfm" - # gain 0.9 - # room 0.5 # sz 0.5 + $ slow 2 + $ up (arpeggiate "") + # "superfm" + # gain 0.65 + # amp1 1 # detune1 20 + # amp2 1 # detune2 1 + -- # room 0.5 # sz 0.5 + -- region Double Saw + # amp1 1 + # amp2 0 + # amp3 1 + # amp4 0 + # amp5 0 + # amp6 0 + # ratio2 1.01 + # mod12 0.75 + # mod34 0.7 + # mod45 0.6 + -- endregion + -- region Double pulse + # amp1 1 + # amp2 0 + # amp3 1 + # amp4 0 + # amp5 0 + # amp6 0 + # ratio2 2.01 + # ratio4 2 + # ratio5 2 + # mod12 0.75 + # mod34 0.7 + # mod45 0.6 + -- endregion + -- region FM Bass + # amp1 1 + # amp2 1 + # amp3 0 + # amp4 0 + # amp5 0 + # amp6 1 + # ratio2 2 + # ratio3 3 + # ratio4 4 + # ratio5 0.5 + # ratio6 0.25 + # feedback 1 + # mod11 1 + # mod16 1 + # mod23 1 + # mod34 1 + # mod45 1 + # mod66 1 + # egrate61 1 + # egrate62 10 + # egrate63 1 + # eglevel62 0.13 + # eglevel63 1.5 + # room 0.5 + -- endregion + -- endregion DRONEDIM diff --git a/live/transe/cosmos.tidal b/live/transe/cosmos.tidal index 1dbb5e8..facd137 100644 --- a/live/transe/cosmos.tidal +++ b/live/transe/cosmos.tidal @@ -11,7 +11,7 @@ once $ "bev" -- Copycat Cosmosis do -resetCycles +-- resetCycles setcps (135/60/4) once -- INTRO NOISE! $ (# delay 0.6) @@ -19,7 +19,7 @@ once -- INTRO NOISE! (# "trump:6") . (# room 1) . (# sz 0.9) . (# legato 2) . (#gain 0.25)) $ note ("a3") # "supergong" # gain 0.45 # voice 0.5 # decay 0.8 # room 0.6 d1 $ mask "" $ "kick:5*4" - # gain 0.75 + # gain 0.7 # lpf 200 d2 -- Snare + metal hihats $ mask "" @@ -38,7 +38,7 @@ d3 -- $ note ("a2*<1!3 2> b2 [a2 b2] [~ <~!8 !8>]") -- Loopable # "supersaw" # cut 1 - # gain 0.45 + # gain 0.55 # voice 0.1 # room 0.1 # sz 0.2 # dry 1 # lpf 5000 @@ -85,6 +85,7 @@ d6 -- Lead saw -- TODO REWORK # lfo (slow 8 saw) # gain 0.4 +d1 $ "bd" # speed (slow 4 $ range 0 10 sine) # gain 0.8 accelerate (0) pitch glide semitone (12) how far off in pitch the secondary oscillator is (need not be integer) -- libgit2 0.27.0