56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#include <MIDI.h>
|
|
|
|
// This example shows how to create two instances of the library to create a merger.
|
|
// There are two MIDI couples of IO, A and B, each using thru and merging with the
|
|
// input from the other node. The result is the following:
|
|
// A out = A in + B in
|
|
// B out = B in + A in
|
|
|
|
#if defined(ARDUINO_SAM_DUE)
|
|
MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiA);
|
|
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiB);
|
|
#elif defined(ARDUINO_SAMD_ZERO)
|
|
MIDI_CREATE_INSTANCE(Serial_, SerialUSB, midiA);
|
|
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiB);
|
|
#elif defined(USBCON) || defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MKL26Z64__)
|
|
#include <SoftwareSerial.h>
|
|
SoftwareSerial softSerial(2,3);
|
|
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiA);
|
|
MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiB);
|
|
#else
|
|
#include <SoftwareSerial.h>
|
|
SoftwareSerial softSerial(2,3);
|
|
MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiA);
|
|
MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiB);
|
|
#endif
|
|
|
|
void setup()
|
|
{
|
|
// Initiate MIDI communications, listen to all channels
|
|
midiA.begin(MIDI_CHANNEL_OMNI);
|
|
midiB.begin(MIDI_CHANNEL_OMNI);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
if (midiA.read())
|
|
{
|
|
// Thru on A has already pushed the input message to out A.
|
|
// Forward the message to out B as well.
|
|
midiB.send(midiA.getType(),
|
|
midiA.getData1(),
|
|
midiA.getData2(),
|
|
midiA.getChannel());
|
|
}
|
|
|
|
if (midiB.read())
|
|
{
|
|
// Thru on B has already pushed the input message to out B.
|
|
// Forward the message to out A as well.
|
|
midiA.send(midiB.getType(),
|
|
midiB.getData1(),
|
|
midiB.getData2(),
|
|
midiB.getChannel());
|
|
}
|
|
}
|