From 84968806dafc858c5fba79ce01b2cdfa331afada Mon Sep 17 00:00:00 2001
From: PLN <pln@PLN-THINK-DEB>
Date: Sat, 20 Mar 2021 00:01:12 +0100
Subject: [PATCH] live: trapped, break90s, lib0.3.1

---
 lib-parvagues/lib-parvagues.cabal                  |   2 +-
 lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs |  16 ++++++++--------
 live/hip/trapped_in_space.tidal                    | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 live/midi/nova/breaks/break_90s.tidal              | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 live/midi/nova/lounge/invoque_ete.tidal            |  36 ++++++++++++++++++++----------------
 live/midi/nova/lounge/top_hats.tidal               |  40 ++++++++++++----------------------------
 live/mood/soothing/tone_down.tidal                 |   5 +++--
 live/mood/tired/afternoon.tidal                    |  17 +++++++++++------
 live/techno/funk/electric.tidal                    |   1 +
 9 files changed, 286 insertions(+), 61 deletions(-)
 create mode 100644 live/hip/trapped_in_space.tidal
 create mode 100644 live/midi/nova/breaks/break_90s.tidal

diff --git a/lib-parvagues/lib-parvagues.cabal b/lib-parvagues/lib-parvagues.cabal
index a866eaa..b8d0813 100644
--- a/lib-parvagues/lib-parvagues.cabal
+++ b/lib-parvagues/lib-parvagues.cabal
@@ -1,5 +1,5 @@
 name:                lib-parvagues
-version:             0.2.1
+version:             0.3.1
 -- synopsis:
 -- description:
 homepage:            https://git.plnech.fr/Tidal
diff --git a/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs b/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs
index ec3c1ff..4d538ad 100644
--- a/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs
+++ b/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs
@@ -4,7 +4,8 @@ module Sound.Tidal.ParVagues.Control (
   midiNo,
   midiDJF,
   midiG,
-  midiG'
+  midiG',
+  midiGGlobal
 ) where
 
   import Sound.Tidal.Context
@@ -12,6 +13,7 @@ module Sound.Tidal.ParVagues.Control (
   import Sound.Tidal.Chords
 
   -- Midi boolean buttons
+  -- midiOn
   midiOn    ch    pat = someCyclesBy ch             pat
   midiOff   ch    pat = someCyclesBy (1 - ch)       pat
   midiNo    c1 c2 pat = someCyclesBy (1 - c1 - c2)  pat
@@ -20,12 +22,10 @@ module Sound.Tidal.ParVagues.Control (
   _LPF lMin lMax ch = (# lpf (min lMax ((range lMin ((lMax*2) - lMin) ch))))
   _HPF hMin hMax ch = (# hpf (max hMin (min hMax (range (hMin - hMax) (hMax - hMin) ch))))
   midiDJF   ch lMin lMax hMin hMax = (_LPF lMin lMax ch) . (_HPF hMin hMax ch)
+  -- FIXME: Seems to cut some lows when lMin != 0
 
   -- Midi gain control (faders)
-  _gainG ch gFactor = (gain (gf * "^77" * ch)) -- gain Global
-  midiG' ch l h
-  midiG
-  -- TODO Finir gain control
-  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
+  midiGGlobal = "^77"
+  _gainG ch     = (gain (midiGGlobal * ch)) -- gain Global
+  midiG' ch l h = _gainG (range l h ch)     -- midiGain   control
+  midiG  ch     = midiG' ch 0 1             -- midiGain   default
diff --git a/live/hip/trapped_in_space.tidal b/live/hip/trapped_in_space.tidal
new file mode 100644
index 0000000..ffd201f
--- /dev/null
+++ b/live/hip/trapped_in_space.tidal
@@ -0,0 +1,110 @@
+-- TRAPPED IN SPACE: Glitchy trap beat
+
+do
+setcps (120/60/4)
+let whenTrap = (whenmod 32 16)
+let prog = "<0 0 0 0 1 2 0 0 1 2 1 2 3 4 1 0>"
+let modIndex = pF "modIndex"
+d1
+  $ whenTrap (|<| "k ~ ~ k . ~")
+  $ "k ~ ~ k . ~"
+  # "reverbkick"
+  # lpf 500
+  # orbit 0
+  # legato 2
+  # room 0.2 # dry 1
+  # gain 0.75
+d2
+  $ "~ hh27:9"
+  # lpf 1000
+  # room 0.87 # dry 0.99
+  # gain 1
+  # orbit 1
+d3
+  $ whenTrap (<| "<~ h*4> <~ h*8>")
+  $ "h*<4 8> h*<8!3 16>"
+  # "[hh27:3,dr]"
+  # gain (slow 16 $ range 0.5 0.8 saw)
+  # lpf 4500
+  # orbit 0
+d4
+  $ whenTrap (
+    (|+ note 12)
+    . (# hpf 1500)
+    . (# lpf 10000)
+    . (# crush (slow 16 $ range 8 3.5 saw) -- Sync whenTrap
+    )
+  )
+  $ whenmod 4 3 (scramble 6)
+  $ whenmod 4 3 (scramble 6)
+  $ whenmod 8 4 rev
+  $ mask "<t f>"
+  $ note (scale "aeolian" (
+    "<~!3 5 ~!4> . 0 1 3 2 0"
+    + "[0]"
+    + prog
+  ) - 24)
+  # "arpy"
+  # gain (slow 24 $ range 0.55 0.75 perlin)
+  # lpf 500
+  # room 0.3
+  # orbit 4
+  # crush 4
+d5
+  $ whenTrap (
+    (# crush (slow 16 $ range 10 5 saw)) -- Sync 16/whenTrap
+    . (|+ gain (slow 16 $ range 0 0.15 saw)) -- Sync whenTrap
+  )
+  $ note (scale "aeolian" (
+    "0 . 0 [0 1]"
+    + prog
+    ) - 24)
+  # orbit 4
+  # "supersaw"
+  # voice 0.1
+  # pan 0.2
+  # gain (slow 16 $ range 0.35 0.55 perlin)
+d6
+  $ note (scale "aeolian" (
+    whenmod 16 9 (+ "<0 -1 -2 -4>")
+    "0*[16 8]"
+    ))
+  # "hh27:4" -- Clochettes
+  # gain (slow 16 $ range 0.5 0.8 saw)
+d7 -- ARPS <3
+  $ degradeBy (slow 8 $ range 0.8 0.2 saw)
+  $ fast "1 2"
+  $ arp "pinkyup"
+  $ note (scale "aeolian" (
+      "<0 ~> 0"
+      + prog)
+      + "0 -12"
+  )
+  # "FMRhodes1"
+  # modIndex "[0,5,10]"
+  # pan 0.6
+  # gain 0.9
+
+
+
+
+once $ "hh27:0" -- Drum metal echo
+  -- # gain 1.5
+
+once $ "hh27:1" -- Ho lo
+once $ "hh27:7" -- Ho hi
+once $ "hh27:10" -- Ho hi soft
+
+once $ "hh27:2" -- Maracas fermées
+once $ "hh27:9" -- Maracas fermées lo
+
+once $ "hh27:3" -- Maracas ouvertes / balai
+once $ "hh27:8" -- Same plus aigu
+
+once $ "hh27:4" -- Clochettes
+
+once $ "hh27:5" -- Kick neige
+once $ "hh27:6" -- Kick sec
+
+once $ "hh27:12" -- Snare lo
+once $ "hh27:11" -- Snare hi
diff --git a/live/midi/nova/breaks/break_90s.tidal b/live/midi/nova/breaks/break_90s.tidal
new file mode 100644
index 0000000..30d8a6f
--- /dev/null
+++ b/live/midi/nova/breaks/break_90s.tidal
@@ -0,0 +1,120 @@
+import Sound.Tidal.ParVagues.Control
+
+-- Accompagnement en ré au https://mmontag.github.io/dx7-synth-js/
+
+setcps (80/60/4)
+resetCycles
+
+do
+let gG a = (gain (1 * "^77" * a)) -- gain Global
+let gF = (whenmod 16 12 (# djf (slow 4 $ range 0 0.5 sine)))
+let gDJF = (midiDJF "^49" 0 10000 0 10000)
+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 g = (gF . gDJF)
+d1
+  $ g
+  $ midiOn "^41" (superimpose (# "kick:5")
+  . (<| "k k k k k k k k*2")
+  . (# room 0)
+  . (|* gain 0.9)
+  )
+  $ midiOn "^42" (mask "<f!8 t!24>")
+  $ whenmod 4 2 (off (-1/"<8 16>") (
+    degradeBy "0 1!7" . (|* gain 0.9))
+  )
+  $ midiOff "^41" (
+    someCyclesBy "<0!8 1!8>" (<| "k . k(<5 <3 [3 <8 [8!3 4]>]>>,8)")
+   . someCyclesBy "<1!8 0!8>" (<| "k . <~!4 k!4>" )
+  )
+  $ "reverbkick"
+  # room 0.4 # sz 0.8 # dry 0.99 # orbit 1
+  # midiG' "^78" 0 1.5
+d2
+  $ g
+  $ midiOn "^43" (slice 4 "0 1")
+  $ midiOff "^43" (
+    slice 4 (
+    "0 1*[1|2] 2 3*<1 1 2 <2 4>>" -- Progressif
+    -- "0 <~ 0 1 ~> <0 0 2 2> <~ 0 2 3>" -- Broken
+  ))
+  $ "fbreak80:2"
+  # midiG' "^79" 0 1.5
+  # pan 0.6
+  # cut 2
+d3 -- Bassline
+  $ (# lpf (range 10000 500 "^53"))
+  $ g
+  $ midiOn "^89" (off "h" (
+    -- mask "t f"
+    (# speed 2)
+    . (# cut 31)
+    . (|* gain 0.8)
+    . (|+ gain 0.1)
+  ))
+  $ loopAt 2
+  $ midiOn "^57" ( -- Le slice
+    whenmod 16 4 (
+      slice 4 "0 1 2*2 <0 3>"
+    ) . every' 16 3 (
+      slice 4 "0 1 2 [2 3]"
+    )
+  )
+  $ midiOff "^57" ( -- L'attente
+    slice 4 "0 <~ 1> <~ ~ 2 2> <~!3 3>"
+  )
+  $ "fbass:9"
+  # cut 3
+  # crush (range 10 4 "^53")
+  # pan 0.2
+  # midiG' ("^81" + 0.125*"^53") 0 1.5
+d4
+  $ g
+  $ superimpose (const
+    $ whenmod 8 4 (degrade)
+    $ segment 8 $ "fmono:9"
+    # midiG' "^55" 0.2 1.2
+    # cut 42)
+  $ midiOn "^59" (superimpose (
+    degradeBy ("0 1!14 0" * (slow 16 $ (1-"^55")))
+    . struct "t*16"
+    . (|+ note (12 + "[0|5]"))
+    . (|* gain (slow 16 $ range 0.9 0.5 sine))
+    . (# cut 41)
+  ))
+  $ slice 8 ("<~ 3 ~ 2> 0 <~ 4 5 6> <0 1>")
+  $ "forgan:9" # cut 5
+  # orbit 4
+  # room 0.7 # sz 0.8
+  # midiG' "^83" 0.2 0.8
+d5 $ g
+  $ midiOn "^58" (superimpose (
+    (0.5 ~>)
+    . fast "<1!8 2!8 4!8 1!4 2!4 4!8>"
+    . (|+ note ("12"))
+    . (|* gain 1.2)
+    . (|+ pan 0.125)
+  ))
+  $ sometimesBy 0.125 ("1/32" ~>)
+  $ whenmod 16 4 (|+| note "<0!4 [0 a4]!4>")
+  $ note "<d3!3 [g3 . ~ a4]>"
+  # "superpiano"
+  # velocity (0.35 + perlin/8)
+  # room 0.6 # sz 0.5
+  # pan 0.6
+  # orbit 5
+  # midiG' "^82" 0.3 1.5
+d8 $ g
+  $ someCyclesBy (slow 8 $ saw) (juxBy 0.3 rev)
+  $ whenmod 16 8 (ply "2 1")
+  $ "hh27:2(<4 5 8 [8 16]>,8)"
+  # pan 0.8 # room 0.4 # orbit 8 # dry 0.9
+  # midiG' "^80" 0 1.5
+d9
+  $ whenmod 16 12 (
+    fast 2 . (|* gain (slow 4 $ range 1 0.5 saw))
+  )
+  $ midiOn "^60" (fast 2 ) -- TODO DNB
+  $ "~ clap"
+  # release "<0.25!3 0.125 0.25!4 0.125!4>"
+  # midiG' "^84" 0 1.5
diff --git a/live/midi/nova/lounge/invoque_ete.tidal b/live/midi/nova/lounge/invoque_ete.tidal
index a86b369..e5c2775 100644
--- a/live/midi/nova/lounge/invoque_ete.tidal
+++ b/live/midi/nova/lounge/invoque_ete.tidal
@@ -15,36 +15,40 @@ setcps (115/60/4)
 d1 $ g
   $ novaOn "^41" (<| "k k k <k!3 k*2>")
   $ novaOff "^41" (<| "k*2")
-  $ "[jazz,808bd:1]"
+  $ "[reverbkick,jazz,808bd:1]"
   # gM' 0 1.2 "^78"
-d2
+d2 $ g
   $ novaOn "^75" (fast 2)
-  $ (|* gain
-    "0.75 1 1 1 0.75 1 1 1" )
+  $ (|* gain "0.75 1 1 1 0.75 1 1 1")
   $ "d ~ ~ d d ~ d <~!3 d>"
-  # "snare:22" # gM' 0 1.2 "^79"
+  # "snare:22" # gM' 0 1.4 "^79"
   # speed (range 0.5 1.5 "^51")
 d4 $ g
-  $ novaOn "^44" (slow 2)
-  $ novaOn "^76" (slice 8 ("0 1 2 3 <4 0> <5 1>  6 7") . (loopAt 2) . (>| "fbreak80:2") .
-  (# gM' 0 1.5 "^80")
-  )
-  $ (|* gain (slow 2 $ range 1 1.1 perlin))
-  $ novaOff "^76" (<| "s*[8 . 16 8 8]" )
-  $ "snare:26"
-  # speed (range 0.5 1.5 "^52")
-  # gM' 0 1 "^80"
+  $ midiOn "^44" (slice 8 "0 <1 ~> 7 3*<1 2 4 4>")
+  $ sometimesBy "0 ^32!7" (shuffle 8)
+  $ someCyclesBy "^52" (iter 4)
+  -- $ slice 8 "0 1 <2!3 0> <3!3 1 4 5 6 7>" "0 1 <2!3 0> <3!3 1>"
+  $ chop 8
+  $ loopAt 2 $ "breaks125:3"
+  # gM' 0 1.5 "^80"
   # cut 4
 d5 $ g
   $ loopAt 2
   $ slice 8 (run "<4!4 8 8 [4 8 4] 8>")
   $ "fbass:13"
   # pan 0.2
-  # gM' 0.4 1.1 "^81"
   # room 0.2
   # crush (range 10 4.5 "^53")
+  # gM' 0.3 1.1 "^81"
   # cut 4
 d6 $ g
+  $ someCyclesBy "^58" (superimpose (
+    degradeBy (slow 8 $ sine) . segment 8
+    . (# speed 1)
+    . (|* gain (0.5 + 0.1 * perlin)) . (|+ pan 0.1)
+    . (# cut 31)
+    )
+  )
   $ whenmod 16 12 (rev)
   $ whenmod 8 4 (chop 4)
   $ loopAt 4
@@ -84,7 +88,7 @@ d8 $ g
   # gM' 0 1 "^84"
   # pan (segment 16 $ "^36")
 d9 $ g
-  -- $ whenmod 8 4 (juxBy 0.5 rev)
+  $ degradeBy (slow 16 $ range 0.8 0.2 saw)
   $ struct "t(3,8) [<t!3 [~ t]> <t ~> <t t*2> <t*2 t t*2 t*2>]"
   $ novaOn "^59" (# speed (range 0.25 2 ("^55" + perlin)))
   $ novaOff "^59" (# speed
diff --git a/live/midi/nova/lounge/top_hats.tidal b/live/midi/nova/lounge/top_hats.tidal
index 9bacf49..49e5864 100644
--- a/live/midi/nova/lounge/top_hats.tidal
+++ b/live/midi/nova/lounge/top_hats.tidal
@@ -12,7 +12,7 @@ let modIndex = pF "modIndex" -- 0.2
 let gG a = (gain (1.2 * "^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 gDJF = midiDJF "^49" 200 10000 0 7500
+let gDJF = midiDJF "^49" 0 10000 0 7500
 let g = (gDJF)
 setcps 0.5
 d1 $ g
@@ -31,6 +31,7 @@ d3
   $ g
   $ whenmod 16 8 (often $ fast 2)
   $ someCyclesBy "<1!16 0!16>" (often $ slow "2!3 1")
+  $ fix ((|* gain 0.9) . (# release 0.8)) (n 9)
   $ "hh27*8"
   # n "2 <2 <[2|9] [9 <9 ~> <~ 9> 2]>>"
   # gM' 0.5 1.75 "^80"
@@ -42,7 +43,7 @@ d4
     . fast "1 2"
     . arp "pinkyup"
     . (|+ pan 0.1)
-    . (|* gain 1.25)
+    . (|* gain 1.2)
   ))
   $ note ((
     "<0 ~> 0"
@@ -54,7 +55,7 @@ d4
   # modIndex "[0,5,10]"
   # pan 0.6
   # crush (range 10 4 "^54")
-  # gM' 0.3 1.5 "^82"
+  # gM' 0.3 1.6 "^82"
 d5 $ g -- Choirs + arps
   $ juxBy "-0.7" (
     arp "<up <up down>>"
@@ -65,7 +66,7 @@ d5 $ g -- Choirs + arps
   $ "moogBass"
   # note prog
   # octave 3
-  # gain 0.75
+  # gM' 0.3 1.5 "^56"
   # pan 0.2
   # chorus 0.6
 d6 $ g -- Guitar riffs
@@ -74,7 +75,7 @@ d6 $ g -- Guitar riffs
   . (# cut 61)
   ))
   $ slice 4 (
-    whenmod 16 8 (+| "0 0")
+    whenmod 16 8 (+| "0 <0!6 ~ ~>")
     "<0!4 1 1 2 3>"
   )
   $ note 2 -- correction
@@ -100,26 +101,9 @@ d8 $ g
   # cut 8
   # gM' 0 1.5 "^83"
   # release 100
-d9 $ g $ "~ clap" # note (-8) # gM' 0 1.5 "^84"
-
-
-once $ "hh27:0" -- Drum metal echo
-  # gain 1.5
-
-once $ "hh27:1" -- Ho lo
-once $ "hh27:7" -- Ho hi
-once $ "hh27:10" -- Ho hi soft
-
-once $ "hh27:2" -- Maracas fermées
-once $ "hh27:9" -- Maracas fermées lo
-
-once $ "hh27:3" -- Maracas ouvertes / balai
-once $ "hh27:8" -- Same plus aigu
-
-once $ "hh27:4" -- Clochettes
-
-once $ "hh27:5" -- Kick neige
-once $ "hh27:6" -- Kick sec
-
-once $ "hh27:12" -- Snare lo
-once $ "hh27:11" -- Snare hi
+d9 $ g
+  $ midiOn "^60" (fast 2 . ply "1 <1 <2!3 1>>")
+  $ midiOn "^92" (fast 4)
+  $ "~ clap"
+  # note (-8)
+  # gM' 0 1.5 "^84"
diff --git a/live/mood/soothing/tone_down.tidal b/live/mood/soothing/tone_down.tidal
index 6ae7726..d11cbb2 100644
--- a/live/mood/soothing/tone_down.tidal
+++ b/live/mood/soothing/tone_down.tidal
@@ -1,8 +1,9 @@
+resetCycles
+setcps (60/60/4)
+
 -- DIGITAL DREAMS OF MINITEL REVIVAL
 -- Techno numérico-mélancolique résolvable
 do
-resetCycles
-setcps (60/60/4)
 let mel = "c <f d'min'2> <d <c'min d'maj>> <af <e'maj'2 e'min'2 af'maj'2>> <g!12 c5!4>@4"
 d1 -- BEAT
   -- $ slow 2-- TODO Resolve :)
diff --git a/live/mood/tired/afternoon.tidal b/live/mood/tired/afternoon.tidal
index 0151554..2e1277d 100644
--- a/live/mood/tired/afternoon.tidal
+++ b/live/mood/tired/afternoon.tidal
@@ -1,5 +1,6 @@
-do
 resetCycles
+
+do
 setcps (60/60/4)
 let mel = "<e3 [g3 <a3 f3>] e3 b3>"
 let prog = "<e3 [g3'maj7'2 f3'min'2] e3 <b3'min7'2 b3'maj7'2>>"
@@ -8,9 +9,10 @@ d1 -- BEAT + Snares
     whenmod 4 3 (ply "2 4")
     . fast "<1!4 2!10 4 [4 8]>"
     . (# n "[3,11]")
-    . (# gain 0.75)
+    . (# gain 0.6)
     ) ("snare")
-  $ "jazz(<1!3 <3 5>>,8) snare" # gain 0.7
+  $ "[jazz,bd](<1!3 <3 5>>,8) snare" # gain 0.8
+  # room 0.2 # sz 0.6
 d2 -- BREAK
   $ whenmod 32 16 (# djf (slow 32 (cosine + 0.5)))
   $ slice 8 (
@@ -23,10 +25,13 @@ d2 -- BREAK
   # gain 0.65
   # cut 2
 d6 -- Nappes Rhodes
-  $ note prog
+  $ note (
+    prog
+    + "0 12"
+  )
   # "FMRhodes1"
   # pan 0.2
-  # gain 0.9
+  # gain 1.1
 d7 -- Hello PWM
   $ note (mel - 12)
   # "superpwm"
@@ -34,4 +39,4 @@ d7 -- Hello PWM
   # accelerate "<0!7 <6 12>>"
   # rate "<1!5 2 4 <1 4>>"
   # resonance (slow 32 $ range 0.2 0.6 sine)
-  # gain (slow 128 $ range 0.5 0.65 saw)
+  # gain (slow 32 $ range 0.65 0.85 saw)
diff --git a/live/techno/funk/electric.tidal b/live/techno/funk/electric.tidal
index 0b89402..5c32a1e 100644
--- a/live/techno/funk/electric.tidal
+++ b/live/techno/funk/electric.tidal
@@ -1,5 +1,6 @@
 resetCycles
 -- ElectricFunk: TODO less electric feel bass
+
 do
 setcps (110/60/4)
 let gDjfLeg = (whenmod 64 32 (# djf (slow 32 $ range 0.2 0.8 sine)))
--
libgit2 0.27.0