[solved] Faderport 8 on Linux: handshake magic :)

Hi there. It’s been a while. I’ve just shot a second-hand Faderport 8, and I plan to use it in native mode with SuperCollider. Now this is more of a question to the developers - if I just connect the device on SuperCollider, I have a non-responsive MIDI, even though I see the FP 8. The hardware stays in init mode (“Waiting for host”). There must be some magic (SysEx?) messages going on to tell it that it’s OK.

So I found out Ardour has native FP support - yeah! And I managed to connect it as a control surface, and the device “wakes up”. Now I can actually forget about Ardour, and use it in SuperCollider, e.g. send pitch bend to use high-res motor fader.

Any clues or pointers to understand what magic the Ardour implementation applies to tell the box to “handshake” in native mode?

Best, .h.h.

Well the source is available, and a quick glance suggests this maybe


DEBUG_TRACE (DEBUG::FaderPort, "sending device inquiry message...\n");

	/* send device inquiry */

	MIDI::byte buf[6];

	buf[0] = 0xf0;
	buf[1] = 0x7e;
	buf[2] = 0x7f;
	buf[3] = 0x06;
	buf[4] = 0x01;
	buf[5] = 0xf7;

	MIDISurface::write (buf, 6);

Thanks. Something isn’t work yet, though. This is how it looks in SC:

MIDIClient.init;
MIDIIn.connectAll;
// see sysex responses
MIDIIn.sysex = { arg uid, packet; ["sysex", uid, packet].postln };
// find faderport output
~ep = MIDIClient.destinations.detect { |ep| ep.device.beginsWith("PreSonus") };
~midiOut = MIDIOut(0, ~ep.uid);
// send midi device inquiry
~midiOut.sysex(Int8Array[0xF0, 0x7E, 0x7F, 0x06, 0x01, 0xF7]); // nothing happens :(

I understand that the device inquiry should respond with a sysex message, but I’m not seeing it. Head-scratching.

After I have the device connected in Ardour, I can set the scribble strips with similar sysex code, so definitely the MIDI output is correctly created.

I would suggest just diving into the Ardour code:

It looks like there may be periodic update messages sent, etc. but again I am just glancing at it and nothing more, so don’t take my word for it, jump in there and start reading, which is the strength of open source software!

Seablade
1 Like

I suggest to download the Faderport 8 owner’s manual.

The complete MIDI protocol is documented in the Appendix. It is amazingly well documented (and if you scroll down you also get “PreSonus’ previously Top Secret recipe for…Chicken and Andouille Gumbo” ).

2 Likes

Yes, I did that, indeed that was what caused me to buy the Faderport in the first place, seeing that it’s documented :slight_smile:

I just double check with my own Scala code. Hurray, this works immediately. I think there is some indirection in how SuperCollider connects the MIDI output that is not somehow notifying the device. Something something virtual, the MIDIOut help file is very fuzzy about the Linux specifics. On the other hand, using Scala with Java MIDI doesn’t seem to have this problem.

So in short, nothing to do with a MIDI message based handshake, just something that doesn’t work straight away in SuperCollider Linux, at least the way I try to “open” the output port.