Hi,
I was under the impression that I could initialize midi from within my tidal startup file
My current startup file
(
s.reboot { // server options are only updated on reboot
// configure the sound server: here you could add hardware specific options
// see http://doc.sccode.org/Classes/ServerOptions.html
s.options.numBuffers = 1024 * 256; // increase this if you need to load more samples
s.options.memSize = 8192 * 32; // increase this if you get "alloc failed" messages
s.options.numWireBufs = 64; // increase this if you get "exceeded number of interconnect buffers" messages
s.options.maxNodes = 1024 * 32; // increase this if you are getting drop outs and the message "too many nodes"
s.options.numOutputBusChannels = 2; // set this to your hardware output channel size, if necessary
s.options.numInputBusChannels = 2; // set this to your hardware output channel size, if necessary
// boot the server and start SuperDirt
s.waitForBoot {
~dirt = SuperDirt(2, s); // two output channels, increase if you want to pan across more channels
~dirt.loadSoundFiles; // load samples (path containing a wildcard can be passed in)
// load additional sample libraries
// ~dirt.loadSoundFiles("~/projects/???/*");
~dirt.loadSoundFiles("~/projects/tidal/audio/samples/*");
// s.sync; // optionally: wait for samples to be read
~dirt.start(57120, 0 ! 12); // start listening on port 57120, create two busses each sending audio to channel 0
// optional, needed for convenient access from sclang:
(
~d1 = ~dirt.orbits[0]; ~d2 = ~dirt.orbits[1]; ~d3 = ~dirt.orbits[2];
~d4 = ~dirt.orbits[3]; ~d5 = ~dirt.orbits[4]; ~d6 = ~dirt.orbits[5];
~d7 = ~dirt.orbits[6]; ~d8 = ~dirt.orbits[7]; ~d9 = ~dirt.orbits[8];
~d10 = ~dirt.orbits[9]; ~d11 = ~dirt.orbits[10]; ~d12 = ~dirt.orbits[11];
);
};
// https://club.tidalcycles.org/t/way-to-limit-maximum-output-volume/2383
Safety.all;
Safety.setLimit(0.8);
s.latency = 0.3; // increase this if you get "late" messages
};
);
I am running this file via command line ...
sclang ~/bin/superdirt/superdirt_startup.scd
... and tried to add these adapted lines from the userbase tutorial:
MIDIClient.init;
~midiOut = MIDIOut.newByName("Midi Through", "Midi Through Port-0");
~dirt.soundLibrary.addMIDI(\midi, ~midiOut);
But I always get the following error:
ERROR: Message 'soundLibrary' not understood.
However, if I open Supercollider, paste and run my startup file and then run ...
MIDIClient.init; // 1
~midiOut = MIDIOut.newByName("Midi Through", "Midi Through Port-0"); // 2
~dirt.soundLibrary.addMIDI(\midi, ~midiOut); // 3
... line by line it will work.
So I guess it something to do with the order or rather point of execution.
Any tips whether and how I can incorporate the midi initialization into my startup file (without having to open Suercollider explicitely) would be very appreciated.