Doing this and that


If you have a multichannel sound module, and a lot of speakers, you may wish to use tidal in multichannel mode. Another possibility is that you want to make a multitrack recording, or send a pattern to a headphone channel for previewing.


To do this, first you have to start the Dirt synth with more channels than the default of 2 (stereo), and it’s also highly recommended to turn the compressor off:

$ ./dirt --channels 4 --no-dirty-compressor


From Tidal, you address the different channels with the pan synth parameter, for example, this would play on each of the four speakers:

sound "numbers:0 numbers:1 numbers:2 numbers:3"
  # pan "0 0.25 0.5 0.75"

The range of the pan parameter is still from 0 to 1. So, if you had four speakers, 0 would be the first one, 0.5 would be the third, 0.625 would be panned halfway between the third and fourth, and 0.875 would be halfway between fourth and first. 1 would be the same as 0.


You can run Tidal across lots of laptops, and have them all run in time.

Step 1: sync computer clocks

Ensure that the system clocks of all the computers are already in sync, via something like ntpd, or ptpd. If you’re using ntpd make sure all the computers are synced with the same network server. ptpd just syncs across a local network, is much faster and more accurate.

Step 2: sync to tempo clock

Choose one of your computers to be the ‘master clock’, which the others connect to, and start it up running Tidal. Find out and note down its IP address.

On the other computers(s), use the master’s tempo clock by setting an environment variable when you start your editor, e.g.:


Replace <HOST IP ADDRESS> with the master’s IP address. If you’re using emacs or some editor, this still works, just replace atom with the command to start your editor.

Step 3: evaluate crazy sound on all the computers

d1 $ slow 16 $ striate 128 $ sound "bd*12 sn*8 [hh sn bd]*4 sn*4 bd*4"

Hopefully all the computers will be in time with each other, and changes to the cps will take effect across all of them.

Use a Dirt connection on another laptop

If you wish, you can use a dirt synth running on a different laptop. To do this start up a Tidal process in your editor, then evaluate this code:

d1 <- stream "<IP ADDRESS OF HOST>" 7771 dirt

But instead replace <IP ADDRESS OF HOST> with the host’s IP address.


A special Haskell module named tidal-midi allows you to send MIDI pattern messages to external devices and software synths.

You can use it using standard general MIDI, or use a synth-specific library - there currently exist libraries for the Volca Keys, Bass and Beats.


  • Haskell (Windows users: make sure you get the 32bit version!)


To install TidalCycles MIDI support, just run this in a terminal window:

cabal update
cabal install tidal-midi

Load the MIDI modules

Start up TidalCycles in your favourite editor, then the following line of code (with e.g. shift-enter):

import Sound.Tidal.MIDI.Context

Talk MIDI from TidalCycles

Next, assuming you have a MIDI device attached, you need to get its device id. Run the following command (again in the editor, with shift-enter):

displayOutputDevices >>= putStrLn

You should see output like the following:

ID:	Name
0:	Midi Through Port-0
1:  USB Midi Cable MIDI

In this case we have a synth attached to the second device, a USB Midi cable, so we can connect to it with the following:

devices <- midiDevices

m1 <- midiStream devices "USB Midi Cable MIDI" 1 synthController

The number 1 there specifies the MIDI channel your synth is listening to, in this case the first one (we start counting from 1 here, a gotcha as some software starts counting from 0). Now you are ready to play some MIDI notes. Type and evaluate the following to play MIDI note #40 and #52:

m1 $ midinote "40 52"

With MIDI notes, 60 stands for middle C note. If you use n rather than midinote, then you’ll find that 0 is middle C.

m1 $ n "0 4 -8"

Using n, you can also specify notes via their names, e.g. c sharp in the fifth octave followed by a in the fourth octave:

m1 $ n "cs5 a4"

Making MIDI patterns

You can create patterns of MIDI notes just like with Dirt:

m1 $ midinote "40 [32 34] 36*2 42*3"
m1 $ midinote "[[32 34], [36 38]]"
m1 $ every 3 (density 2) $ every 4 (palindrome) $ n "{c a4 f3}%8"
m1 $ n "c a" # dur (scale 0.1 0.4 sine1)

If you find your note names aren’t coming out right, it’s probably because you’re trying to use them with midinote, instead of n.

Using synth-specific libraries

You can find a list of available synths libraries here. For example to use the Volca Keys library you first import it, then make its MIDI stream:

import Sound.Tidal.MIDI.VolcaKeys

m2 <- midiStream devices "USB Midi Cable MIDI 1" 1 keysController

You can then access the Volca Keys-specific MIDI controller parameters, for example lfo and cutoff:

m1 $ every 4 (slow 1.5) $ slow 2 $ n (offadd 0.25 (7) "f3(3,8) g5*3")
  # lfo "0.1"
  # cutoff (slow 4 sine1)

Community questions

Frequently asked questions by tidal-midi users:

Still not happy? Check out all tidal-midi questions on our Q&A platform!

Playing live

This guide assumes you are performing somewhere with Tidal, on your own laptop, and that you want to project your screen.


Ask for stereo, and if it’s a large room, for monitoring as well.

Stereo - One of Tidal’s strengths is being able to do strange stereo cross-patterns. Some venues have mono systems, however. They may have two speakers, and tell you they have stereo sound, but when you get there you find everything is mono.. Either because it’s wired as mono for some reason, or they only have a mono amp.

Monitoring - Even if you have stereo sound, you might not be able to hear it, because you’ve been placed behind the speakers (so the audience can hear you fine, but you can’t), or because they’re too far away in a large room. This might be workable (for some kinds of) DJs, but it makes improvising impossible if you can’t hear properly. If you do have monitoring, again it might only be mono.

Plugging in

If you just have your onboard laptop sound, then make sure you bring something like a “3.5mm Stereo Mini Jack to Twin RCA Phono Cable Lead”, or a “1/8 inch TRS to Dual 1/4 Inch TS Cable”. A couple of metres long and of reasonable quality, but don’t get ripped off - it’s just a wire. Here are a couple of suggestions:

If you have terrible onboard sound, or generally want pro quality with nice balanced 1/4” jack outputs, consider a sound module such as a [Focusrite Scarlett] (


This can be nasty. It could come from a ‘ground loop’, your laptop power supply, or the projector you’re plugged into. Be sure to soundcheck with the projector plugged in, this can be a real problem. Try:

  • unplugging the video cable - if it stops, it’s the projector..
  • unplugging your laptop power
  • if you have a sound engineer, ask for a DI box with ground lift

Or it might be worth getting the latter in advance, e.g. the Behringer ultra di20.

Packing up

There are a lot of videos on YouTube about how to coil cables so they don’t break, definitely worth a watch.