diff options
| author | Ian Clester <ijc@ijc8.me> | 2023-01-15 23:22:17 +0000 |
|---|---|---|
| committer | Ian Clester <ijc@ijc8.me> | 2023-01-15 23:22:17 +0000 |
| commit | 5bab3d12090d415917340b37443d8fed9a899d44 (patch) | |
| tree | 9765184d8649919ff79cfe305a6fadc8f4ebe971 /virtual-programs | |
| parent | fix code lookiup (diff) | |
| download | folk-5bab3d12090d415917340b37443d8fed9a899d44.tar.gz folk-5bab3d12090d415917340b37443d8fed9a899d44.zip | |
Setup JACK/SuperCollider/Tidal on startup (wip)
Diffstat (limited to 'virtual-programs')
| -rw-r--r-- | virtual-programs/music.folk | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/virtual-programs/music.folk b/virtual-programs/music.folk new file mode 100644 index 00000000..c9cd8232 --- /dev/null +++ b/virtual-programs/music.folk @@ -0,0 +1,128 @@ +Wish $this has filename "music.folk" + +set musicDir $::env(HOME)/music +exec mkdir -p $musicDir +set bootTidal [open $musicDir/BootTidal.hs w] +# https://raw.githubusercontent.com/tidalcycles/Tidal/main/BootTidal.hs +puts $bootTidal { +:set -XOverloadedStrings +:set prompt "" + +import Sound.Tidal.Context + +import System.IO (hSetEncoding, stdout, utf8) +hSetEncoding stdout utf8 + +tidal <- startTidal (superdirtTarget {oLatency = 0.05, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig {cVerbose = True, cFrameTimespan = 1/20}) + +:{ +let only = (hush >>) + p = streamReplace tidal + hush = streamHush tidal + panic = do hush + once $ sound "superpanic" + list = streamList tidal + mute = streamMute tidal + unmute = streamUnmute tidal + unmuteAll = streamUnmuteAll tidal + unsoloAll = streamUnsoloAll tidal + solo = streamSolo tidal + unsolo = streamUnsolo tidal + once = streamOnce tidal + first = streamFirst tidal + asap = once + nudgeAll = streamNudgeAll tidal + all = streamAll tidal + resetCycles = streamResetCycles tidal + setCycle = streamSetCycle tidal + setcps = asap . cps + getcps = streamGetcps tidal + getnow = streamGetnow tidal + xfade i = transition tidal True (Sound.Tidal.Transition.xfadeIn 4) i + xfadeIn i t = transition tidal True (Sound.Tidal.Transition.xfadeIn t) i + histpan i t = transition tidal True (Sound.Tidal.Transition.histpan t) i + wait i t = transition tidal True (Sound.Tidal.Transition.wait t) i + waitT i f t = transition tidal True (Sound.Tidal.Transition.waitT f t) i + jump i = transition tidal True (Sound.Tidal.Transition.jump) i + jumpIn i t = transition tidal True (Sound.Tidal.Transition.jumpIn t) i + jumpIn' i t = transition tidal True (Sound.Tidal.Transition.jumpIn' t) i + jumpMod i t = transition tidal True (Sound.Tidal.Transition.jumpMod t) i + jumpMod' i t p = transition tidal True (Sound.Tidal.Transition.jumpMod' t p) i + mortal i lifespan release = transition tidal True (Sound.Tidal.Transition.mortal lifespan release) i + interpolate i = transition tidal True (Sound.Tidal.Transition.interpolate) i + interpolateIn i t = transition tidal True (Sound.Tidal.Transition.interpolateIn t) i + clutch i = transition tidal True (Sound.Tidal.Transition.clutch) i + clutchIn i t = transition tidal True (Sound.Tidal.Transition.clutchIn t) i + anticipate i = transition tidal True (Sound.Tidal.Transition.anticipate) i + anticipateIn i t = transition tidal True (Sound.Tidal.Transition.anticipateIn t) i + forId i t = transition tidal False (Sound.Tidal.Transition.mortalOverlay t) i + d1 = p 1 . (|< orbit 0) + d2 = p 2 . (|< orbit 1) + d3 = p 3 . (|< orbit 2) + d4 = p 4 . (|< orbit 3) + d5 = p 5 . (|< orbit 4) + d6 = p 6 . (|< orbit 5) + d7 = p 7 . (|< orbit 6) + d8 = p 8 . (|< orbit 7) + d9 = p 9 . (|< orbit 8) + d10 = p 10 . (|< orbit 9) + d11 = p 11 . (|< orbit 10) + d12 = p 12 . (|< orbit 11) + d13 = p 13 + d14 = p 14 + d15 = p 15 + d16 = p 16 +:} + +:{ +let getState = streamGet tidal + setI = streamSetI tidal + setF = streamSetF tidal + setS = streamSetS tidal + setR = streamSetR tidal + setB = streamSetB tidal +:} + +:set prompt "tidal> " +:set prompt-cont "" + +default (Pattern String, Integer, Double) +} +close $bootTidal +set scStartup [open $musicDir/startup.sc w] +puts $scStartup "SuperDirt.start;" +close $scStartup + +set ::env(DBUS_SESSION_BUS_ADDRESS) "unix:path=/run/user/1000/bus" + +proc ::finishSetup {} { + exec jack_control start + exec jack_control ds alsa + exec jack_control dps device hw:HDMI,10 + exec jack_control dps rate 48000 + exec jack_control dps nperiods 2 + exec jack_control dps period 64 + + exec -ignorestderr xvfb-run --auto-servernum sclang startup.sc + + set fifo $musicDir/tidal-input + exec rm -f $fifo + exec mkfifo $fifo + set fifoId [open $fifo] + exec -ignorestderr ghci < $fifo + exec cat $musicDir/BootTidal.hs > $fifo +} + +proc ::waitForDbus {} { + puts "waiting now" + if {[file exists /run/user/1000/bus]} { + puts "done waiting" + ::finishSetup + } else { + after 100 ::waitForDbus + } +} + +puts "about to wait" +::waitForDbus + |
