Print Tidal's synths and FX

Hi everyone.
I just made something that I thought was worth sharing.
I keep forgetting all the sounds and FX names available to use on Tidal, so I find myself using the ones I use the most because those are the ones I can remember.

I tried to find a way to print all of this, either on Tidal or SuperCollider. For the samples there is ~dirt.postSampleInfo. But I couldn't find something similar for the synths and FX. So I did something.

It's not a definitive solution because it's kind of fragile. It's a start anyway. If anyone knows a way to make it better or has a better solution please let me know.
The biggest downsize is that you should have already started the server on the SC and added the SynthDefs you will be using on the SC (not the SuperDirt ones).

Here goes:

// in SuperCollider where you have your SuperDirt initialization
// before starting the SuperDirt stuff:
// create a dictionary
q = q ? ();
// get all SynthDefs that have already been added
q.addedSynthDefs = SynthDescLib.global.synthDescs.keys;

// the minimal SuperDirt stuff
// Taken from the example in the SuperCollider help system after the initialization part
      ~dirt = SuperDirt(2, s);
      ~dirt.loadSoundFiles;
      ~dirt.start(57120, [0, 0]);
// my own synths and fxs for tidal:
      ~dirt.loadSynthDefs("~/SuperCollider/instruments/my_own_tidal_instruments.scd");
      "~/SuperCollider/FX/myTidalFx.scd".standardizePath.load;

// Now comes the functions:
(
q.print_dirt_stuff = {
      ( SynthDescLib.global.synthDescs.keys - q.addedSynthDefs ).
      asArray.sort.do { |key|
          // we have to clear synthDefs names like for example
          // '_dirt_squiz', to get just 'squiz', as they are in ~dirt.modules
          key = key.asString;
          if ( key.beginsWith("dirt_") ) { key = key.replace("dirt_", "")};
          if (key.find("_").notNil) {
              var index = key.find("_");
              // the following 'if' is only because of dirt_pitch_shift2 and dirt_sample_long_1_2
              // since they have '_' in their name
              if ( key.at(index+1).asString != "l" e: ( key.at(index+1).asString != "s" ) ) {
                  while {index < key.size} {key.takeAt(index)}
              };
          };
          key.postln;
      };
      '';
};
q.print_dirt_stuff;
);
(
q.print_dirt_stuff_params = {
      ( SynthDescLib.global.synthDescs.keys - q.addedSynthDefs ).
      asArray.sort.keysValuesDo { |key|
          var desc = SynthDescLib.match(key).controls;
          key = key.asString;
          if ( key.beginsWith("dirt_") ) { key = key.replace("dirt_", "")};
          if (key.find("_").notNil) {
              var index = key.find("_");
              if ( key.at(index+1).asString != "l" and: (
                  key.at(index+1).asString !="s" ) ) {
                  while {index < key.size} {key.takeAt(index)}
              };
          };
          postf("% ->", key);
          desc.do { |ctr|
              if (ctr.name != \out) {
                  postf(", % %", ctr.name, ctr.defaultValue.round(0.01));
              }
          };
          ".\n".postln;
      };
      '';
};
q.print_dirt_stuff_params;
)

Like I said, it's far from perfect, but it works. Now with q.print_dirt_stuff and q.print_dirt_stuff_params one can check out all the effects and synthesizers available on Tidal.

Some names come with channel numbers at the end, like squiz2. I couldn't find a way to fix this.

Some drawbacks are:
If you add SynthDefs later, they will also be printed.
The effects and sznths are printed mixed together, in alphabetical order.
Hope this is helpful to someone out there.

4 Likes