USB Midi In with Teensy 3.1 and Arturia Analog Factory MIDI controller issues

Status
Not open for further replies.

alfa66

Well-known member
I have been using the example that I shared with Paul & the PJRC community to build an interface to the Korg Monotron Duo:

int ledPin = 13;
void OnNoteOn(byte channel, byte note, byte velocity)
{
digitalWrite(ledPin, HIGH);
}
void OnNoteOff(byte channel, byte note, byte velocity)
{
digitalWrite(ledPin, LOW);
}
void setup()
{
pinMode(ledPin, OUTPUT);
// usbMIDI.setHandleNoteOff(OnNoteOff);
//usbMIDI.setHandleNoteOn(OnNoteOn) ;
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
usbMIDI.sendNoteOn(60, 99, 1);

}

void loop()
{
usbMIDI.read();

}


This works great when I control the Teensy from Midi Wrench (which is an iPad app), but when I connect the Teensy 3.1 to my MIDI controller (Arturia Analog Factory) the above code does not recognize the NoteOn and NoteOff events from that keyboard. Note that I am powering up the keyboard.
I also used a USB monitor with my MAC to see the midi messages coming out from the MIDI controller, but again, the Teensy does not seem to recognize the NoteOn/NoteOff events.

EDIT

More information. I started the official Arturia SW and "snoop" this MIDI exchange:

====
11:43:15.307 To Teensy MIDI SysEx Universal Non-Real Time 6 bytes
11:43:16.077 To Analog Factory Experience SysEx Universal Non-Real Time 6 bytes
11:43:16.078 From Analog Factory Experience SysEx Universal Non-Real Time 17 bytes
11:43:16.282 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.283 From Analog Factory Experience SysEx Arturia 84 bytes
11:43:16.305 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.307 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.310 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.312 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.314 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.316 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.318 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.320 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.322 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.324 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.326 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.328 To Analog Factory Experience SysEx Arturia 8 bytes
11:43:16.414 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.497 From Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.497 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.514 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.515 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.613 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.614 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.681 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.693 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.695 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.697 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.698 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:58.602 From Analog Factory Experience Note On 1 F2 84
11:43:58.676 From Analog Factory Experience Note Off 1 F2 81

====

So it appears that I need to manage this SysEx message exchange between the controller and the Teensy 3.1.
Does anybody know how to do this ?

Also, my MIDI monitor does not show me the content of these SysEx messages, so while I have a better sense of what's going on I am still flying bind...

Thank you
 
Last edited:
I have been using the example that I shared with Paul & the PJRC community to build an interface to the Korg Monotron Duo:

int ledPin = 13;
void OnNoteOn(byte channel, byte note, byte velocity)
{
digitalWrite(ledPin, HIGH);
}
void OnNoteOff(byte channel, byte note, byte velocity)
{
digitalWrite(ledPin, LOW);
}
void setup()
{
pinMode(ledPin, OUTPUT);
// usbMIDI.setHandleNoteOff(OnNoteOff);
//usbMIDI.setHandleNoteOn(OnNoteOn) ;
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
usbMIDI.sendNoteOn(60, 99, 1);

}

void loop()
{
usbMIDI.read();

}


This works great when I control the Teensy from Midi Wrench (which is an iPad app), but when I connect the Teensy 3.1 to my MIDI controller (Arturia Analog Factory) the above code does not recognize the NoteOn and NoteOff events from that keyboard. Note that I am powering up the keyboard.
I also used a USB monitor with my MAC to see the midi messages coming out from the MIDI controller, but again, the Teensy does not seem to recognize the NoteOn/NoteOff events.

EDIT

More information. I started the official Arturia SW and "snoop" this MIDI exchange:

====
11:43:15.307 To Teensy MIDI SysEx Universal Non-Real Time 6 bytes
11:43:16.077 To Analog Factory Experience SysEx Universal Non-Real Time 6 bytes
11:43:16.078 From Analog Factory Experience SysEx Universal Non-Real Time 17 bytes
11:43:16.282 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.283 From Analog Factory Experience SysEx Arturia 84 bytes
11:43:16.305 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.307 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.310 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.312 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.314 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.316 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.318 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.320 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.322 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.324 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.326 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.328 To Analog Factory Experience SysEx Arturia 8 bytes
11:43:16.414 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.497 From Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.497 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.514 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.515 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.613 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.614 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.681 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.692 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.693 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.695 To Analog Factory Experience SysEx Arturia 10 bytes
11:43:16.697 To Analog Factory Experience SysEx Arturia 9 bytes
11:43:16.698 From Analog Factory Experience SysEx Arturia 10 bytes
11:43:58.602 From Analog Factory Experience Note On 1 F2 84
11:43:58.676 From Analog Factory Experience Note Off 1 F2 81

====

So it appears that I need to manage this SysEx message exchange between the controller and the Teensy 3.1.
Does anybody know how to do this ?

Also, my MIDI monitor does not show me the content of these SysEx messages, so while I have a better sense of what's going on I am still flying bind...

Thank you

UPDATE

I figured out I need to send the following from Teensy during the setup:

byte SysExQuery[] = {0xF0, 0x7E, 0x7F, 0x06, 0x01, 0xF7};

usbMIDI.sendSysEx(6, SysExQuery);

but I get no response from the keyboard (or I don't know how to parse it !!!). I see not LED turning on/off ...


void loop()
{
//usbMIDI.read();
//************************************************
// handle USB MIDI incoming data
if( usbMIDI.read() ){
if(usbMIDI.getType() == 0) {
digitalWrite(ledPin, LOW);
}
if(usbMIDI.getType() == 1) {
digitalWrite(ledPin, HIGH);
}

if(usbMIDI.getType() == 7){ // filter non-sysex
pSysEx = usbMIDI.getSysExArray(); // get pointer to data
if((pSysEx[0]==0xF0) && (pSysEx[1]==0x00)&&(pSysEx[2]==0x20)&&(pSysEx[3]==0x6B)){ // Arturia sysex header
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(500);

}
}

}

}
 
Status
Not open for further replies.
Back
Top