Home

Awesome

SuperDirtMixer (MrReason setup version)

This is a mixer ui was created for the sound engine SuperDirt https://github.com/musikinformatik/SuperDirt for the TidalCycles http://tidalcycles.org/ programming language. The main motivation of this mixer was to get rid of using a DAW like Ableton in a live coding setup, because the author just used it for mixing a live setup. This mixer helps to realize tonal depth, clean frequency separation, signal compression and a stereo panorama and makes this easily accessible in SuperDirt. In general this mixer overwrites the default values of the orbits defaultParentEvents. This means i.e. that it allows to change the value for pan from 0.5 to a different value from 0 to 1. These defaultParentEvent values will be used until they get overwritten on the TidalCycles side.

For the EQ of an orbit, this plugin is using EQui (https://github.com/thgrund/EQui). For this it's needed to add some additional values to the defaultParentEvent to store and change the EQui parameters which will be done during the initialisation of this mixer. The eq functionality was added as a global effect to every orbit. This allows you to change the eq parameters for every orbit and still use all the other filter like hpf or lpf.

mixer

Requirements

Features

Mixer

Equalizer

Dynamic Range Compressor

Stage Master

Preset Management

Clean up before Upgrade

If you already installed the SuperDirtMixer, then you need to remove the EQui Quark manually once. This is needed to switch to my fork, instead of using the original repository. This is how you achieve that:

  1. Execute Quarks.gui in SuperCollider or open the Quarks ui under Language/Quarks
  2. Search for EQui and select it
  3. Open the directory under Local path (should be inside of downloaded-quarks)
  4. Delete the EQui folder
  5. Close the Quarks window

How to install it

You can download the bundled zip from this GitHub repository, unpack it and install the Quark in SuperCollider. You can do this in SuperCollider via Language -> Quarks -> Install a folder.

How to use it

Pass this in your startup file after you installed it:

(
    s.waitForBoot {
        ~dirt = SuperDirt(2, s);
        ~dirt.start(57120, 0 ! 14);
        // More SuperDirt ...

        // Initialize the SuperDirtMixer
        ~mixer = SuperDirtMixer(~dirt);

        // You can adjust parameters before you use the ui
        ~mixer.setOrbitLabels(["d1 - Lead", "d2 - Bass", "d3 - Key", "d4 - Pad"]);
        ~mixer.setMasterBus(0);

        // When you added your settings in you startup file, then you should be able to use the ui at any time in any differtent SuperCollider file.
        ~mixer.gui;
    }
)

For more in depth configuration options you can have a look into the helpfile. This is accessable in SuperCollider when your cursor is on SuperDirtMixer and you press i.e. Command + D on MacOS.

Preset management

You can load and overwrite existing preset files within the SuperDirtMixer ui. However to add new preset files, you need to create an empty json file within your preset folder. The default one is the preset folder within the SuperDirtMixer Quark.

The SuperDirtMixer is only shipped with one single Default.json file.

When you created a new file in your preset folder, then you need to restart the SuperDirtMixer. After the reload, you should have access to the newly created preset file.

Control the mixer with TidalCycles

It's possible to directly change the orbit values within your regular tidal patterns, but then you wouldn't see the changes reflected in the ui. In any case you need to evaluate the code in tidal/src/PatternFunctions.hs.

To control the SuperDirtMixer with TidalCycles and to see the changeds reflected in the ui, you need to create a new target in your BootTidal.hs . Here is the template for it:

let superDirtMixerTarget = Target {
			  oName = "superDirtMixer", oAddress = "localhost"
				, oPort = 57121, oLatency = 0.2, oSchedule = Live
				, oWindow = Nothing, oHandshake = False
				, oBusPort = Nothing }
    oscplay = OSC "/SuperDirtMixer" Named {requiredArgs = ["orbit"]}
    oscmap = [(superDirtMixerTarget, [oscplay])]

superDirtMixer <- startStream (defaultConfig {cCtrlPort = 6010}) oscmap

let x1 = streamReplace superDirtMixer 1 . (|< orbit 0)
    x2 = streamReplace superDirtMixer 2 . (|< orbit 1)
    x3 = streamReplace superDirtMixer 3 . (|< orbit 2)
    x4 = streamReplace superDirtMixer 4 . (|< orbit 3)
    x5 = streamReplace superDirtMixer 5 . (|< orbit 4)
    x6 = streamReplace superDirtMixer 6 . (|< orbit 5)
    x7 = streamReplace superDirtMixer 7 . (|< orbit 6)
    x8 = streamReplace superDirtMixer 8 . (|< orbit 7)
    x9 = streamReplace superDirtMixer 9 . (|< orbit 8)
    x10 = streamReplace superDirtMixer 10 . (|< orbit 9)
    x11 = streamReplace superDirtMixer 11 . (|< orbit 10)
    x12 = streamReplace superDirtMixer 12 . (|< orbit 11)
    x13 = streamReplace superDirtMixer 13 . (|< orbit 12)
    x14 = streamReplace superDirtMixer 14 . (|< orbit 13)
   
-- This is needed to silence all patterns from both streams
hush = do
   streamHush tidal
   streamHush superDirtMixer

Then you should be able to run these TidalCycles patterns independently from. your other patterns and see the changes in the ui. I.e.

x1 $
 stack [
-- Equalizer
   every 2 rev $ loShelfFreq "100"
      <| loShelfGain
      (segment 64 $ range "-8" 16 sine)
  ,loPeakGain "<-10 -5 8>"
      <| (slow 2 $ loPeakFreq
      (segment 64 $ range 100 5000 sine))
  ,  midPeakGain "<10>"
      <| midPeakFreq
      (slow 2 $ segment 64 $ range 400 2000 isaw)
  , hiPeakGain "<12 -6 -8>"
      <| hiPeakFreq
      (slow 2 $ segment 64 $ range 8000 1000 cosine)
  , loPassFreq "<7000 5000 10000 1000>"
  , loPassBypass "<1 0>"
  , hiShelfFreq "7000"
    <| hiShelfGain
    (segment 64 $ range "-8" 16 sine)
  -- Compressor
  , cpThresh "<-40 -20 -10 0>" <| cpRatio "1 2 3 4" # cpGain "<10 4 2 0>"
  , pan "[0 0.25 0.5 0.75 1]"
]

Troubleshootings

When there are issues during the first startup, then it's most likely that there is an issue with the dependand Quarks. Ensure that the correct Quarks are installed. For this you can check the Quarks list in SuperCollider via Language -> Quarks -> Install a folder. You should have these Quarks installed. If not, then install them manually:

Shoutouts