-- region Mad Funk: joyeuse intro techno-funk, partant run 160bpm
-- Tags: Techno, run, funk, crushade
-- Ready: 9.5/10
resetCycles
-- endregion

do
  solo 1 -- Kick
  solo 2 -- Snare roll/rush
  solo 3 -- Drumroll
  solo 4 -- Bassline
  solo 5 -- Guitare intro/pompe
  solo 6 -- Epiano groovy
  solo 7 -- Claps from grace
  let bpm = 80 -- Que tu crois!
  setcps (bpm/60/4)
  solo 10 -- NOISES
  d10 $ funk_noise
  d1
    $ every' 8 7 (# lpf 200)
    -- region Pauses Hip-hop
    $ whenmod 8 6 (juxBy 0.5 rev)
    -- $ "k . k(<3 <5 4>>,8)" -- Le simple
    -- $ "k*<1!4 2!4> . k(<3!3 <5 8>>,8)" -- L'agité
    -- region hardkick
    -- $ whenmod 32 16 (
    --   superimpose (
    --     (# "hardkick:4")
    --     . (sometimes (stut 2 0.8 "s"))
    --     . (# legato 0.9)
    --     . (|* gain 0.65)
    --     )
    -- )
    -- region INTRO/Run
    -- $ slow 2 -- intro
    -- $ whenmod 8 6 (# silence)
    $ "k k k k k k k <k [~ k] k*2>"
    # "[<reverbkick!3 ~>,kick:5]"
    # gain 0.75
    # pan 0.45
  d2
    $ someCycles (hurry 2)
    $ juxBy 0.75 rev
    -- region Manual snare rush
    -- $ "~ s*4"
    -- $ "~ s*<1!4 2!4 4!2 8 4!4 16 2!3 [4 8] [16 32]>" -- FIXME Rework
    $ "~ s*<1 2 4 8 4 2 1 4 8 8 4 8 1 2 8 4>" -- FIXME Rework
    # "snare:3"
    # note ("<0 -1 -2 -3>")
    # gain 0.65
    # pan (slow 8 $ range 0.4 0.8 sine)
  d3 -- Drumroll
    -- $ slow 8 -- OUTRO
    $ fast (slow 8 "<1 [2 [2|4]] 4 [4 8]>" )
    $ ply "2 <4 8>" $ "drum:8"
    # gain (slow 4 $ range 0.65 0.95 saw)
    # pan (slow 8 $ range 0.2 0.6 cosine)
  d4  -- Bassline
    $ juxBy 0.5 id
    $ slow 2
    $ whenmod 16 8 (
      -- region reverse cowgirl
      sometimesBy "0 1" rev)
    $ slice 8
    (
      -- iter (slow 4 "<1 4>")
      -- run 8 -- Classique: jumpy groovy
      "<0!3 1>*2 3*2 <0 1> 4*<2 4 8>" -- Jumpy rappel
      -- "<0 4 0 0*2> 4 <0 1 2 3> <0 4!2>" -- Attente
      -- "<0!3 <1 2>>*8" -- COME ON CRUSH
    )
    $ "fbass:8"
    # legato 1
    # crush (1.5 + "6 <5 4>") -- TODO CRUSH THIS
    # gain 0.85
    # pan 0.6
  d5 -- Guitare pompe
    $ whenmod 64 32 ( -- TODO Renverse
      someCyclesBy "<0.5!16 0.9!16>" rev
    )
    -- region Guitare pompela
    $ slice 8 (cat [
      "0*4",
      "0 1 2 3",
      "0*4 1 3(3,8) 5",
      "4 5 6 7",
      "0 7 4 7",
      "[0 4]*4",
      "7 <7 6> <3 5> <7 4>",
      "4*4 . 4*<8 16>",
      "7 0 7 0",
      "0*4"
    ]) $ 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"
    # crush 5 -- TODO CRUSH THIS! 12 - 4 - 5
    # cut 8
    # gain (slow 64 $ range
      -- 0.7 0.9
      0.6 0.8
    cosine)
    # pan 0.3
  d6 -- Epiano groovy
    $ whenmod 32 16 (whenmod 4 2 (jux rev)) -- TODO variations once introduced
    $ slow 2
    -- $ mask "f(<1!16 2!16>,2,<1!4 0!4>)" -- TODO INTRO MASK THIS
    $ slice 8 (
      -- "0 3 2 1 4 5 6 7*<1 2>" -- regulier
      "0 3 2 1 0 3 <2 6> 7" -- regulier
      -- "0 3 2 1!5" -- repeat aigu
      -- "4!5 5 6 7*<1 2>" -- repeat end
    )
    $ s "fepiano"
    # n (slow 8 "<24 25>")
    # gain 0.7
    # cut 6
    # pan 0.7


9 -- ritournelle
10 -- pause fin
11 -- montee finale?

once $ s "fepiano:0" # gain 0.95 # cut 19

solo 10