Some OSC/UDP glue written in Javascript/Node.js for using Hundred Rabbit's Pilot synth with TidalCycles.
TidalCycles is typically used together with SuperCollider. This app forwards TidalCycles OSC messages to Hundred Rabbit's Pilot UDP synthetizer. To install Pilot, following the instructions in the README of its GitHub repository or download a pre-built version of the Electron app here.
This app uses TidalCycles for live-coding patterns. Install your local TidalCycles environment by following the instructions found in the TidalCycles documentation.
This repository contains a Node.js app that acts as glue between TidalCycles and Pilot. To run the app, follow these steps:
npm install
npm start
To keep things simple, this app listens for OSC messages on port 57120
which is also the standard port used by TidalCycles to send OSC messages to SuperDirt/SuperCollider for producing sound.
Create or open a .tidal
file in your editor with TidalCycles support (e.g. VSCode or Atom), and start live-coding patterns with Pilot. Make sure to use the BootTidal.hs
in this repo, it contains the definition of an extra parameter (bpc
).
Use the parameters s
, n
, and octave
to send Play commands to Pilot:
-- Play command: 05C (channel 0, note C5)
d1 $ s "0"
-- Play command: B3C (channel B, note C5)
d1 $ s "b" # n "c3"
-- or
d1 $ s "b" # n "c" # octave 3
-- or
d1 $ s "b" # n "0" # octave 3
-- Play command: E4e (channel E, note E#4)
d1 $ s "e" # n "es4"
Pilot uses a standard velocity of 50% (0.5
in Tidal, or 8
in Pilot) when playing notes. Optionally, you can use the parameter velocity
in your pattern to control the velocity of your Play command:
-- Play command: 74G8 (channel 7, note G4, velocity 8)
d1 $ s "7" # n "g4" # velocity 0.5
-- Play command: A5CF (channel 7, note G4, velocity F)
d1 $ s "a" # n "c5" # velocity 1
And yes, you can pattern all those parameters! For more examples, see the examples
folder of this repository.
The setcps
function and the parameter cps
control the global BPM setting in Pilot which is applied to effects such as feedback.
Keep in mind that Tidal’s timing is based on cycles, rather than beats. As a default, tidal-pilot uses 2 beats per cycle (bpc) when translating cps to bpm (bpm = cps * 60 * bpc
). Use the parameter bpc
(defined in BootTidal.hs
) to set another value for beats per cycle in the BPM calculations performed by tidal-pilot:
-- Global command: BPM120
setcps 1
-- or
setcps (120/60/2)
-- Global and Play command: BPM120;A5C followed by BPM90;A5C
d1 $ s "a*2" # cps "1.0 0.75"
-- Global command: BPM90 (setting bpc to 3)
once $ cps 0.5 # bpc 3
-- Global and Play command: BPM90;A5C followed by BPM135;A3CF (setting bpc to 3)
d1 $ s "a*2" # cps "0.75 0.5" # bpc 3
Effects are not supported by tidal-pilot yet, you can type these commands (e.g. REV10
for some reverb) manually in the Pilot window.
- This app uses the @vliegwerk/node-tidal and @vliegwerk/node-pilot npm packages for interfacing with TidalCycles and Pilot.
- See the License file for license rights and limitations (MIT).
- Pull Requests are welcome!