From 90bccdf5132465f9cf97b5b9943832ed4e2f36db Mon Sep 17 00:00:00 2001 From: Paul-Louis NECH Date: Fri, 23 Sep 2022 16:44:24 +0200 Subject: [PATCH] feat: Shape of Foo + oldies :) --- live/chip/ataright.tidal | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/chip/step_silence.tidal | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/collab/raph/sautillant.tidal | 41 +++++++++++++++++++++++++++++++++++++++++ live/midi/nova/ambient/contre_visite.tidal | 4 ++-- live/midi/nova/breaks/break_the_rentree.tidal | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/dnb/break_the_loop.tidal | 5 +++-- live/midi/nova/dub/big_morning.tidal | 44 ++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/fusion/crystal_d_ete.tidal | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/fusion/shape_of_foo.tidal | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 466 insertions(+), 4 deletions(-) create mode 100644 live/chip/ataright.tidal create mode 100644 live/chip/step_silence.tidal create mode 100644 live/collab/raph/sautillant.tidal create mode 100644 live/midi/nova/breaks/break_the_rentree.tidal create mode 100644 live/midi/nova/dub/big_morning.tidal create mode 100644 live/midi/nova/fusion/crystal_d_ete.tidal create mode 100644 live/midi/nova/fusion/shape_of_foo.tidal diff --git a/live/chip/ataright.tidal b/live/chip/ataright.tidal new file mode 100644 index 0000000..00458d2 --- /dev/null +++ b/live/chip/ataright.tidal @@ -0,0 +1,69 @@ +once $ "dr" + +do +let g1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let g2 = (# djfbus 2 "^50") +let modIndex = pF "modIndex" +setcps (120/60/4) +d1 $ g1 -- THE ROAD + $ midiOn "^41" (fast 2) + $ midiOn "^42" (struct "t*2") + $ midiOff "^42" (struct "t t t ") + $ "[jazz,808bd:6]" + # midiG' "^78" 0 1 +d2 $ g1 -- THE FUEL + $ midiOn "^43" (mask "t f . f t ") + $ midiOn "^75" (ply 2) + $ loopAt 4 + $ chop 32 + $ "drums_atari:21" + # midiG' "^79" 0 1.2 + # lpf 2800 + # cut 2 +d3 $ g2 -- THE GUIDELINES + $ midiOn ("^44" - "^76") + (sometimesBy (slow 8 $ range 0.3 0.95 saw) + $ mask "t(3,8)") + $ midiOn "^76" (fast "<2!4 <4 [4 8]>>") -- YOU SHALL RUN + $ struct "t*[<8!3 <16 [[16|32]*4]>>!3 <16!3 [12|24]*4> 12!4]" + $ "h2ogmhh" + # midiG' "^80" 0 1 + # n "<0!4 1 2 3>" +d4 -- THE THUNDER + $ g2 + $ midiOn "^89" (off "1" id . chop "8") + $ fix (|* gain 0.8) (note "a4") + $ note " ~ >]!4>>" + # "FMRhodes1" + # cut 4 + # modIndex (range 0 128 "^53") + # crushbus 41 (range 16 4 "^33") + # roombus 42 (range 0.05 0.6 "^33") + # sz 0.9 + # pan "<0.8!3 0.5>" + # midiG' "^81" 0 1.5 + # room 0.4 +d5 -- THE RAIN TODO BETTER RHYTHMS + $ g2 + $ midiOn "^58" (swing 3) + $ midiOn "^90" (striate "<2!3 4>" . ply 2) + $ note ( + arp "<>!16 !16>" + (" g'min'4>" |+| "ef3")) + # "FMRhodes2" + # modIndex (range 0 128 "^54") + # crushbus 41 (range 16 4 "^34") + # roombus 42 (range 0 0.2 "^34") + # sz 0.5 + # pan 0.8 + # midiG' "^82" 0 1.5 + +-- GRAVEYARD +d5 + -- $ superimpose ((|- note 12) . (# cut 51)) + $ mask "t(<1 3 <1!3 <4 16>> <4 8>>,16,<0!3 3>)" + $ chop 16 + $ "synth_atari:0" + # note "-4" + # midiG' "^82" 0 1 + # cut 5 diff --git a/live/chip/step_silence.tidal b/live/chip/step_silence.tidal new file mode 100644 index 0000000..c7dde8e --- /dev/null +++ b/live/chip/step_silence.tidal @@ -0,0 +1,62 @@ +once $ "808bd:9" + +do +setcps (120/60/4) +let g1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let g2 = (# djfbus 2 (range 0.05 0.95 "^50")) +d1 $ g1 + $ midiOn "^42" ((<| "k k k k]>")) + $ midiOff "^42" (<| "k . k(<1!3 <3 5>>,8)") + $ "jazz" + # midiG' "^78" 0 1.3 +d2 $ g1 + $ midiOn "^43" (struct "~ t ~ t*<1 2 2 1>") + $ midiOff "^43" (struct "~ t") + $ "cp" + # lpf 1200 + # room 0.2 + # sz 0.2 + # dry 1 + # midiG' "^79" 0 1 +d3 $ g1 + $ midiOn "^44" (mask "t([5 <8!3 <4 16>>],16)") + $ midiOn "^76" (mask "t(16,32)" . ply 2) + $ n "~ 0 ~ 0 ~ 0 ~ <0!3 2>*<2 1 2 2>" + # "h2ogmsn" # gain 0.8 + # midiG' "^80" 0 1 + # pan 0.4 +d4 $ g1 + $ midiOn "^44" (mask "t . t(<1 2 2 4>,8)") + $ midiOn "^76" (mask "t(16,32)" . ply 2) + $ sometimesBy (range 0 0.8 saw) (# pan 0.7) + $ "h(1,8,<0 3>) . h(<1 3>,8)" + # "h2ogmhh" + # pan 0.3 + # midiG' "^80" 0 1.1 +d5 $ g2 -- THE BASS REMNANTS + $ midiOn ("^89" + "^58") (slice 4 "0 1 2 <3 1 3 3*8>") + $ midiOn "^57" ((# legato 4) . (slow 4)) -- Hack longer sample + $ "90s_matrix:0" + # crushbus 51 (range 16 1.8 "^53") + # legato 2 # cut 5 + # midiG' "^81" 0 1 +d6 -- TODO BASSLINE <3 + $ "bassWarsaw" + # midiG' "^82" 0 1.3 +d8 $ g2 + $ midiOn "^59" (chop 2) + $ midiOn "^91" (chop 8) + $ "90s_glassatm:3" -- Scintillant espoir + # crushbus 81 (range 16 1.8 "^55") + # cut 8 + # midiG' "^83" 0 0.8 + # pan (0.9 - 0.3 * perlin) + + + +once $ "90s_glassatm:1" + # note (-12) + # gain 1 # cut 3 + +once $ "90s_synatm:0" # note (-16) + # gain 1 # cut 3 diff --git a/live/collab/raph/sautillant.tidal b/live/collab/raph/sautillant.tidal new file mode 100644 index 0000000..6030242 --- /dev/null +++ b/live/collab/raph/sautillant.tidal @@ -0,0 +1,41 @@ +do +-- resetCycles +setcps (143/60/4) +let g1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let g2 = (# djfbus 2 "^50") +d1 $ g1 + $ "~ k ~ k ~ k <~ ~ k ~> k" # "jazz" + # midiG' "^78" 0 0.8 +d2 $ g1 + $ "k*4" + # "bass:0" # lpf 4500 # att 0.005 # rel 1 + # midiG' "^79" 0 0.9 +d3 $ g1 + $ midiOn "^76" (ply 2) + $ mask " f ]>" + $ "h*8" # n "0 0 1 <0 2>" # "h2ogmhh" + # midiG' "^80" 0 1 +d4 $ g2 -- AIGLE DE LA MATRICE + $ "90s_matrix:2/4" + # crushbus 41 (range 16 2.4 "^53") + # midiG' "^81" 0 0.6 + # cut 4 +d5 $ g2 + $ slice 4 "<[0 1] [2 3] [0 1] [2 3*2]>" + $ loopAt 2 + $ midiOn "^58" (# n 5) + $ "fbass:0" # cut 5 + # midiG' "^82" 0 0.9 + # crushbus 51 (range 16 2.4 "^54") + # pan 0.8 + + +-- Abandon +d5 + $ midiOn "^90" (off "1/16" (id)) + $ slice 16 (slow 4 $ run 16) + $ loopAt 16 + $ "synth_nes:1" + # note "-24" -- slow down + # cut 5 + # midiG' "^82" 0 0.8 diff --git a/live/midi/nova/ambient/contre_visite.tidal b/live/midi/nova/ambient/contre_visite.tidal index 0aafc6a..4781530 100644 --- a/live/midi/nova/ambient/contre_visite.tidal +++ b/live/midi/nova/ambient/contre_visite.tidal @@ -70,8 +70,8 @@ d5 $ f2 -- Synth: ELECTRONIC ANSWERS # dry 1 # panbus 51 (range 0.8 0.65 saw) # crushbus 52 (range 12 2.85 "^54") - # midiG' "^82" 0 1.6 -d6 -- High lead: Winds of truth + # midiG' "^82" 0 1.4 +d6 $ f1 -- High lead: Winds of truth $ juxBy 0.5 ((# cut 61) . rev) -- Jux rev <3 $ whenmod 8 6 (swing "<4 2>") $ whenmod 32 8 (superimpose ( -- Echos of doubts diff --git a/live/midi/nova/breaks/break_the_rentree.tidal b/live/midi/nova/breaks/break_the_rentree.tidal new file mode 100644 index 0000000..e31487f --- /dev/null +++ b/live/midi/nova/breaks/break_the_rentree.tidal @@ -0,0 +1,87 @@ +resetCycles + +do +setcps (80/60/4) +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +d1 $ gF1 -- THIS TIME IT'S GONNA BE SLOW + $ midiOn "^42" (struct "t t t ") + $ midiOff "^42" ( + (someCyclesBy (slow 16 $ range 0 0.8 saw)( -- Hackish run + superimpose ((0.5 ~>) . mask "t(1,8)") + ) + ) + . (<| "<8 <~!3 <8 [8 . 8(3,9)]>>>") + ) + $ fix (|* gain 0.8) "jazz" + $ "[808bd:1,jazz]" + # gain 0.9 + # midiG' "^78" 0 1 + # room 0.5 # dry 1 +d2 $ gF1 -- Snare euclidien gratos + $ "~ <~!4 s(<1!3 4>, 4)!4> ~ s(<1!7 <3 [3 <5 8>]>>,8)" + # "[dr_few:3,snare:13]" + # gain 0.7 + # midiG' "^79" 0 0.9 + # pan 0.8 + # lpf 2000 +d3 $ gF1 -- Break malmene + $ whenmod 16 15 (slice 4 "0*5 ~*3") + $ whenmod 8 7 (slice 4 "0*8") + $ whenmod 4 3 (slice 4 "0 1*2 2 3*2") + $ chop 16 + $ loopAt 2 + $ "fbreak80:0" + # room 0.3 + # dry 1 + # sz 0.6 + # cut 3 + # pan 0.1 + # gain 0.65 + # midiG' "^80" 0 1 +d4 $ gF1 -- Drumroll au retard orchestre + $ sometimesBy 0.2 (struct "t(<3 3 1 <1 [5 8]>>,8)") + $ "dr2:5*[16!3 [32@5 16]]" + # gain (slow 32 $ range 0.24 0.6 sine) + # cut 4 + # delay (range 0.25 0.5 perlin) + # delayt 0.375 + # delayfb 0 + # pan 0.55 + # midiG' "^84" 0 1 +d6 $ gF2 -- Programmatic bass + $ midiOn "^89" (slice 4 "1*<2 4>" . (# cut 6)) + $ midiOn "^57" ( + someCyclesBy "" (slice "<16 8 4 2>" (run 16)) + . someCyclesBy "" (slice 8 "[0 .. 4] . [7 .. 5]") + . someCyclesBy "" (slice 8 (run 4)) + ) + $ loopAt 2 + $ "fbass:24/2" + # cut 6 + # gain 0.6 + # room 0.4 + # midiG' "^81" 0 0.8 + # crushbus 61 (range 16 4 "^53") + # room "<0.35!3 0.7>" +d5 $ gF2 -- Le rythme de la rentree + -- $ mask "" + $ whenmod 64 48 (superimpose ( + (struct "t*<2 4 <2 8 8 2> [16 <4 <4 1>>]>") + . (|+ note 12) + . (|+ pan 0.2) + . (# cut 51))) + $ slice 8 "0 1(<1 <<1 3> <5 8>>>,8) 2 3*<1!3 2>" + $ "fepiano:8/2" + # pan 0.7 + # room 0.2 + # cut 5 + # gain 0.4 + # midiG' "^82" 0 0.8 +d7 -- DIGITAL RAIN + $ slice 2 "<0 0 1 1 0*2!2 1*<2!3 [2 4]>>" + $ "fepiano:11" + # panbus 71 (range 0.05 0.95 "^35") + # hpfbus 72 (range 500 4993 "^55") + # squizbus 73 (range 0 1.993 "^55") + # midiG' "^83" 0 1.2 diff --git a/live/midi/nova/dnb/break_the_loop.tidal b/live/midi/nova/dnb/break_the_loop.tidal index 60adf74..0195cc7 100644 --- a/live/midi/nova/dnb/break_the_loop.tidal +++ b/live/midi/nova/dnb/break_the_loop.tidal @@ -4,8 +4,8 @@ once $ "dr" do setcps (165/60/4) let modIndex = pF "modIndex" -let gF2 = (# djfbus 2 (range 0.05 0.95 "^29")) let gF = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) let gM = (midiOn "^42" (mask "t >")) d1 $ gF @@ -20,6 +20,7 @@ d1 $ "[jazz,reverbkick,kick:5]" # midiG' "^78" 0 1.5 d2 $ gF $ gM -- Snare glitch high + $ midiOn "^75" (ply "<2 [2 <4 <2 4>>]>") -- $ midiOn "^43" (superimpose (<| )) FIXME LATER SNARE MOD $ fix ((|* gain 0.9)) ("snare:40") $ "~ s ~ >>" # "[snare:31,snare:40]" @@ -74,7 +75,7 @@ d5 $ gF2 $ gM -- Ritournelle Rhodes - "<24!12 12!4>") # "FMRhodes1" # modIndex (range 0 100 "^54") - # crushbus 51 (range 10 4.5 "^34") + -- # crushbus 51 (range 10 4.5 "^34") # midiG' "^82" 0 2 d6 $ gF2 -- Voices from the st0rm $ midiOn "^91" ((# cut 6) . slow 8) diff --git a/live/midi/nova/dub/big_morning.tidal b/live/midi/nova/dub/big_morning.tidal new file mode 100644 index 0000000..7a01e5f --- /dev/null +++ b/live/midi/nova/dub/big_morning.tidal @@ -0,0 +1,44 @@ +do +let g1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let g2 = (# djfbus 2 (range 0.05 0.95 "^50")) +d1 $ g1 + $ midiOn "^74" (fast 2) + $ midiOn "^42" ((<| "k k k k]>")) + $ midiOff "^42" (<| "k . ]>") + $ "kick:5" + # midiG' "^78" 0 1.3 +d2 $ "~ s" # "sn:1" + # gain 0.7 + # midiG' "^78" 0 1.3 +d3 $ g2 + $ "~ h ~ h ~ h*<1 2> ~ [h*<1!8 2 1!7> <~!3 h*2>]" # "hh" + # midiG' "^80" 0 1 +d4 $ g2 + $ midiOn "^57" (chop 4) + $ midiOn "^89" (chop 4) + $ note ("" + "3") + # "rootsBass" + # crushbus 40 (range 16 1.8 "^53") + # room 0.4 # sz 0.3 + # midiG' "^81" 0 1 + # cut 4 +d5 + $ sometimesBy "0 <0.125!7 1>" (off "e" id) + $ note ("~ 0 ~ <0!3 0?>" + "" + "[0,<7!7 5>]") + # "superpiano" + # velocity 0.8 + # room 0.3 + # sz 0.6 + # delay "<0.5!7 <0.85 0.9>>" # delaytime "" + # delayfb "<0.4!7 0.8>" + # midiG' "^82" 0 0.9 +d9 $ g1 + $ midiOn "^92" (ply 2) + $ midiOn "^60" (striate 2) + $ chop 8 + $ loopAt 2 $ "break:13" + # octerbus 90 (range 0 0.62 "^36") + # octersubbus 91 (range 0 0.51 "^36") + # midiG' "^84" 0 0.8 + + once $ "90s_matrix" # cut 7 diff --git a/live/midi/nova/fusion/crystal_d_ete.tidal b/live/midi/nova/fusion/crystal_d_ete.tidal new file mode 100644 index 0000000..57599ac --- /dev/null +++ b/live/midi/nova/fusion/crystal_d_ete.tidal @@ -0,0 +1,67 @@ +do +setcps (90/60/4) +let modIndex = pF "modIndex" +let f1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let f2 = (# djfbus 2 (range 0.05 0.95 "^50")) +d1 $ f1 + $ struct "t*<1!7 [4|2]> . | 5]>,8)>" + $ superimpose ((# "jazz:0") . (|* gain 0.8)) + $ n "[3,5]" # "808bd" -- MEGAKICK + # lpf 2000 + # midiG' "^78" 0 1.5 +d2 $ f1 + $ midiOn "^43" (fast 2) + $ "~ snare:20" + # lpf 2400 # att 0.01 # rel 10 + # midiG' "^79" 0 1.5 +d3 $ f1 -- tio toc break clock + $ slice 16 "0 1 . <[0 1] [<0 0 2 <0 2>> 1*<1!3 <4 2>> <2 <~ 2?>> 3]>" + $ loopAt 2 + $ "break:13" + # cut 3 + # midiG' "^80" 0 1.2 +d6 $ f2 -- Not even honest work bassline + $ midiOn "^89" (chop 4 . (# cut 6)) + $ sometimes (off 0.5 (jux (|* gain 0.93))) -- ECH0ES + $ note (" [~ >]>" - 12) + # "bassWarsaw" + # room 0.3 # dry 1 # sz 0.9 + # midiG' "^81" 0 1 + # crushbus 61 (range 16 2 "^53") + # pan 0.8 +d4 $ f2 -- Clochettes du depart + $ note ("d . d(<1!3 3>,4,1)" |+ "") + # "808lc:0" + # midiG' "^83" 0 1 + # room 0.4 + # sz 0.4 + # dry 1 + # pan 0.2 +d5 $ f1 -- Tambourins du destin + $ whenmod 32 24 (mask " . f!3 t") + $ "[<~ <~!8 d!8> ~ d> . d*<1 <2 4>>]*4" + # "[cpu:2]" + # gain 0.6 + # delay "<<0.5!2 [0.5|0.8]*4 0.8>!3 0.8>" + # delayt 0.25 + # delayfb 0.2 + # room 0.5 # dry 1 # sz 0.2 + # pan (slow 1 $ range (range 0.5 0.9 "^20") (range 0.5 0.1 "^19") (saw + perlin)) + # midiG' "^84" 0 1.5 +d7 $ f2 -- + $ midiOn "^58" (superimpose ( -- Crystal rain + (|+ note 12) + . (# pan 0.9) + . (|* gain 0.9) + . (# modIndex (slow 32 $ range 0 20 perlin)) + . (# delay (slow 13 $ range 0.1 0.8 perlin)) + . (# delayt 0.125) + . (# delayfb "<0.5!3 0.9>") + )) + $ struct "t(<2 3>,<<4 2> 8>) . t(5,8)" + $ arp "" + $ ply 2 + $ note ("" - 12) + # "FMRhodes1" + # pan 0.7 + # midiG' "^82" 0 1 diff --git a/live/midi/nova/fusion/shape_of_foo.tidal b/live/midi/nova/fusion/shape_of_foo.tidal new file mode 100644 index 0000000..9f14f25 --- /dev/null +++ b/live/midi/nova/fusion/shape_of_foo.tidal @@ -0,0 +1,91 @@ + +,-.-. ,-.-. ,-.-. ,-.-. +`. ,' `. ,' `. ,' `. ,' + `__ `__ ___ `__ ___ `___ __ __ + /__` |__| /\ |__) |__ / \ |__ |__ / \ / \ + .__/ | | /~~\ | |___ \__/ | | \__/ \__/ + ,-.-. ,-.-. ,-.-. ,-.-. + `. ,' `. ,' `. ,' `. ,' + ` ` ` ` + +do +setcps (160/60/4) +let mMask = midiOn "^73" (# silence) -- Masque manuel +let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) +let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) +d1 $ gF1 $ mMask + $ midiOn "^42" (struct "t ") -- We push + $ midiOff "^42" (struct "t . ~ <~!4 t!4> ~ ~") -- We pull + $ "[cpu2,jazz,808bd:3]" + # midiG' "^78" 0 2 +d2 $ gF1 $ mMask + $ mask " f]>" + $ "~ ~ ~ s ~ ~ s <~!3 s> " + # "808sd:11" + # midiG' "^79" 0 1.4 +d3 $ gF1 $ mMask -- Break magique + $ midiOn "^44" (ply "<2!3 <4 4 [4 . 1 2] <4 8>>>") + $ splice 4 "0 1 2 3" + $ loopAt 8 + $ "fbreak80" + # cut 3 + # midiG' "^80" 0 1.2 +d5 $ gF2 + $ someCyclesBy ("^17") (-- CHORDS! + superimpose (# note ("" - 12)) + ) + $ midiOn "^57" (mask "t(1,4)" -- Dreamstate + . (# legato 8) + . (# room 2) + . (# phasr 0.8) . (# phasdp 1.9) + . (# leslie 0.8) . (# lrate 0.7) . (# lsize 0.8) + ) + $ midiOn "^89" (|+ legato 2) + $ mask "" + $ note (" ~ ~ ~ ~ ~" - 12) + # "bassWarsaw" + # legato 2 + # crushbus 51 (range 16 3.2 "^53") + # room 0.8 # sz 0.56 # dry 0.98 + # pan 0.33 + # midiG' "^81" 0 2 +d4 $ gF2 + $ superimpose (|- note 12) + $ midiOn "^58" (mask "t f f f" . (# room 0.5)) + $ note (" ~ ~ ~ ~ ~" + -1 -- Ce carillon est mal accordé + ) # "808mc:3" + # midiG' "^82" 0 2 + # dry 0.95 + # sz 0.9 +d6 -- CHOIR + $ midiOn "^59" (superimpose ( + whenmod 32 24 (ply 4) + . struct ("t@3 t@3 @2") -- Longer + . (|+ note 12) -- Higher + . (|* gain 0.85) -- Lighter + . (|+ pan 0.2) -- Righter + ) + ) + $ note ("0 ~ ~ 0 ~ ~ 0 ~" + + "[, ]" + - 24) + # "moogBass" + # midiG' "^83" 0 2 + # legato 2 + # room 0.83 # sz 0.4 # dry 1 +d7 -- Runny Maracas Pitchables + $ mask "t(16,32)" + $ midiOn "^60" (slow 2) + $ midiOn "^92" (ply "<2!3 4>") + $ 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]>>" + # room "^36" + # note (range "-24" "0" "^20") + # crushbus 51 (range 16 4.2 "^56") + # midiG' "^84" 0 1.3 + +once $ note "ds" # "808mc:3" -- libgit2 0.27.0