diff --git a/BootTidal.hs b/BootTidal.hs index 2b5ba0e..0fdaada 100644 --- a/BootTidal.hs +++ b/BootTidal.hs @@ -68,5 +68,40 @@ let setI = streamSetI tidal setB = streamSetB tidal :} +:{ +let modIndex = pF "modIndex" + mix = pF "mix" + vibrato = pF "vibrato" + chorus = pF "chorus" + lagamount = pF "lagamount" + dec = pF "dec" + sus = pF "sus" + cutoff = pF "cutoff" + drumMachine name ps = stack + (map (\ x -> + (# s (name ++| (extractS "s" (x)))) $ x + ) ps) + drumFrom name drum = s (name ++| drum) + drumM = drumMachine + drumF = drumFrom + -- 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 + midiBoth c1 c2 pat = someCyclesBy (c1 + c2 - 1) pat + -- Parameterized DJF + _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) + midiGGlobal = "^77" * 1.3 + _gainG ch = (gain (midiGGlobal * ch)) -- gain Global + midiG' ch l h = _gainG (range l h ch) -- midiGain control + midiGdef = midiG' 1 0 1 -- midiGain default + midiG ch = midiG' ch 0 1 -- midiGain default +:} + :set prompt "tidal> " -- :set prompt-cont "" diff --git a/backlog.md b/backlog.md index 19028c8..529fdf4 100644 --- a/backlog.md +++ b/backlog.md @@ -1,8 +1,17 @@ +# MASTER/RELEASE +-- It's About Time [Take1?] +-- Burn this book +-- SlowMo: Orchestrated, ready to record :) + + # Study - [MathMusic](https://amath.colorado.edu/pub/matlab/music/MathMusic.pdf) + # Coop ## RAPH +- Ragga la hierarchie :D +- HAN! - Rainbow Race !!! - OldSkoolRadius: Raph -- Diable with Raph @@ -25,9 +34,50 @@ # Work in progress +## Beatober +- Oct4: Techno recorded once, peaufine :) +- Oct5: DNB wobwob - manque leads/aigus? +- Oct29: Can I code it? +- BECAUSE it's There <33 + +## INDUSTRY + -- No Panic! + +-- **ABLETON**: + - **Around the Bass** - develop and run! + - Punk Teng with raph! + - The Good Bass! + - Tour du ciel + - _Prestance_: Ambient wip + + -- **Sel Marin**: Nuit noire dans la mer noire, TODO varier bass +-- **_Bain bouillant_**: sub bass and jungle breaks :) +-- Wild Coffee: Complainte Jungle Paradisiaque -- bonne intro? +-- Monday Fairy +-- MauerPark! +-- La canopee: recorded :) +-- **Premier mai**: Shiloh techno +-- **Premiere Grillade**: LoFi soleil :) +-- Green Land: Fusion celtique break-to-hardcore +-- Barriere Bleue: Au contact du pavé +-- Clameur: Pour clem :) + +-- **Nouveau Soleil** : Debut multi techno record!! +-- *Lendemain Divin*: develop basslines :) + +- **Before**: Before it starts... +- It's about Time! BURNING BITS & ACID BUMPS +- BURN THIS BOOK! TECHNO CBOW BURNING FIRE + - r1 :) +- _Breathe_: From lofi breathing exercise to nes drumfest + - + +- LatinCore: is it latin or Core? + + - *Step silence*: Techno rhythms and dirty basses --- Midnight breaking: breakbeat+chip midnight tentative +-- **Midnight breaking**: breakbeat+chip midnight tentative -- *Maudits insectes*: Techno nappée d'insectes bruités - Soleil Enthousiaste: LoFi ensoleillée basse+rhodes+break @@ -79,7 +129,7 @@ - Hors Amsterdam: LoFi/breakbeat instru, keys too much - *Back Baby*: Lofi/Techno? guitar epiano slicé! -- LoFi/SlowMo: Lent mouvement minimaliste 😘 +- **LoFi/SlowMo**: Lent mouvement minimaliste 😘 - Louge/Michael: Techno PianoShards + SynthChoir - HelloFi: intro to Lofi :) - Disco/High: Techno -> HiNRJ Disco 8) @@ -387,7 +437,7 @@ La voix de l'Ordre: Monotonal drone <> breakbeat > BASSL1NE, V01CES - *Solar & Lunar* ->Retro sunset +> Retro sunset - *Alerte verte!* > Tout le monde sur le pont @@ -397,8 +447,6 @@ La voix de l'Ordre: Monotonal drone <> breakbeat - - ## Live Algolia FDLM2022 :metal: ### TODO: @@ -424,3 +472,230 @@ La voix de l'Ordre: Monotonal drone <> breakbeat - Nightly Repair 💪 - Alerte verte 🚨 - **Invoque l'Été** \o/ + +## Live @CMNY #2 +- It's about Time ⏰ + +- Michael 🎩 +- Atari-ght 🎮 +- Solar? 🌇 +- Lunar! 🎑 +- Contre visite 👓 +- Lucy Rhodes 🌳 +- Empreinte du 💻[🎀] +- Nightly Repair 💪 +- Invoque l'Été \o/ + +- Nova Bossera 💃 [🎀] + + +## Live @MephisTeuf 😈‍💻😈 +> Cette nuit t'appartient +> Il ne t'en coutera presque rien +> Serre-donc ma robotique main +> Et scelles-y ton destin + + + + + + + + + + +- TOP HATS 🌠🎩🎩🎩🌠 + +### 🌃🪐 LIVE Noctambule 🌙🌃 + +- Intro _🚪 Contre-Visite 👁️‍_ +- Sunset __🌈 ATARI-ght? 🎩__ +- Darkness __🧙 Burn this B00K 🧙__ +- Sunrise __⏳🕕 It's About TIME ⌚⏰__ +- Bonus? __🌅 Solar 🌅__ + + +### <3 Live Love <3 + +- Something about us +- Best Part [Unplugged] +- Dream a little dream of Me [Unplugged] +- Until I found U +- Killing me Softly +- Can't Help Falling in Love [Unplugged] +- U remind me + + ⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣶⣤⡀⢀⣤⣶⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀ + ⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀ + ⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄ + ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ + ⠀⣿⣿⣿⣿⣿⣿ ALGORHYTHM ⣿⣿⣿⣿⣿⣿⠀ + ⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀ + ⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀ + ⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +# LIVE @Algolia | Gotta Love a Plan B <3 + +## Intro: Même l'hiver a une fin +- Invoque l'Été + +## Le jour est court +- Solar + +## La nuit est LONGUE +- Contre Visite +- Empreinte du Numerique +- Break the Loop +- **Alerte Verte** + +## Sun always rises + + +# Bazurto Live@Tignes +> Pour Montagnettes <3 + +## _Apéritif_ +- _Invoque l'été_ + + +## _Entrée_ +- _Solar_ +- **Lunar** + +## _Accompagnement_ +- *Michael* +- *Nightly Repair* +- *Contre visite* + +## _Plat de résistance_ +- _Burn this Book_ + +## _Dessert_ +- _Break the Loop_ +- _Atari-ght: techno retro gaming_ + +## _Dernier Verre_ +- Alerte Verte + +## __Digestif__ +- It's About Time + + +# Live toi toi mon toit + +-- Premiere Grillade +-- Break Dynasty +-- Clameur +-- Nouveau Soleil +-- It's About Time <3 + +# Divin Live + +## Pour _Demeter_ <3 + +-- Accueil: *Green Land* +-- Paradis perdu: *Break Dynasty* +-- Véneration: *Venons ensemble* +-- Idoles: *Nouveau Soleil* +-- (Pluie): *Contre Visite* +-- Nuit: *AtaRight* +-- Bouquet : *It's About Time* +-- Rite Final: **Été à MauerPark** + + +-- Bonus: Le quart d'heure de politesse +-- Invoque l'été +-- Alerte VERTE + + +# CANCELED Live @Orléans - Labomedia's festival :fire: + +Premiere grillade? +Premier Mai! +It's about TIME +_Contre Visite_! +**Nouveau Soleil**!!! +Green Land + +!**Ataright**! +Empreinte du numerique! + +Alerte verte? +**Mauerpark <3** [Triste finale] + +[Venons Ensemble - Clear?] +Break Dynasty? +Clameur? Brouillon? + +--- +--- +--- +--- + + +# DevCon23 Performance + + █████╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ █████╗ + ██╔══██╗██║ ██╔════╝ ██╔═══██╗██║ ██║ ██╔══██╗ + ███████║██║ ██║ ███╗██║ ██║██║ ██║ ███████║ + ██╔══██║██║ ██║ ██║██║ ██║██║ ██║ ██╔══██║ + ██║ ██║███████╗╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ + ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ + + ██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗ ███╗ ██╗ + ██╔══██╗██╔════╝██║ ██║██╔════╝██╔═══██╗████╗ ██║ + ██║ ██║█████╗ ██║ ██║██║ ██║ ██║██╔██╗ ██║ + ██║ ██║██╔══╝ ╚██╗ ██╔╝██║ ██║ ██║██║╚██╗██║ + ██████╔╝███████╗ ╚████╔╝ ╚██████╗╚██████╔╝██║ ╚████║ + ╚═════╝ ╚══════╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ + + ██████╗ ██████╗ ██████╗ ██████╗ + ╚════██╗██╔═████╗╚════██╗╚════██╗ + █████╔╝██║██╔██║ █████╔╝ █████╔╝ + ██╔═══╝ ████╔╝██║██╔═══╝ ╚═══██╗ + ███████╗╚██████╔╝███████╗██████╔╝ + ╚══════╝ ╚═════╝ ╚══════╝╚═════╝ + +## PreShow with Chuck [15mn] +-- _SlowMo_ [Background] +-- **Lendemain Divin** +-- **Invoque l'été** + + +## Sessions Break [15mn] +-- _Before_ +-- **Nouveau Soleil** +-- *Premiere Grillade* +-- *Été à Mauerpark* + +# VelociTeuf + + +## REPAIR MULTILINE +-- Reboot +-- Nouveau soleil + +## Adapt to DAW, removing midiG calls +-- Oct4 +-- About time + +## READY FOR MIX +-- Premiere Grillade +-- Rainy day + + +## READY FOR TAKEOFF +-- Intro: Contre Visite... +-- ...Rainy day + +### **VELOCITE** +-- Bain bouillant +-- Acid RAIN +-- No Time to Die +-- Haunted house + +-- _Finale_: **L'été a Mauerpark** diff --git a/copycat/bad_guy.tidal b/copycat/bad_guy.tidal index 9985c04..e3d59b5 100644 --- a/copycat/bad_guy.tidal +++ b/copycat/bad_guy.tidal @@ -183,10 +183,10 @@ d4 -- Brass voice "", "c6@2 ~!3" -- bad -- 76 TODO fin ]) - # "brass" + # "brass" # "moogBass" -- FIXME RESTORE BRASS SAMPLES! # legato "<0.75!7 1>" # room 0.2 - # gain 0.5 + # gain 0.8 d6 -- synth Chorus $ note (cat [ "","","","","","","","", -- Intro diff --git a/copycat/because_its_there.tidal b/copycat/because_its_there.tidal new file mode 100644 index 0000000..2ccd43e --- /dev/null +++ b/copycat/because_its_there.tidal @@ -0,0 +1,78 @@ +once $ "bassWarsaw" + +do +setcps (110/60/4) +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMute2 = (midiOn "^74" (mask "f*16")) +let gMute3 = (midiOn "^75" (mask "f*16")) +let gM = gMask . gMute +let gM2 = gMask . gMute2 +let gM3 = gMask . gMute3 +d1 $ gF1 $ gM2 + $ midiOn "^42" (<| "k k k k*2") + $ midiOff "^42" (<| "k") + $ fix ((|* gain 0.9) . (# lpf 1000)) "jazz" + $ fix ((# att 0.02) . (# rel 0.5) . (# lpf 400)) "kick:4" + $ "[jazz,kick:4]" +d2 $ gF1 $ gM $ "~ sn ~ sn" # "[snare:5,snare:19]" +d3 $ gF1 $ gM -- Hats ouverts legers + $ midiOn "^76" (ply 2) + $ midiOff "^44" (mask "t(4,8)") + $ "ho:0*8" + # att 0.25 + # rel 0.05 + # gain "1 0.9 1 0.8 <0.9!3 1.05> 1" +d4$ gF2 $ gM3 + $ midiOn "^57" ((|+ note 12) . (# freeze 0.8)) + $ sometimesBy (1 - "^17") (mask "[t@6 ]") + $ note "[cs3@6 gs3 ds3]" + # crushbus 41 (range 16 2.5 "^53") + # octersubbus 42 (range 0 2.5 "^33") + # octersubsubbus 43 (range 0 5 "^33") + # squizbus 44 (range 0 2 "^17") + # roombus 45 (range 0 0.5 "^53") + # "bassWarsaw" +d7 $ note "" + # legato 0.125 + # room 0.8 + # sz 0.4 # dry 1 + # "ikedaBass" + # modIndex 0 + # crushbus 71 (range 16 4.5 "^55") + # lpf 1500 + # att 0.4 + # rel 0.9 + # delay 0.9 + # delayfb 0.2 + # delayt 0.75 +d9 $ gF3 $ gM3 -- Aterrissage sur venus + $ note "gs5/2" + # "FMRhodes1" + # legato 0.25 + # delay 0.9 + # delayt 1 + # delayfb 0.25 + # modIndex 0 + # pan "0.1" +d10 + $ note "" + # "90s_synatm:0" + # room 0.4 # sz 0.9 + # cut 10 + # lpfbus 101 (slow 8 $ range 3000 1500 sine) +d7 $ note ("" + "0(3,8) 0(3,8)" + "[0,12]") + # "giorgio_syn:7" + -- # lpf 500 + # orbit 6 + # octersubbus 102 (range 0 2 "^55") + # gain 0.8 +d5 $ note "[]" |+| "0 ~ ~ 0 ~ <~!2 0 ~> 0 ~" + # "FMRhodes1" + # room 0.8 # sz 0.1 # dry 1 + # rel 2 + # gain 0.7 + # orbit 4 diff --git a/copycat/demi_portion.tidal b/copycat/demi_portion.tidal new file mode 100644 index 0000000..82cfbb0 --- /dev/null +++ b/copycat/demi_portion.tidal @@ -0,0 +1 @@ +-- TODO: VHS Rhythmic section 2:30-3:00 diff --git a/gifts/snowfight.tidal b/gifts/snowfight.tidal new file mode 100644 index 0000000..d3ff9ab --- /dev/null +++ b/gifts/snowfight.tidal @@ -0,0 +1,204 @@ +E b d e + +once $ "dr" + + +-- V2: Reboot base mi tension si +do +let gF = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.15 0.85 "^50")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gM = gMask . gMute +let modIndex = pF "modIndex" +let scale = getScale (scaleTable ++ [("snow", [4,6,7,9,11,12,15])]) +setcps (90/60/4) +d1 $ gF $ gMute -- HEARTBEAT TODO: Allege? + $ superimpose (# "kick:5") + $ midiOn "^74" (ply 2) + $ midiOff "^42" (<| "k . ~ ~ ~ <~!7 k*<1 2>> <~!3 k>") + $ midiOn "^42" (<| "k k k k]>") + $ "tek_strange:1" + # legato "e" + # room 0.2 + # lpf 1000 + # note "<-3 <-1!3 -5>>" + # midiG' "^78" 0 1.4 +d2 $ gF $ gM $ "~ cp ~ cp" -- FIXME: Change le snare + # gain 0.8 + # room 0.9 + # sz 0.8 + # lpf 5000 + # dry 1 + # midiG' "^79" 0 1.4 +d3 $ gF $ gM -- Drums juxés - FIXME DRUMROLL <3 + $ fix ( + struct "~ t ~ t ~ t ~ t*2" + . (# "[dr,tek_hh:0]") + . (|* gain 0.66) + . (# room 0.4) + ) "juxed" + $ fix ( + struct "~ t ~ t*2 ~ t ~ t" + . (# "[tek_hh:0]") + . (|* gain 0.7) + ) "base" + $ jux ( + ((# "juxed")) + ) + $ "base" + # midiG' "^80" 0 1.4 + # room 0.2 + # dry 1 +d4 $ gF2 $ gMask -- BASSLINE - TODO Sometimes double hit + $ note (scale "snow" ("<[0@7 <-2!3 1>] <[-3@7 -1]!3 -3>>") + - 12 + ) + # "bassWarsaw" + # midiG' "^81" 0 1.2 + # room 0.4 # sz 0.8 # dry 1 + # lpf 3000 +d5 $ gF2 -- MadKeys - Todo allege? + $ midiOn ("^58") (off "e" id) + $ note (-24 + scale "snow" ("[0(3,8)]*4" + ("[0 1 2 3]" + "4 4 4 <3 4>") + -- + "<0!4 4!4>" + )) + # "FMRhodes1" + -- # hpf 500 + # modIndex (range 0 12 "^34") + # crushbus 51 (range 16 4 "^54") + # legato 0.5 + # midiG' "^82" 0 1.5 +d6 $ gF $ gM -- Break salvateur + -- $ chop 4 + $ midiOff "^20" (mask "") + $ slice 4 "<[<0 2>]!8 [<0 2> <1 3>]!8 [0 1 <2!3 0> <3!3 1*<1 2>>]!8 [0 1 2 3 [0 1] [1 2] [2 3] [2 3]]!8>" + $ loopAt 1 + $ "breaks165" + # cut 6 + # pan 0.2 + # octersub 0.8 + # octersubsub 0.9 + # lpf 4000 + # midiG' "^84" 0 1.5 +d8 -- TODO Finir Choeurs glitchés + $ slice 8 (run "<4 4 8 16>") + $ "voice/2" + -- # "voices_balkan:2" + # "voices_celtic" # n "<2 3>" + # pan 0.8 + # midiG' "^83" 0 1 + # cut 8 +d9 + $ note (scale "snow" ("0 1 2 3 0 1 2 3" + "0 <0!3 3>")) + # "moogBass" # legato 0.2 + # midiG' "^83" 0 1 + + + + + + +-- V1: Yay, voices + + +do +let gF = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMutePont = (mask "") +let gM = gMask . gMute . gMutePont +setcps (100/60/4) +d1 $ gMute + $ gF + $ midiOn "^42" ( + superimpose (const + $ "<[k k k ]!64 [[k . k(<3!3 <5 [5 8]>>,8)],[~ . k(<0 1 3 1>,8,4)]]!64>" + # "jazz:0" # room 0 + # midiG' "^78" 0 1.6 + ) + ) + $ " . ~!3 <~ k>" + # n "[6,7,20]" + # room 0 + # "808bd" + # midiG' "^78" 0 1.4 +d2 $ gMute $ gF -- Snare n.r.v. + $ "<[~ s]!8 [~ s ~ s]!8>" + # "snare:70" + # octer 0.8 + # octersub 4.2 + # pan 0.6 + # midiG' "^79" 0 1.4 +d3 $ gF $ gM + $ midiOn "^44" (fast "2 <2 <4 [4 8 4 16]>>") + $ midiOn "^76" (fast "2 <2 <4 [4 8 4 16]>>") + $ "dr dr dr dr" + # "[dr,drum:2]" + # hpf 500 + # midiG' "^80" 0 1.4 +d5 $ gF $ gM -- Break nuageux + $ chop 16 + $ loopAt 1 + $ "breaks165" + # lpf 3000 + # cut 5 + # midiG' ("^80" * "^52") 0 1.4 +d4 $ gF2 -- BassLine + $ superimpose ( -- ELECTRICITY + (# cut 41) . + (# crushbus 41 (range 16 4 "^53")) + . (# legato 4) . (# room 4) + . (|* gain 0.8) + . (# panbus 42 (range "<0.5!3 0.9>" "<0.9!3 0.5>" saw)) + ) + $ note ("]>" - 24) + # "bassWarsaw" + # legato 1 + # cut 4 + # room 0.4 + # dry 0.9 + # sz 0.8 + # midiG' "^81" 0 1.4 +d6 $ gF2 -- Heyah! + $ whenmod 4 3 (mask "t . t f") + $ slice 4 "0 0 1 [3 ~]" + $ chop 4 + $ "voices_persian:2/2" + # speed 0.8 + # octersubsubbus 61 (range 0 2.4 "^56") + # cut 6 + # midiG' "^84" 0 1 +d10 -- READY FOR THIS MAN? + $ mask ">" + $ someCyclesBy "" (ply "<1 2>" . (slice 5 0)) + $ someCyclesBy "" (slice 3 1) + $ "voices_reggae:7" # cut 9 + # midiG' "^83" 0 1 + + + +-- TOO GOSPEL? +d5 -- Chorus 1 + $ whenmod 64 48 (-- MYMYMY + -- (ply "<1!4 2 [2 4] [2 8 4] [8 4 16]>") . + (# n "<5 6 7 8 5 6 5 6 7 8 7 8 9 10 9 10>") + -- . (superimpose ((# cut 51) . (# crush 4))) + ) + $ n "<0!4 0 1 2 3>" + # "g_gospel3" + # cut 5 + # pan 0.13 + # room 0.4 + # dry 1 + # midiG' "^83" 0 1 +d6 -- Chorus 2 + $ slice 3 "<0!4 1!4>" + $ "g_gospel3:23" + # room 0.58 + # dry 1 + # legato 2 + # hpf 600 + # pan 0.8 + # midiG' "^84" 0 0.9 diff --git a/init_midi.sh b/init_midi.sh new file mode 100644 index 0000000..eb92af0 --- /dev/null +++ b/init_midi.sh @@ -0,0 +1,58 @@ +#! /usr/bin/env sh +# Init Midi +# Depends on sendmidi being installed: +# https://github.com/gbevin/SendMIDI + +# Knobs +# DJFs +sendmidi dev in0 cc 49 64 +sendmidi dev in0 cc 50 64 +sendmidi dev in0 cc 51 64 +# Effects +sendmidi dev in0 cc 52 0 +sendmidi dev in0 cc 53 0 +sendmidi dev in0 cc 54 0 +sendmidi dev in0 cc 55 0 +sendmidi dev in0 cc 56 0 +sendmidi dev in0 cc 13 0 +sendmidi dev in0 cc 14 0 +sendmidi dev in0 cc 15 0 +sendmidi dev in0 cc 16 0 +sendmidi dev in0 cc 17 0 +sendmidi dev in0 cc 18 0 +sendmidi dev in0 cc 19 0 +sendmidi dev in0 cc 20 0 +sendmidi dev in0 cc 29 0 +sendmidi dev in0 cc 30 0 +sendmidi dev in0 cc 31 0 +sendmidi dev in0 cc 32 0 +sendmidi dev in0 cc 33 0 +sendmidi dev in0 cc 34 0 +sendmidi dev in0 cc 35 0 +sendmidi dev in0 cc 36 0 +# Faders +sendmidi dev in0 cc 77 72 +sendmidi dev in0 cc 78 46 +sendmidi dev in0 cc 79 46 +sendmidi dev in0 cc 80 46 +sendmidi dev in0 cc 81 46 +sendmidi dev in0 cc 82 46 +sendmidi dev in0 cc 83 46 +sendmidi dev in0 cc 84 46 +# Buttons +sendmidi dev in0 cc 41 0 +sendmidi dev in0 cc 42 0 +sendmidi dev in0 cc 43 0 +sendmidi dev in0 cc 44 0 +sendmidi dev in0 cc 57 0 +sendmidi dev in0 cc 58 0 +sendmidi dev in0 cc 59 0 +sendmidi dev in0 cc 60 0 +sendmidi dev in0 cc 73 0 +sendmidi dev in0 cc 74 0 +sendmidi dev in0 cc 75 0 +sendmidi dev in0 cc 76 0 +sendmidi dev in0 cc 89 0 +sendmidi dev in0 cc 90 0 +sendmidi dev in0 cc 91 0 +sendmidi dev in0 cc 92 0 diff --git a/live/midi/nova/beatober/oct_16_haunted_house.tidal b/live/midi/nova/beatober/oct_16_haunted_house.tidal index 9567be2..e0fda3a 100644 --- a/live/midi/nova/beatober/oct_16_haunted_house.tidal +++ b/live/midi/nova/beatober/oct_16_haunted_house.tidal @@ -15,14 +15,14 @@ let modIndex = pF "modIndex" d1 $ gM2 $ gF1 -- Kick solide $ fix ((|* gain 0.9) . (# lpf 1000)) "jazz" $ fix ((# att 0.02) . (# rel 0.5) . (# lpf 5000)) "kick:4" - $ midiOn "^42" (struct "t*4") + $ midiOn "^42" (struct "t t t t*<1!6 2 2>") $ midiOff "^42" (<| "k . ~ <~!3 k> ~ ~") - $ "[jazz,kick:4]" # lpf 3000 + $ "[jazz,kick:4]" -- # midiG' "^78" 0 1.5 d2 $ gM1 $ gF1 -- snare contretemps variable - $ fix (|* gain 0.7) "cp" - $ midiOn "^43" (<| "~ cp ~ cp") + $ fix ((|* gain 0.8) . (# legato 0.05)) "cp" + $ midiOn "^43" (<| "~ cp ~ cp*<1 1 2 <1 2>>") $ midiOff "^43" (<| "~ cp") $ "[cp,snare:24]" # pan 0.65 @@ -36,7 +36,8 @@ d3 $ gM1 $ gF1 d4 -- Basse convaincante $ gM3 $ gF2 $ whenmod 64 32 (# drybus 41 (slow 32 $ range 1.9 1 saw)) - $ midiOn "^89" (ply "<[4@5 2 4 2] 1>") + -- $ midiOn "^89" (ply "<[4@5 2 4 2] 1>") + $ midiOn "^57" (segment "<4 [4 <8 8 16 16>]>") $ someCyclesBy (1 - "^17") (struct "") $ rarely (ply "1@5 1 <1!3 2> [<1 2> <1 1 1 2>]") $ note "@5 ef3 d3 " @@ -48,6 +49,9 @@ d4 -- Basse convaincante # pan 0.4 |* gain "1@5 0.95 0.98 0.95" d5 $ gF3 -- Appel oiseau joyeux oiseau joyaux + $ midiOn "^58" ( -- Oiseau de nuit + rev . (|+ note "<<0 0 [0 -7] [0 -7]>!3 [0!3 -12]>") + ) $ mask "<[[t ] ]!8 t!24 t!96>" -- g c ef g / g c ef f / gs c ef f / gs c ef g -- g c ef g / g c ef f / gs c ef gs / gs c ef g @@ -83,7 +87,8 @@ d6 $ gF1 -- HAWKS # dry 1.025 -- # room 0 -- # midiG' "^31" 0 1.5 -d7 $ gM2 $ gF3 -- High carillon! +d7 + $ gM2 $ gF3 -- High carillon! $ midiOn "^59" ( -- Basse reponse superimpose ((0.125 <~) . (|* gain 1.2) . (# note "") . (# pan 0.45)) ) @@ -104,6 +109,7 @@ d9 $ gF3 -- Pads atmospheriques # cut 9 # legato 2 -- # midiG' "^20" 0 1.4 # pan 0.4 + # gain 1 # room 0.4 d10 $ mask "" @@ -112,7 +118,7 @@ d10 # cut 10 -- # midiG' "^13" 0 1.3 -- # gain (1.3 * "^77") - # gain 1.3 + # gain 1 d11 $ mask "" $ note ("~ " + 4) diff --git a/live/midi/nova/beatober/oct_29_can_i_code_it.tidal b/live/midi/nova/beatober/oct_29_can_i_code_it.tidal new file mode 100644 index 0000000..2b66aa5 --- /dev/null +++ b/live/midi/nova/beatober/oct_29_can_i_code_it.tidal @@ -0,0 +1,118 @@ +do +setcps (90/60/4) +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMute2 = (midiOn "^74" (mask "f*16")) +let gMute3 = (midiOn "^75" (mask "f*16")) +let gM = gMask . gMute +let gM2 = gMask . gMute2 +let gM3 = gMask . gMute3 +d1 $ gM2 $ gF1 + $ midiOn "^42" (<| "k k k [k*2 ]") + $ midiOff "^42" (<| "k . k(<3 [3 <5 4 5 8>]>,8)") + $ "[jazz, kick:5,808bd:2]" + # gain 0.8 +d2 $ gM $ gF1 + $ fix (# lpf 200) "snare:15" + $ "~ s [~!3 <~!3 s ~ s ~ s>] s*<1!7 2>" + # note "0 0 -2 0" + # "[snare:55,snare:15]" + # gain 0.9 +d3 $ gM $ gF1 + $ rarely (off "[s|e]" (|* gain 0.93)) + $ midiOn "^76" (mask "t(<24 32 32 24>,32)" . ply "1 2 1 2") + $ midiOn "^44" (ply 2) + $ "d*8" + # note 3 + # drumFrom "mpc1000" "sd:4" + # pan 0.2 + |* gain (fast 2 $ segment 16 $ range 0.85 1.1 perlin) +d4 $ gMute3 $ gF2 -- Can I? + $ slow 2 + $ note ("<[a3@3 ~ ~ ~ ~ ] [e3@3 ~ ~ ~ ~ g3]>" + "[0,12]" - 12) + # modIndex (range 0 4 "^53") + # "FMRhodes2" + # delay "<0.5!3 0>" + # delayt 0.5 + # delayfb 0.5 + # room 0.2 # dry 1.1 # sz 0.8 + # gain 1.2 # cut 4 +d5 $ gF3 $ gM3 -- BURNING IT + $ midiOn "^58" (# freeze 0.5) + $ whenmod 32 24 (off 0.25 ( -- Final angels + mask "t(<4 8>,16,1)" + . (|+ note 12) + . fast "2" + -- . (# freeze 0.1) + . (# crushbus 51 (slow 8 $ range 8.5 2.3 saw)) + . (# roombus 52 (slow 8 $ range 0 0.5 saw)) + . (# dry 1.4) + . rev + . (# cut 52)) + ) + $ whenmod 16 8 ( -- Echoes of masked figures + off 1 ((|+ note 12) + . ply "<1!3 2 2!3 4>" + . whenmod 32 16 (rev) + . (# cut 51))) + $ slow 2 $ note "<[a4 [b4 ] ~ ~ . ~]>" + -- $ note ("]>") + # "giorgio_syn:5" + # cut 5 + # pan (slow 32 $ range 0.8 0.6 saw) + # distortbus 53 (range 0 2 "^54") + # room 0.5 # sz (slow 16 $ range 0.4 0.8 saw) + # delaybus 54 (range 0 2 "^34") + # delayt 0.25 + # delayfb 0.8 + # gain 0.6 +d8 $ gM $ gF3 + $ (# pan "0.13@3 0.87") + $ midiOn "^92" (ply "2 <2!3 4>") + $ midiOn "^36" (chop 16 . loopAt 0.25 . (|> "jungle_breaks:1")) + $ midiOff "^36" (slice 16 ("<0 2 2 0> <1 3 3 1> <2 6> <3 <7 3>>")) + -- $ slice 16 (run 16) + $ loopAt 4 + $ "jungle_breaks:10" + -- # att 1.01 + # rel 2 + # cut 8 + # orbit 7 +d7 $ gM $ gF1 + $ loopAt 4 + $ chop 8 + $ n "<0!4 5!4>!3 <0 4>" + # "drums_gameboy" + # cut 7 + # pan 0.2 + # orbit 6 +d9 $ gF3 $ n "<64!3 65>/4" + # "90s_megafx:64" + # cut 9 + # gain 0.7 +d10 + $ (0.75 ~>) + $ "<~!7 90s_synatm:4>" + # note "[-12]" + -- # hpf 1500 + # accelerate 4 + # gain 0.7 + # panbus 101 (range 1 0.7 saw) + # pan 0.9 + # cut 10 + # room 0.8 # dry 2 # sz 0.5 + # delay 0.85 + # delayt 2 + # delayfb 0.7 + +once $ "fx_commodore" + + + + +once $ note "g4" # "superfork" + # orbit 4 + # accelerate 2 diff --git a/notes.md b/notes.md index b5390e2..060526d 100644 --- a/notes.md +++ b/notes.md @@ -741,3 +741,77 @@ region BonusBreak 28 30(120BPM).wav endregion +--> + +# Drum machines +AJKPercusyn +AkaiLinn +AkaiMPC60 +AkaiXR10 +AlesisHR16 +AlesisSR16 +BossDR110 +BossDR220 +BossDR55 +BossDR550 +CasioRZ1 +CasioSK1 +CasioVL1 +DoepferMS404 +EmuDrumulator +EmuModular +EmuSP12 +KorgDDM110 +KorgKPR77 +KorgKR55 +KorgKRZ +KorgM1 +KorgMinipops +KorgPoly800 +KorgT3 +Linn9000 +LinnDrum +LinnLM1 +LinnLM2 +MFB512 +MoogConcertMateMG1 +MPC1000 +OberheimDMX +RhodesPolaris +RhythmAce +RolandCompurhythm1000 +RolandCompurhythm78 +RolandCompurhythm8000 +RolandD110 +RolandD70 +RolandDDR30 +RolandJD990 +RolandMC202 +RolandMC303 +RolandMT32 +RolandR8 +RolandS50 +RolandSH09 +RolandSystem100 +RolandTR505 +RolandTR606 +RolandTR626 +RolandTR707 +RolandTR727 +RolandTR808 +RolandTR909 +SakataDPM48 +SequentialCircuitsDrumtracks +SequentialCircuitsTom +SergeModular +SimmonsSDS400 +SimmonsSDS5 +SoundmastersR88 +UnivoxMicroRhythmer12 +ViscoSpaceDrum +XdrumLM8953 +YamahaRM50 +YamahaRX21 +YamahaRX5 +YamahaRY30 +YamahaTG33 diff --git a/releases/Minneapolis/cover.jpg b/releases/Minneapolis/cover.jpg new file mode 100644 index 0000000..2dfa9b9 Binary files /dev/null and b/releases/Minneapolis/cover.jpg differ diff --git a/releases/NassArrive/cover.jpg b/releases/NassArrive/cover.jpg new file mode 100644 index 0000000..bac543b Binary files /dev/null and b/releases/NassArrive/cover.jpg differ diff --git a/releases/NassArrive/cover.png b/releases/NassArrive/cover.png new file mode 100644 index 0000000..f819e6e Binary files /dev/null and b/releases/NassArrive/cover.png differ diff --git a/start_and_midi.scd b/start_and_midi.scd index e6ff454..cf079b9 100644 --- a/start_and_midi.scd +++ b/start_and_midi.scd @@ -50,7 +50,8 @@ if (~stopMidiToOsc != nil, { // ~stopMidiToOsc.value; // MIDI OUT -// ~midiOut = MIDIOut.newByName("iO4", "iO4 iO4"); // Alesis iO4 +//~midiOut = MIDIOut.newByName("iO4", "iO4 iO4"); // Alesis iO4 +//~midiOut = MIDIOut.newByName("HAPAX", "HAPAX MIDI 1"); /* @@ -66,9 +67,10 @@ This is an example startup file. You can load it from your startup file s.options.numBuffers = 1024 * 256; // increase this if you need to load more samples // Increased from 8192 * 32 s.options.memSize = 8192 * 32; // increase this if you get "alloc failed" messages -s.options.numWireBufs = 128; // increase if "exceeded number of wire buffer" messages +s.options.numWireBufs = 64; // increase if "exceeded number of wire buffer" messages s.options.maxNodes = 1024 * 32; // increase this if you are getting drop outs and the message "too many nodes" -s.options.numOutputBusChannels = 2; // set this to your hardware output channel size, if necessary +s.options.numOutputBusChannels = 12; // set this to your hardware output channel size, if necessary +s.options.numOutputBusChannels = 24; // MULTICHANNEL SETUP s.options.numInputBusChannels = 2; // set this to your hardware output channel size, if necessary // boot the server and start SuperDirt s.waitForBoot { @@ -78,10 +80,30 @@ s.waitForBoot { // for example: ~dirt.loadSoundFiles("/Users/myUserName/Dirt/samples/*"); ~dirt.loadSoundFiles("/home/pln/.local/share/SuperCollider/downloaded-quarks/Dirt-Samples/*"); ~dirt.loadSoundFiles("/home/pln/Work/Sound/Samples/extra/*"); + + // DRUM MACHINES + ~drumMachinesDir = PathName.new("/home/pln/Work/Sound/Samples/tidal-drum-machines/machines"); + ~machines = ~drumMachinesDir.folders; //All drum machines + //*~machines = ['Linn9000','RolandTR909']; //Selected drum machines + + + ( + ~machines.do({ + arg machine; + var folders = machine.folders; +// postln("Loading machine: "++machine.folderName); + folders.do({ + arg folder; + ~dirt.loadSoundFiles(folder.fullPath,namingFunction: { |x| x.basename.replace("-","")}); + }); + }); + ); + // s.sync; // optionally: wait for samples to be read - ~dirt.start(57120, 0 ! 12); // start listening on port 57120, create two busses each sending audio to channel 0 + //~dirt.start(57120, 0 ! 12); // start listening on port 57120, create two busses each sending audio to channel 0 + ~dirt.start(57120, [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]); // start listening on port 57120, MULTICHANNEL - ALSO UPDATE NUMOUTPUT - //~dirt.soundLibrary.addMIDI(\midi, ~midiOut); // Connect `midi` synth to iO4 + // ~dirt.soundLibrary.addMIDI(\midi, ~midiOut); // Connect `midi` synth to iO4 //~looper = TidalLooper(~dirt); // Start TidalLooper on top :) // ~looper.linput = 1; @@ -118,5 +140,5 @@ s.waitForBoot { }; s.volume = 1; -s.latency = 1; // increase this if you get "late" messages +s.latency = 0.3; // increase this if you get "late" messages ); diff --git a/study/ableton/basslines.tidal b/study/ableton/basslines.tidal new file mode 100644 index 0000000..09d6cb3 --- /dev/null +++ b/study/ableton/basslines.tidal @@ -0,0 +1,111 @@ +-- Study: Ableton Learning Music +-- https://learningmusic.ableton.com/make-basslines/good-life.html +let lineGoodLife = "b3 ~ ~ b3 ~ ~ b3 ~ ~ fs3 ~ ~ fs3 ~ ~ a3 ~ a3 ~ a3 ~ ~ e3 ~ ~ e3 ~ e3 b3 ~ b3 ~" +let lineAround0 = "~ ~ ~ ~ a4 ~ ~ ~ a4 ~ ~ ~ a4 ~ b4 c5" -- [0,1,2,3] +let lineAround1 = "~ ~ ~ ~ c5 ~ ~ ~ c5 ~ ~ ~ c5 ~ d5 e5" +let lineAround2 = "~ ~ ~ ~ e5 ~ ~ ~ e5 ~ ~ ~ e5 ~ ~ ~" +let lineAround3 = "fs5 ~ e5 ~ d5 ~ c5 ~ b4 ~ a4 ~ g4@3 a4" +let lineTeng = "cs d d d cs d d d cs d d d g ~ fs ~" +let lineNever = "<[~ ~ c5 b4 a4 ~ ~ ~] [~ >> a4 ~ ~ ~]>" +let lineOblivion1 = "d4 d4 d5 a4 d4 a4" -- [1,1,2,2] +let lineOblivion2 = "b4 b4 b5 fs4 b4 fs4" + +do +setcps (148/60/4) +let lineLoveTear = "e4@8" +d1 $ "jazz" +d2 $ "~ clap:2" +d4 $ note () # "FMRhodes1" + +-- Exercise in space +do +setcps (127/60/4) +let lineNever = "<[~ ~ c5 b4 a4 ~ ~ ~] [~ >> a4 ~ ~ ~]>" +d1 $ loopAt 2 $ "break:1" + # cut 1 # gain 0.8 +d4 + $ note (lineNever) + # "bass:4" # att 0.1 # rel 2 # lpf 4000 + # gain 1.1 + +do -- Oblivious to your synths +let lineOblivion1 = "d4 d4 d5 a4 d4 a4" +let lineOblivion2 = "b4 b4 b5 fs4 b4 fs4" +d4 + $ note (cat [lineOblivion1,lineOblivion1,lineOblivion2,lineOblivion2]) + # "cs80leadMH" + # att 0.1 # rel 1 + # room 0.4 + # cut 4 + +do +setcps (82/60/4) +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMute2 = (midiOn "^74" (mask "f*16")) +let gM = gMask . gMute +let gM2 = gMask . gMute2 +d1 $ gF1 $ gM + $ midiOn "^42" ((<| "k k k k k k > k*<1 2 2 2>") . (# "[jazz:0]")) + $ midiOff "^42" (<| "k . <~!4 k!4 k(3,8)!8>") + $ "[rootsDrums:0,rootsDrums:4]" + -- $ "[techno,jazz,kick:5]*4" + # midiG' "^78" 0 1.5 +d3 $ gF1 $ gM + $ "[~ drum:2]*8" + # midiG' "^80" 0 1.5 +d4 $ gF2 $ gM2 + $ midiOff "^57" ((slow 2) . ( # room 0.5)) + $ note (lineTeng) + # "rootsBass" + # crushbus 41 (range 16 2.5 "^53") + # end 0.35 # room 0.3 + # legato 2 # gain 1.9 # cut 1 + # midiG' "^81" 0 1.5 +d8 $ gF1 + $ midiOn "^92" (ply "1 2") + $ midiOn "^60" (slice 16 (run "<16!8 [16 8]!7 [8 16]> <16!3 <32 [8 32]>>") ) + $ chop 8 + $ (someCyclesBy "^20" (# n "21")) + $ "jungle_breaks:33" + # midiG' "^84" 0 1.5 + + +d2 $ gF1 + $ whenmod 32 24 (fast "<2!3 [<2 4> 4]>") + $ "~ [cp,snare:24]" + # pan 0.7 + # midiG' "^79" 0 1.4 +d3 $ gF1 + $ sometimesBy (slow 16 $ range 0 0.5 saw) (mask "t(3,8) t(5,8)") + $ "hh*[16 16 16 <8!2 16 12>]" + # midiG' "^80" 0 1.6 + # room 0.2 # dry 1 + # pan (0.4 + 0.2 * (slow 4 perlin)) +d4 $ gF2 + $ midiOn "^89" (|+ note "c'minPent'2") + -- $ midiOn "^57" (<| note lineAround3) + $ note (slow 2 $ lineGoodLife) # "bassWarsaw" + # octave 4 + # crushbus 41 (range 16 2.5 "^53") + # octersubbus 42 (range 0 4 "^33") + -- # delayfb 0.8 # delayt 0.25 + # midiG' "^81" 0 1.4 + # pan 0.3 +d5 + $ midiOn "^90" (sometimesBy "0 1" rev) + $ midiOn "^58" (struct "t(<3!3 <5 2>>,<8!7 4>) . t(<5!7 <8 16>>,8)" . arp "pinkyup") + $ note ("<[a4,c4,e4] [c4,e4,g4] [e4,g4,b4] [d4,fs4,g4]>") + # "moogBass" + # midiG' "^82" 0 1.6 +d8 $ gF3 + $ midiOn "^92" ((# pan 0.4) . (# n "19")) + $ sometimesBy "^56" (slice 4 ("0 <1 <1*2 ~> ~ 1> <2 ~> 3*<1 <2 4>>")) + -- $ whenmod 4 3 (slice 4 ("0 1 2 3*4")) + $ loopAt 2 $ chop 8 + $ n "20" # "jungle_breaks" + # pan 0.55 + # midiG' "^84" 0 1.8 diff --git a/study/ableton/chords.tidal b/study/ableton/chords.tidal new file mode 100644 index 0000000..d7f295d --- /dev/null +++ b/study/ableton/chords.tidal @@ -0,0 +1,46 @@ +-- Study: Ableton Learning Music +-- https://learningmusic.ableton.com/chords/1-5-6-4.html + + +-- 1-5-6-4 +let majPop = "<[d4,fs4,a4] [a3,cs4,e4] [b3,d4,fs4] [g3,b3,d4]>" + + + +-- MAJOR POP! +do +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMute2 = (midiOn "^74" (mask "f*16")) +let gM = gMask . gMute +let gM2 = gMask . gMute2 +let majPop = "<[d4,fs4,a4] [a3,cs4,e4] [b3,d4,fs4] [g3,b3,d4]>" +setcps (80/60/4) +d1 $ gF1 $ gM2 + $ midiOn "^42" (<| "k k k [> k]") + $ midiOff "^42" (<| "k . <~!3 k> ~ <~ k*2> k") + $ "[jazz,house,808bd:3]" + # midiG' "^78" 0 1.4 +d2 $ gF1 $ gM $ "~ [h2ogmsn:0,h2ogmsn:3,snare:40]" + # pan 0.7 + # midiG' "^79" 0 1.4 +d3 $ gF1 $ gM $ "hh*[8 <8!3 16>]" + # midiG' "^80" 0 1.4 + # pan 0.2 +d4 $ gF2 + -- $ (arp "up") + $ note (majPop) + -- $ note "<[a4,cs5,e5]>" + # "bassWarsaw" + # midiG' "^81" 0 1.4 + # crushbus 41 (range 16 2.5 "^53") + # octersubbus 42 (range 0 2.5 "^33") +d8 $ gM $ gF3 $ loopAt 2 + $ midiOn "^20" (# n "22") + $ midiOn "^92" (ply "<2 2 4 8>") + $ whenmod 4 3 (slice 4 (run 8)) $ chop 8 + $ "jungle_breaks:42" + # midiG' "^84" 0 1.4 diff --git a/study/ableton/melodies.tidal b/study/ableton/melodies.tidal new file mode 100644 index 0000000..daadacf --- /dev/null +++ b/study/ableton/melodies.tidal @@ -0,0 +1,100 @@ +-- https://learningmusic.ableton.com/make-melodies/love-will-tear-us-apart.html +let loveTears = "< [fs4@2 g4 fs4@2 e4 d4@2] [b3@7 ] a3>" +-- How is this melody put together? +-- +-- This melody uses only notes in the scale of D major. But the melody starts with a long E, creating a sense of tension against the implied key that continues throughout the whole song. +-- +-- Notice the shape (or contour) of the melody. At the beginning, it moves up and down the scale by adjacent notes. But at the end, it leaps from B up to D and then down to A. This contrast between stepwise and leapwise motion helps to make the melody strong and memorable. +-- Try making some of your own melodies that also use a contrast between steps and leaps. +-- +let lineTourDeFrance1 = "<[f3@2 bf3 c4 f4@3 d4] [f4 g4 c4 d4 f4@2 bf4@2] @2>" +let lineTourDeFrance2 = "<[g3@2 c4 d4 g4@3 e4] [g4 a4 d4 e4 g4@2 c5@2] @2>" +-- The first and second phrases are identical, with the exception of the final note. In the first phrase, the last two notes descend from B♭ to A♭, while in the second phrase, they ascend from B♭ to C. You can hear this as a sort of "question and answer" relationship; the first phrase sounds somehow incomplete, while the second phrase sounds like it serves to resolve the first. +-- +-- +let praxis = "<[~ d5 d4 e4 g4 a4 b4 d4] [e4 g4 a4 b4 @4]>" + +-- Prestance +do +setcps (134/60/4) +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) +let gMask = (midiOn "^41" (mask "t . > >")) +let gMute = (midiOn "^73" (mask "f*16")) +let gMute2 = (midiOn "^74" (mask "f*16")) +let gM = gMask . gMute +let gM2 = gMask . gMute2 +let praxis = "<[~ d5 d4 e4 g4 a4 b4 d4] [e4 g4 a4 b4 @4]>" +d1 $ gF1 $ gM + $ midiOn "^42" (<| "k k k k") + $ midiOff "^42" (<| "k . k(<0!3 1 0 1 3 3>,8,<0!3 6>)") + $ "[jazz,808bd:3]" + # midiG' "^78" 0 1.4 +d2 $ gF1 + $ midiOn "^43" (<| "~ c ~ c") + $ midiOff "^43" (<| "~ <~ c>") + $ "cp" + # note "-2" + # midiG' "^78" 0 1.8 +d3 $ gF1 $ gM + $ midiOn "^75" (loopAt 2 . (>| "jungle_breaks:35")) + $ midiOn "^43" (off 0.5 (ply "<1!3 2>")) + -- $ chop 8 + $ midiOff "^75" (slice 8 "<0 1 2 3 [0 1] [1 2] [1 2] [1 2]>") + $ loopAt 2 + $ "break:20" + # midiG' "^79" 0 1.4 +d4 $ gF2 $ gM2 $ note "<[a2@2 ~ ~ a2 b2 ~ <~!1 >] >" + # "FMRhodes1" # cut 4 + # modIndex 5 + # room 0.2 + # delay 0.8 + # delayfb "<0.1!3 0.65>" + # delayt 0.125 + # crushbus 41 (range 16 2.5 "^53") + # midiG' "^81" 0 1.6 +d6 $ gF3 $ gM2 + $ mask "" + $ note praxis + # "bassWarsaw" + # modIndex 5 + # midiG' "^17" 0 1.4 + # pan 0.3 +d7 $ gF3 $ gM2 + $ mask "" + $ note (praxis + 36) + # "prophet5pwmStrings" + # pan 0.9 + # midiG' "^18" 0 1.4 +d8 $ gF3 $ gM2 + $ mask "" + $ juxBy 0.3 (mask "t(3,8) . t(12,16)" . (|+ note 12)) + $ note (rev praxis) + # "moogBass" + # modIndex 5 + # pan 0.9 + # midiG' "^19" 0 1 + +do +let loveTears = "< [fs4@2 g4 fs4@2 e4 d4@2] [b3@7 ] a3>" +setcps (148/60/4) +d1 $ "" # "jazz" +d2 $ fast "<1!7 [1 4] 2!3 [2 4] 2!3 4>" "~ snare:55" +d3 $ "[~ hh]*4" +d4 + $ note (loveTears + + "[0,12]") + # "[FMRhodes1]" + # gain 1.4 + # pan 0.8 +d5 + $ mask " t!12" + $ rev + -- $ mask "" + $ note (loveTears + + "[24]") + # "[FMRhodes2]" + # gain 1.2 + # room 0.4 # sz 0.4 + # pan 0.3 diff --git a/study/chords/lofi.tidal b/study/chords/lofi.tidal index 49568fc..85ebfa1 100644 --- a/study/chords/lofi.tidal +++ b/study/chords/lofi.tidal @@ -48,3 +48,17 @@ d1 # sz 0.2 -- # midiG' "^79" 0 1.2 # gain 0.9 + + + -- LOFI CHORDS FROM RANDOM WEB + d4 $ gF2 + -- $ note "[c3,ef3,g3,as3,d4,f4]" + $ note "<[c3,f4] <[c3,as4] [b2,ef3]>>" + # "bassWarsaw" + # midiG' "^81" 0 1.2 + d6 $ gF3 + $ (superimpose (struct "t*8" . arp "down")) + $ note "<[c3,ef3,g3,as3,d4,f4] <[c3,f3,gs3,c4,ef4,g4,as4] [b2,ef3,f3,g3,b4,ef4]>>" + # "FMRhodes1" + # modIndex (range 0 16 "^54") + # midiG' "^82" 0 1.2