From 1020205e38cb933e3d063cc58b1797ab4b627bd0 Mon Sep 17 00:00:00 2001 From: PLN Date: Sun, 14 Mar 2021 01:14:27 +0100 Subject: [PATCH] raph,lib,top_hats --- lib-parvagues/.gitignore | 1 + lib-parvagues/LICENSE | 30 ++++++++++++++++++++++++++++++ lib-parvagues/README.md | 1 + lib-parvagues/Setup.hs | 2 ++ lib-parvagues/lib-parvagues.cabal | 26 ++++++++++++++++++++++++++ lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs | 31 +++++++++++++++++++++++++++++++ lib-parvagues/stack.yaml | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/FFF/pray.tidal | 16 ++++------------ live/midi/nova/breaks/StolenChoir.tidal | 4 ++-- live/midi/nova/computer_riddim.tidal | 11 ++++++----- live/midi/nova/dnb/prepabass.tidal | 5 +---- live/midi/nova/lounge/invoque_ete.tidal | 3 ++- live/midi/nova/lounge/top_hats.tidal | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ live/midi/nova/minneapolis.tidal | 2 +- live/midi/nova/zelda.tidal | 13 ++++++++----- study/nova/disco_punk.tidal | 2 +- 16 files changed, 306 insertions(+), 31 deletions(-) create mode 100644 lib-parvagues/.gitignore create mode 100644 lib-parvagues/LICENSE create mode 100644 lib-parvagues/README.md create mode 100644 lib-parvagues/Setup.hs create mode 100644 lib-parvagues/lib-parvagues.cabal create mode 100644 lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs create mode 100644 lib-parvagues/stack.yaml create mode 100644 live/midi/nova/lounge/top_hats.tidal diff --git a/lib-parvagues/.gitignore b/lib-parvagues/.gitignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/lib-parvagues/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/lib-parvagues/LICENSE b/lib-parvagues/LICENSE new file mode 100644 index 0000000..bc59db9 --- /dev/null +++ b/lib-parvagues/LICENSE @@ -0,0 +1,30 @@ +Copyright Author name here (c) 2021 + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Author name here nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/lib-parvagues/README.md b/lib-parvagues/README.md new file mode 100644 index 0000000..67f21b8 --- /dev/null +++ b/lib-parvagues/README.md @@ -0,0 +1 @@ +# lib-parvagues diff --git a/lib-parvagues/Setup.hs b/lib-parvagues/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/lib-parvagues/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/lib-parvagues/lib-parvagues.cabal b/lib-parvagues/lib-parvagues.cabal new file mode 100644 index 0000000..a866eaa --- /dev/null +++ b/lib-parvagues/lib-parvagues.cabal @@ -0,0 +1,26 @@ +name: lib-parvagues +version: 0.2.1 +-- synopsis: +-- description: +homepage: https://git.plnech.fr/Tidal +license: BSD3 +license-file: LICENSE +author: ParVagues +maintainer: parvagues@plnech.fr +copyright: 2021 PLNech +category: Music +build-type: Simple +extra-source-files: README.md +cabal-version: >=1.10 + +library + hs-source-dirs: src + exposed-modules: Sound.Tidal.ParVagues.Control + build-depends: base >= 4.7 && < 5, + tidal + default-language: Haskell2010 + default-extensions: OverloadedStrings + +source-repository head + type: git + location: https://git.plnech.fr/Tidal/lib-parvagues/ diff --git a/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs b/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs new file mode 100644 index 0000000..ec3c1ff --- /dev/null +++ b/lib-parvagues/src/Sound/Tidal/ParVagues/Control.hs @@ -0,0 +1,31 @@ +module Sound.Tidal.ParVagues.Control ( + midiOn, + midiOff, + midiNo, + midiDJF, + midiG, + midiG' +) where + + import Sound.Tidal.Context + import Sound.Tidal.Scales + import Sound.Tidal.Chords + + -- Midi boolean buttons + midiOn ch pat = someCyclesBy ch pat + midiOff ch pat = someCyclesBy (1 - ch) pat + midiNo c1 c2 pat = someCyclesBy (1 - c1 - c2) 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) + + -- 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 diff --git a/lib-parvagues/stack.yaml b/lib-parvagues/stack.yaml new file mode 100644 index 0000000..0565449 --- /dev/null +++ b/lib-parvagues/stack.yaml @@ -0,0 +1,67 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# https://docs.haskellstack.org/en/stable/yaml_configuration/ + +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# resolver: ./custom-snapshot.yaml +# resolver: https://example.com/snapshots/2018-01-01.yaml +resolver: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/5.yaml + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +packages: +- . +# Dependency packages to be pulled from upstream that are not in the resolver. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +# extra-deps: +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +# extra-deps: [] + +# Override default flag values for local packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=2.5" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/live/midi/nova/FFF/pray.tidal b/live/midi/nova/FFF/pray.tidal index dc5a5fd..3c77c17 100644 --- a/live/midi/nova/FFF/pray.tidal +++ b/live/midi/nova/FFF/pray.tidal @@ -4,12 +4,6 @@ setcps 0 -- Tags: Breakbeat, gospel, funk resetCycles -(* 2 (/ 4 8)) - -once $ "fbass" - -once $ fast 4 $ "dr*4" - do let gG a = (gain ("^77" * a)) -- gain Global let gM' l h a = (gG (range l h a)) -- gain Modéré @@ -26,11 +20,10 @@ d1 $ g $ whenmod 8 6 (# silence) -- $ novaOn "^74" (mask "t(11,12)" . fast "<2!6 4 2>") -- Folie $ novaOn "^42" (<| "k*<1!8 2!8> . k(<0 1 0 1 3 5 5 8>,8,<0!3 2>)") -- L'annonce - $ "k(<1 [1|2|5]>,8) . k(<3 5>,8)" -- Le classique - # "reverbkick" + $ novaOff "^42" (<| "k(<1 [1|2|5]>,8) . k(<3 5>,8)") -- Le classique + $ "reverbkick" # room 0.2 # pan 0.4 - # lpf ("<5!3 <2 0.5>>" * 1000) # gM' 0.2 1.5 "^78" d4 $ g -- BREAKBEAT $ someCyclesBy "^74" -- Intro @@ -63,7 +56,7 @@ d3 $ g -- Metal drumroll d5 -- Fragments of Wiley $ (# lpf (range 5000 200 "^54")) $ g - -- $ novaOn "^90" (chop 16) + $ novaOn "^90" (segment "<2 [2 4] [4 8] [16 32]>") $ novaOn "^58" (slow 4) $ "pray" -- TODO INTRO then /4 # crush (range 10 2.5 "^54") @@ -83,6 +76,5 @@ d7 $ g $ whenmod 32 16 (whenmod 4 3 (ply "<2 3 [2 4] [3 2]>")) $ whenmod 16 8 (every' 4 0 (off "-0.125" id)) $ s "~ clap" - # gain 0.75 # room 0.5 # size 0.4 # dry 0.95 - # gM' 0 0.9 "^83" + # gM' 0 1.6 "^83" diff --git a/live/midi/nova/breaks/StolenChoir.tidal b/live/midi/nova/breaks/StolenChoir.tidal index 4871633..43fc418 100644 --- a/live/midi/nova/breaks/StolenChoir.tidal +++ b/live/midi/nova/breaks/StolenChoir.tidal @@ -1,5 +1,5 @@ -- Stolen choir variations - +-- Accompagnement C# do -- Break the Choir -- region moogBass parameters let cutoff = pF "cutoff" @@ -14,7 +14,7 @@ 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"))) +aqlet 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) diff --git a/live/midi/nova/computer_riddim.tidal b/live/midi/nova/computer_riddim.tidal index d2d8148..606f249 100644 --- a/live/midi/nova/computer_riddim.tidal +++ b/live/midi/nova/computer_riddim.tidal @@ -7,14 +7,15 @@ do -- region Nova Utils -let gG a = (gain ("^77" * a)) -- gain Global +let gFactor = 1.25 +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 gLPF = (# lpf (min 10000 ((range 200 20000 ("^49"))))) let gHPF = (# hpf (max 0 (min 7500 ((range "-7500" 7500 ("^49")))))) let gDJF = (gLPF . gHPF) -let novaOn ch pat = (sometimesBy ch pat) -let novaOff ch pat = sometimesBy (1 - ch) (pat) +let novaOn ch pat = (someCyclesBy ch pat) +let novaOff ch pat = someCyclesBy (1 - ch) pat -- endregion Nova Utils let gDelayD = (# delay (range 0 5 "^13")) let gDelayFB = (# delayfb (range 0 0.9 "^14")) @@ -33,7 +34,7 @@ d1 $ novaOn "^73" (<| "~ ~ k ~") -- 1D $ novaOn "^74" (<| "k*2") -- 2D $ novaOn "^75" (<| "k ~ ~ <~!3 k>. k ~ <~ k> ")-- RubADub+adjustements - $ novaOn "^41" (<| "k*4") -- 4F + $ novaOn "^41" (<| "k k k k]>") -- 4F $ novaOff "^41" (<| "k . k <~ [<~ k> ]>")-- RubADub $ "[jazz,tech:5]" # room 0.05 @@ -69,7 +70,7 @@ d4 $ g -- Bassline # pan 0.6 # attack (range 0 1 "^53") # crush (range 16 4 "^53") - # lpq (range 0 1 "^33") + # lpq (range 0 0.33 "^33") # release 0.95 # orbit 1 # gM' 0.25 1.2 "^81" diff --git a/live/midi/nova/dnb/prepabass.tidal b/live/midi/nova/dnb/prepabass.tidal index 0a64d92..19f4d7d 100644 --- a/live/midi/nova/dnb/prepabass.tidal +++ b/live/midi/nova/dnb/prepabass.tidal @@ -79,13 +79,10 @@ d6 $ g -- ABS BASS! $ novaOn "^41" (mask "t*4 . <[t f t f] >") $ "abstract:1" # cut 6 # gain (range 0.2 0.95 "^84") -d7 +d7 -- TODO: Retravaille guitare $ chop 8 $ novaOn "^59" (loopAt 2 . mask "t(3,8)") $ novaOff "^59" (loopAt 4) $ "fguitar:25" # gM' 0.35 1.6 "^83" # cut 8 - - -once $ "methbass:6" # cut 1 # gain 0.8 diff --git a/live/midi/nova/lounge/invoque_ete.tidal b/live/midi/nova/lounge/invoque_ete.tidal index 43b78ef..a86b369 100644 --- a/live/midi/nova/lounge/invoque_ete.tidal +++ b/live/midi/nova/lounge/invoque_ete.tidal @@ -1,6 +1,7 @@ +import Sound.Tidal.ParVagues.Control do -let gF = 1.2 +let gF = 1.3 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 diff --git a/live/midi/nova/lounge/top_hats.tidal b/live/midi/nova/lounge/top_hats.tidal new file mode 100644 index 0000000..ceeb930 --- /dev/null +++ b/live/midi/nova/lounge/top_hats.tidal @@ -0,0 +1,123 @@ +import Sound.Tidal.ParVagues.Control + +do +let pontH = (someCyclesBy "<0!32 1!8 0!24>" (# hpf (slow 8 $ range 0 500 saw))) +let pontL = (whenmod 16 12 (# lpf 2000)) +let toPontL = (every' 16 11 (# lpf 5000)) +let chords = "" +let prog = ("") +let chorus = pF "chorus" +let mix = pF "mix" +let modIndex = pF "modIndex" -- 0.2 +let gG a = (gain (1.3 * "^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 g = (gDJF) +d1 $ g + $ midiOn "^41" ( -- KICK RUN + ((>| "[jazz,kick:5]*<4 4 4 [4!3 8] 4 4 2 <2 [2 8]>>") . (|* gain 0.5)) + ) + $ midiOff "^41" (<| "[k([1|<3!3 5 [3 8]>],8)]*<1!16 2!16>") + $ "hh27" # n "[5,6]" + # gM' 0 3 "^78" +d2 $ g -- Breathing snare contretemps + $ midiOn "^43" (fast "<2 2 2 2 4 2 2 4 4>") + $ "hh27:2 hh27:7" + # room 0.6 # sz 0.7 # dry (slow 20 $ range 0 2 perlin) + # gM' 0.5 1.5 "^79" +d3 + $ g + $ whenmod 16 8 (often $ fast 2) + $ someCyclesBy "<1!16 0!16>" (often $ slow "2!3 1") + $ "hh27*8" + # n "2 <2 <[2|9] [9 <9 ~> <~ 9> 2]>>" + # gM' 0.5 1.75 "^80" +d4 + $ g + $ midiOn "^58" (superimpose ( -- ARPS <3 + (|+ note 12) + . sometimesBy "0 0.5!7" rev + . fast "1 2" + . arp "pinkyup" + . (|+ pan 0.1) + . (|* gain 1.25) + )) + $ note (( + "<0 ~> 0" + + prog + + "0 -12" + - "12" -- Octave + )) + # "FMRhodes1" + # modIndex "[0,5,10]" + # pan 0.6 + # crush (range 10 4 "^54") + # gM' 0.3 1.5 "^82" +d5 $ g -- Choirs + arps + $ juxBy "-0.7" ( + arp ">" + . (|+| note "[0,7,12]*2") + . (|* gain 0.85) + . (# lpf 2000) + ) + $ "moogBass" + # note prog + # octave 3 + # gain 0.75 + # pan 0.2 + # chorus 0.6 +d6 $ g -- Guitar riffs + $ whenmod 16 12 (off "h" ( + chop 4 + . (# cut 61) + )) + $ slice 4 ( + whenmod 16 8 (+| "0 0") + "<0!4 1 1 2 3>" + ) + $ note 2 -- correction + # "punk" + # cut 6 + # attack (range 0.5 1 "^17") + # crush (range 12 3.5 "^53") + # lpq (range 0 0.5 "^33") + # pan 0.9 + # room 0.3 + # sz 0.9 + # gM' 0.4 1.5 "^81" +d8 $ g + $ midiOn "^59" ( + (# lpf 2000) + . (# crush (range 16 5 "^55")) + . (# lpq (slow 16 $ range 0 0.15 perlin)) + ) + $ midiOn "^91" (segment "4 <4 <8 [8 16]>>") + $ note (prog + "0 12") + # "moog" + # 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 diff --git a/live/midi/nova/minneapolis.tidal b/live/midi/nova/minneapolis.tidal index 8c678bd..c806967 100644 --- a/live/midi/nova/minneapolis.tidal +++ b/live/midi/nova/minneapolis.tidal @@ -16,7 +16,7 @@ once $ "dr" # gain 0.8 do -- region Nova Utils -let gF = 1 -- gain factor +let gF = 1.3 -- 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 diff --git a/live/midi/nova/zelda.tidal b/live/midi/nova/zelda.tidal index 0d86203..143bc31 100644 --- a/live/midi/nova/zelda.tidal +++ b/live/midi/nova/zelda.tidal @@ -2,20 +2,23 @@ once $ "space" # gain 0.4 do -- region Nova Utils -let gG a = (gain ("^77" * a)) -- gain Global +let gF = 1.5 +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 gDelay = ((# delay 0.125) . (# delayfb (range 0 0.8 "^13"))) let gLPF = (# lpf (min 10000 ((range 200 19800 ("^49"))))) let gHPF = (# hpf (max 0 (min 10000 ((range "-9000" 9000 ("^49")))))) let gDJF = (gLPF . gHPF) +let gCPS = (# cps ((range 60 124 "^13")/60/4)) -- let bpm = ("^13") -- endregion Nova Utils let g = id let g = gDJF -setcps (92/60/4) +-- setcps (92/60/4) +-- setcps 0.5 -- resetCycles -d1 $ "k . ,8)>" # "reverbkick" +d1 $ g $ gCPS $ "k . ,8)>" # "reverbkick" # lpf 1000 # gM' 0 1.4 "^78" # cps ((range 1 127 "^13")/60/4) @@ -26,7 +29,7 @@ d2 $ g -- Break slow downtempo (slice 8 "0 1 4 3") $ someCyclesBy "^76" -- Fulltime! (slice 8 "0 1 2 <3!2 ~ 3> 4 5 6 7*<1 <2 4>>") - $ splice 8 ("0 1 2 1 3 <5!3 3> 2 <3 1>") + $ slice 8 ("0 1 2 1 3 <5!3 3> 2 <3 1>") $ "breaks125:4" # gM' 0 1.4 "^79" d3 -- Drumroll Zelda @@ -34,7 +37,7 @@ d3 -- Drumroll Zelda $ "d*2 . ~ d*<1!3 2> d*2 d*2" # "[drum:2,tech:13]" # gM' 0.2 1.4 "^80" -d4 +d4 $ g $ note ("") # "supersaw" # voice 0.1 diff --git a/study/nova/disco_punk.tidal b/study/nova/disco_punk.tidal index 125fcec..25d133a 100644 --- a/study/nova/disco_punk.tidal +++ b/study/nova/disco_punk.tidal @@ -44,7 +44,7 @@ $ jux id $ note (slowcat (take 3 (repeat patGuitar) ++ [patGuitarAlt]) + chordsBass ) # s "pluck" -# gain 0.6 +# gain 0.85 d5 -- guitare disco LA -- libgit2 0.27.0