summaryrefslogtreecommitdiffstats
path: root/virtual-programs
diff options
context:
space:
mode:
authorIan Clester <ijc@ijc8.me>2023-01-15 23:22:17 +0000
committerIan Clester <ijc@ijc8.me>2023-01-15 23:22:17 +0000
commit5bab3d12090d415917340b37443d8fed9a899d44 (patch)
tree9765184d8649919ff79cfe305a6fadc8f4ebe971 /virtual-programs
parentfix code lookiup (diff)
downloadfolk-5bab3d12090d415917340b37443d8fed9a899d44.tar.gz
folk-5bab3d12090d415917340b37443d8fed9a899d44.zip
Setup JACK/SuperCollider/Tidal on startup (wip)
Diffstat (limited to 'virtual-programs')
-rw-r--r--virtual-programs/music.folk128
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
+