Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@jarmitage
Created October 5, 2019 23:31
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jarmitage/57e2ff7986982888b25203c961ebad8a to your computer and use it in GitHub Desktop.
Save jarmitage/57e2ff7986982888b25203c961ebad8a to your computer and use it in GitHub Desktop.
Multiple Tidal streams to multiple OSCTargets
-- https://tidalcycles.org/index.php/Custom_OSC
:set -XOverloadedStrings
:set prompt ""
:set prompt-cont ""
import Sound.Tidal.Context
superDirt <- startTidal (superdirtTarget {oLatency = 0.1, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig {cFrameTimespan = 1/20})
:{
let d = streamReplace superDirt
-- Pattern state
hush = streamHush superDirt
list = streamList superDirt
mute = streamMute superDirt
unmute = streamUnmute superDirt
solo = streamSolo superDirt
unsolo = streamUnsolo superDirt
-- Globals
once = streamOnce superDirt
nudgeAll = streamNudgeAll superDirt
all = streamAll superDirt
resetCycles = streamResetCycles superDirt
-- Transitions
xfade i = transition superDirt True (Sound.Tidal.Transition.xfadeIn 4) i
xfadeIn i t = transition superDirt True (Sound.Tidal.Transition.xfadeIn t) i
histpan i t = transition superDirt True (Sound.Tidal.Transition.histpan t) i
wait i t = transition superDirt True (Sound.Tidal.Transition.wait t) i
waitT i f t = transition superDirt True (Sound.Tidal.Transition.waitT f t) i
jump i = transition superDirt True (Sound.Tidal.Transition.jump) i
jumpIn i t = transition superDirt True (Sound.Tidal.Transition.jumpIn t) i
jumpIn' i t = transition superDirt True (Sound.Tidal.Transition.jumpIn' t) i
jumpMod i t = transition superDirt True (Sound.Tidal.Transition.jumpMod t) i
interpolate i = transition superDirt True (Sound.Tidal.Transition.interpolate) i
interpolateIn i t = transition superDirt True (Sound.Tidal.Transition.interpolateIn t) i
clutch i = transition superDirt True (Sound.Tidal.Transition.clutch) i
clutchIn i t = transition superDirt True (Sound.Tidal.Transition.clutchIn t) i
anticipate i = transition superDirt True (Sound.Tidal.Transition.anticipate) i
anticipateIn i t = transition superDirt True (Sound.Tidal.Transition.anticipateIn t) i
forId i t = transition superDirt False (Sound.Tidal.Transition.mortalOverlay t) i
mortal i lifespan release = transition superDirt True (Sound.Tidal.Transition.mortal lifespan release) i
-- Default pattern IDs
d1 = d 1 . (|< orbit 0)
d2 = d 2 . (|< orbit 1)
d3 = d 3 . (|< orbit 2)
d4 = d 4 . (|< orbit 3)
d5 = d 5 . (|< orbit 4)
d6 = d 6 . (|< orbit 5)
d7 = d 7 . (|< orbit 6)
d8 = d 8 . (|< orbit 7)
d9 = d 9 . (|< orbit 8)
d10 = d 10 . (|< orbit 9)
d11 = d 11 . (|< orbit 10)
d12 = d 12 . (|< orbit 11)
d13 = d 13
d14 = d 14
d15 = d 15
d16 = d 16
:}
:{
bitwigTarget = OSCTarget {oName = "Bitwig",
oAddress = "127.0.0.1",
oPort = 10000,
oPath = "/bitwig",
oShape = Nothing,
oLatency = 0.02,
oPreamble = [],
oTimestamp = MessageStamp}
:}
bitwig <- startTidal bitwigTarget (defaultConfig {cFrameTimespan = 1/20})
:{
let b = streamReplace bitwig
-- Pattern state
hushB = streamHush bitwig
listB = streamList bitwig
muteB = streamMute bitwig
unmuteB = streamUnmute bitwig
soloB = streamSolo bitwig
unsoloB = streamUnsolo bitwig
-- Globals
allB = streamAll bitwig
onceB = streamOnce bitwig
nudgeAllB = streamNudgeAll bitwig
resetCyclesB = streamResetCycles bitwig
-- -- Transitions: not sure how to handle these for multiple targets
-- xfade i = transition bitwig True (Sound.Tidal.Transition.xfadeIn 4) i
-- xfadeIn i t = transition bitwig True (Sound.Tidal.Transition.xfadeIn t) i
-- histpan i t = transition bitwig True (Sound.Tidal.Transition.histpan t) i
-- wait i t = transition bitwig True (Sound.Tidal.Transition.wait t) i
-- waitT i f t = transition bitwig True (Sound.Tidal.Transition.waitT f t) i
-- jump i = transition bitwig True (Sound.Tidal.Transition.jump) i
-- jumpIn i t = transition bitwig True (Sound.Tidal.Transition.jumpIn t) i
-- jumpIn' i t = transition bitwig True (Sound.Tidal.Transition.jumpIn' t) i
-- jumpMod i t = transition bitwig True (Sound.Tidal.Transition.jumpMod t) i
-- interpolate i = transition bitwig True (Sound.Tidal.Transition.interpolate) i
-- interpolateIn i t = transition bitwig True (Sound.Tidal.Transition.interpolateIn t) i
-- clutch i = transition bitwig True (Sound.Tidal.Transition.clutch) i
-- clutchIn i t = transition bitwig True (Sound.Tidal.Transition.clutchIn t) i
-- anticipate i = transition bitwig True (Sound.Tidal.Transition.anticipate) i
-- anticipateIn i t = transition bitwig True (Sound.Tidal.Transition.anticipateIn t) i
-- forId i t = transition bitwig False (Sound.Tidal.Transition.mortalOverlay t) i
-- mortal i lifespan release = transition bitwig True (Sound.Tidal.Transition.mortal lifespan release) i
-- Default pattern IDs
b1 = b 1 . (|< orbit 0)
b2 = b 2 . (|< orbit 1)
b3 = b 3 . (|< orbit 2)
b4 = b 4 . (|< orbit 3)
b5 = b 5 . (|< orbit 4)
b6 = b 6 . (|< orbit 5)
b7 = b 7 . (|< orbit 6)
b8 = b 8 . (|< orbit 7)
b9 = b 9 . (|< orbit 8)
b10 = b 10 . (|< orbit 9)
b11 = b 11 . (|< orbit 10)
b12 = b 12 . (|< orbit 11)
b13 = b 13
b14 = b 14
b15 = b 15
b16 = b 16
:}
-- globals
:{
let asap = once
setcps = asap . cps
:}
-- Group state
:{
let setI a b = streamSetI superDirt a b >> streamSetI bitwig a b
setF a b = streamSetF superDirt a b >> streamSetF bitwig a b
setS a b = streamSetS superDirt a b >> streamSetS bitwig a b
setR a b = streamSetR superDirt a b >> streamSetR bitwig a b
setB a b = streamSetB superDirt a b >> streamSetB bitwig a b
:}
:set prompt "tidal> "
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment