MIDI and OSC
The default audio output of Strudel uses the Web Audio API. It is also possible to use Strudel with MIDI and OSC / SuperDirt instead.
MIDI API
Strudel also supports midi via webmidi.
midi(outputName?)
Either connect a midi device or use the IAC Driver (Mac) or Midi Through Port (Linux) for internal midi messages. If no outputName is given, it uses the first midi output it finds.
chord("<C^7 A7 Dm7 G7>").voicing().midi()
In the console, you will see a log of the available MIDI devices as soon as you run the code, e.g. Midi connected! Using "Midi Through Port-0".
midichan(number)
Selects the MIDI channel to use. If not used, .midi
will use channel 1 by default.
ccn && ccv
ccn
sets the cc number. Depends on your synths midi mappingccv
sets the cc value. normalized from 0 to 1.
note("c a f e").ccn(74).ccv(sine.slow(4)).midi()
In the above snippet, ccn
is set to 74, which is the filter cutoff for many synths. ccv
is controlled by a saw pattern.
Having everything in one pattern, the ccv
pattern will be aligned to the note pattern, because the structure comes from the left by default.
But you can also control cc messages separately like this:
$: note("c a f e").midi() $: ccv(sine.segment(16).slow(4)).ccn(74).midi()
OSC/SuperDirt API
In mainline tidal, the actual sound is generated via SuperDirt, which runs inside SuperCollider. Strudel also supports using SuperDirt as a backend, although it requires some developer tooling to run.
Prequisites
Getting SuperDirt to work with Strudel, you need to
- install SuperCollider + sc3 plugins, see Tidal Docs (Install Tidal) for more info.
- install node.js
- download Strudel Repo (or git clone, if you have git installed)
- run
pnpm i
in the strudel directory - run
pnpm run osc
to start the osc server, which forwards OSC messages from Strudel REPL to SuperCollider
Now you’re all set!
Usage
- Start SuperCollider, either using SuperCollider IDE or by running
sclang
in a terminal - Open the Strudel REPL
…or test it here:
If you now hear sound, congratulations! If not, you can get help on the #strudel channel in the TidalCycles discord.
Note: if you have the ‘Audio Engine Target’ in settings set to ‘OSC’, you do not need to add .osc() to the end of your pattern.
Pattern.osc
Sends each hap as an OSC message, which can be picked up by SuperCollider or any other OSC-enabled software. For more info, read MIDI & OSC in the docs
SuperDirt Params
Please refer to Tidal Docs for more info.
But can we use Strudel offline?