Tidal Multichannel

Here is a quick overview of setting up an 8-channel tidalcycles environment using the classic Dirt synthesizer.

alt text



First you will want to compile Dirt to use 8 output channels. You will find this flag exposed in the project’s config.h as:



Attached are functions created for 8 channels panning.

There is an off-by-one issue when using multichannel output through dirt, so instead of pan functions scaling from 0 - 1 (which will wrap entirely to channel one output) you will need to calculate your highest value as n-1/n where n is the total number of desired outputs. In the example of 8 channels, your final pan value will simply be 7/8 or

#pan 0.875

A second issue encountered is with the use of #cut functions. a pan list specified as:

#pan "[0, 0.125]"
#cut "1"

Will only play correctly on one of the two expected output channels. This is addressed by sending a pan value between the values.

#pan "0.0625"
#cut "1"

For reference, here was the arrangement of the 8 speakers labeled by their output channel from an interface.

alt text

--more pans
let pair1 = pan "[0.0, 0.125]"
    pair2 = pan "[0.25, 0.375]"
    pair3 = pan "[0.5, 0.625]"
    pair4 = pan "[0.75, 0.875]"
    pair1c = pan "[0.075]"
    pair2c = pan "[0.3125]"
    pair3c = pan "[0.565]"
    pair4c = pan "[0.8125]"
    panL  = pan "[0, 0.25, 0.5, 0.75]"
    panR  = pan "[0.125, 0.375, 0.625, 0.875]"
    panCClockwise = pan "{0.125 0.375 0.625 0.875 0.75 0.5 0.25 0.0}%8"
    panClockwise  = pan "{0.0 0.25 0.5 0.75 0.875 0.625 0.375 0.125}%8"

Jack & Jackmixer

After compiling Dirt for 8 channels of output, you will see the appropriate number of exposed outs. I recommend using a graphical mixing tool in order to work through output expectations such as those mentioned in the above section. For this I opted to use jackmixer which provides a basic interface with channel levels.

I chose to setup d1-d8 for dirt output and e1-e8 (external) for handling 8 channel output of synthesizers. The XML configuration for jackmixer is included in this repo for reference. An extra bonus of using jackmixer is the ability to midi map channel pan/levels. These values were defined for manually mixing synth inputs to target speakers during live performance.