Skip to content

boocli.cfg configuration

denybear edited this page Feb 23, 2022 · 12 revisions

What is the use of boocli.cfg?

boocli.cfg contains very important data to the correct working of boocli. In particular:

  • connection of Jack ports of devices: devices outputs should be connected to other devices inputs
  • description of MIDI control surface (ie. your UI hardware device) keys to activate boocli functions
  • description of MIDI control surface leds as a visual feedback of boocli

If your MIDI control surface device is different from mine (Novation Launchpad Mini; NOT Launchpad Mini MK3), then you will have to edit boocli.cfg to list midi events that correspond to your device.

connections

This part lists the Jack audio and midi connections between boocli and the external world. If you configure this part properly, boocli will make all the connections with the other devices through Jack at startup.

  • input: is the audio input of boocli: there are 2 inputs, one for left and one for right channels. These should be connected to capture outputs of the system.
  • output: is the audio output of boocli: there are 2 outputs, one for left and one for right channels. These should be connected to playback inputs of the system.
  • midi_clock: midi clock input of boocli: you should connect this to midi output of your clock device. Note that clock is a standard MIDI message, so there is usually no "midi clock" output on devices. You only have "midi out" output, that should be connected to clock entry of boocli. boocli filters automatically clock messages (0xF8 clock and 0xFA start) from the rest of midi messages.
  • midi_in: midi input of boocli: you should connect this to the midi output of your surface control midi device (ie. you UI device). Every time a key is pressed on your UI device, the corresponding midi message is output and sent to the midi_in port of boocli.
  • midi_out: midi output of boocli: you should connect this to the midi input of your surface control midi device (ie. you UI device). Every time boocli needs to light a led to indicate its processing, boocli outputs the corresponding midi message through its midi_out port.

example:

connections =
{
input = ( { server  = "system:capture_1";
	    client = "boocli.a:input_1";},
	  { server  = "system:capture_2";
	    client = "boocli.a:input_2";}
	);

output = ( { server = "boocli.a:output_1";
	     client  = "system:playback_1";},
	   { server = "boocli.a:output_2";
	     client  = "system:playback_2";}
	 );

midi_clock = ( { server  = "a2j:Circuit (capture): Circuit MIDI 1";
		 client = "boocli.a:midi_clock_1";}
	     );

midi_input = ( { server  = "a2j:Launchpad Mini (capture): Launchpad Mini MIDI 1";
		 client = "boocli.a:midi_input_1";}
	     );

midi_output = ( { server  = "boocli.a:midi_output_1";
		  client = "a2j:Launchpad Mini (playback): Launchpad Mini MIDI 1";}
	      );
};

controls

controls concern all the UI related to tracks.

tracks

tracks lists all the midi messages for the keypress of your UI device. Each keypress corresponds to a boocli functionality. Most of the time, keypress are sent by UI devices as midi NOTE_ON (0x90 kk vv) where kk is the key number and vv the velocity. Note that velocity vv should not be mentioned in boocli.cfg.

tracks are sorted by track number, and for each track, are the keypress midi messages for the different functions for that track. example:

tracks  = (
		// track 1
		// only time signature of track 1 works
		{	time	= (0x90, 0x08);
			load    = (0x90, 0x18);
			save    = (0x90, 0x28);
			play    = (0x90, 0x00);
			record  = (0x90, 0x01);
			mute    = (0x90, 0x02);
			solo    = (0x90, 0x03);
			voldown = (0x90, 0x04);
			volup   = (0x90, 0x05);
			mode    = (0x90, 0x06);
			delete  = (0x90, 0x07);}
	  );  

Note that time is a bit particular: time corresponds to the time signature key, and only track 1 setting applies. Time parameter of track 2, etc... is ignored.
This is similar with load and save: only track 1 settings apply.

led_on

tracks lists all the midi messages for lighting the leds of your UI device. Most of the time, led lightings are sent to UI devices as midi NOTE_ON (0x90 kk vv) where kk is the key number and vv the velocity. Note that velocity vv usually correspond to color and dim of leds.

led_on  = (
		// track 1
		{	time	= (0x90, 0x08, 0x3C);
			load    = (0x90, 0x18, 0x3C);
			save    = (0x90, 0x28, 0x0F);
			play    = (0x90, 0x00, 0x3C);
			record  = (0x90, 0x01, 0x0F);
			mute    = (0x90, 0x02, 0x3F);
			solo    = (0x90, 0x03, 0x3F);
			voldown = (0x90, 0x04, 0x3F);
			volup   = (0x90, 0x05, 0x3F);
			mode    = (0x90, 0x06, 0x3F);
			delete  = (0x90, 0x07, 0x0F);}
	  );

Note that time is a bit particular: time for led_on corresponds to led lit when a new bar occurs.

led_off

Logic is the same as for led_on, but to set the leds off.

led_pending_on, led_pending_off

"Pending" state is used in BBT (bar beat tick) mode, to indicate that a function (keypress) is being taken into account, but pending the next bar to be processed.
Pending states are only available for play, record, delete, volume up and down. Usually, pending state address the same led as normal states, but with a dimmer light.

led_pending_on  = (
			// track 1
			{	time	= (0x90, 0x08, 0x0D);
				play    = (0x90, 0x00, 0x1C);
				record  = (0x90, 0x01, 0x0D);
				voldown = (0x90, 0x04, 0x1D);
				volup   = (0x90, 0x05, 0x1D);
				delete  = (0x90, 0x07, 0x0D);}
		  )

Note that time is a bit particular: time for led_pending_on corresponds to led lit when a new beat occurs (but not new bar).

bars

bars concern all the UI related to bars.

rows

rows lists all the midi messages for the keypress of your UI device defining the number of bars to be recorded.
Most of the time, keypress are sent by UI devices as midi NOTE_ON (0x90 kk vv) where kk is the key number and vv the velocity. Note that velocity vv should not be mentioned in boocli.cfg.

rows are sorted by row number, and for each row, are the keypress midi messages for the different number of bars to be recorded.

example:

rows  = (
		// row 1
		{	bar1	= (0x90, 0x60);
			bar2	= (0x90, 0x61);
			bar3    = (0x90, 0x62);
			bar4    = (0x90, 0x63);
			bar5    = (0x90, 0x64);
			bar6    = (0x90, 0x65);
			bar7    = (0x90, 0x66);
			bar8    = (0x90, 0x67);}
	 );

led_on, led_off

rows lists all the midi messages for lighting the leds of your UI device (lighting of bar keys, which represent the number of bars to be recorded). Most of the time, led lightings are sent to UI devices as midi NOTE_ON (0x90 kk vv) where kk is the key number and vv the velocity. Note that velocity vv usually correspond to color and dim of leds.
led_off works the same as led_on.

example:

led_on  = (
		// row 1
		{	bar1	= (0x90, 0x60, 0x3E);
			bar2	= (0x90, 0x61, 0x3E);
			bar3    = (0x90, 0x62, 0x3E);
			bar4    = (0x90, 0x63, 0x3E);
			bar5    = (0x90, 0x64, 0x3E);
			bar6    = (0x90, 0x65, 0x3E);
			bar7    = (0x90, 0x66, 0x3E);
			bar8    = (0x90, 0x67, 0x3E);}
	   );