parent
2e8959564e
commit
ee3cf1b92e
@ -0,0 +1,319 @@ |
|||||||
|
/*
|
||||||
|
MicroMDAEPiano |
||||||
|
|
||||||
|
MicroMDAEPiano is a port of the MDA-EPiano sound engine |
||||||
|
(https://sourceforge.net/projects/mda-vst/) for the Teensy-3.5/3.6 with audio shield.
|
||||||
|
|
||||||
|
(c)2019 H. Wirtz <wirtz@parasitstudio.de> |
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation; either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with this program; if not, write to the Free Software Foundation, |
||||||
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#if defined(MIDI_DEVICE_USB) |
||||||
|
#include <midi_UsbTransport.h> |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
#include <USBHost_t36.h> |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
MIDI_CREATE_INSTANCE(HardwareSerial, MIDI_DEVICE_DIN, midi_serial); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
USBHost usb_host; |
||||||
|
MIDIDevice midi_usb(usb_host); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
static const unsigned sUsbTransportBufferSize = 16; |
||||||
|
typedef midi::UsbTransport<sUsbTransportBufferSize> UsbTransport; |
||||||
|
UsbTransport sUsbTransport; |
||||||
|
MIDI_CREATE_INSTANCE(UsbTransport, sUsbTransport, midi_onboard_usb); |
||||||
|
#endif |
||||||
|
|
||||||
|
void setup_midi_devices(void) |
||||||
|
{ |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
// Start serial MIDI
|
||||||
|
midi_serial.begin(DEFAULT_MIDI_CHANNEL); |
||||||
|
midi_serial.setHandleNoteOn(handleNoteOn_MIDI_DEVICE_DIN); |
||||||
|
midi_serial.setHandleNoteOff(handleNoteOff_MIDI_DEVICE_DIN); |
||||||
|
midi_serial.setHandleControlChange(handleControlChange_MIDI_DEVICE_DIN); |
||||||
|
Serial.println(F("MIDI_DEVICE_DIN enabled")); |
||||||
|
#endif |
||||||
|
|
||||||
|
// start up USB host
|
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
usb_host.begin(); |
||||||
|
midi_usb.setHandleNoteOn(handleNoteOn_MIDI_DEVICE_USB_HOST); |
||||||
|
midi_usb.setHandleNoteOff(handleNoteOff_MIDI_DEVICE_USB_HOST); |
||||||
|
midi_usb.setHandleControlChange(handleControlChange_MIDI_DEVICE_USB_HOST); |
||||||
|
Serial.println(F("MIDI_DEVICE_USB_HOST enabled.")); |
||||||
|
#endif |
||||||
|
|
||||||
|
// check for onboard USB-MIDI
|
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.begin(); |
||||||
|
midi_onboard_usb.setHandleNoteOn(handleNoteOn_MIDI_DEVICE_USB); |
||||||
|
midi_onboard_usb.setHandleNoteOff(handleNoteOff_MIDI_DEVICE_USB); |
||||||
|
midi_onboard_usb.setHandleControlChange(handleControlChange_MIDI_DEVICE_USB); |
||||||
|
Serial.println(F("MIDI_DEVICE_USB enabled.")); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void check_midi_devices(void) |
||||||
|
{ |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.read(); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
usb_host.Task(); |
||||||
|
midi_usb.read(); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.read(); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
void handleNoteOn_MIDI_DEVICE_DIN(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOn(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_DIN] NoteOn")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleNoteOff_MIDI_DEVICE_DIN(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOff(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_DIN] NoteOff")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleControlChange_MIDI_DEVICE_DIN(byte inChannel, byte inData1, byte inData2) |
||||||
|
{ |
||||||
|
handleControlChange(byte inChannel, byte inData1, byte inData2); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_DIN] CC")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F( "THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
void handleNoteOn_MIDI_DEVICE_USB_HOST(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOn(inChannel, inNumber, inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB_HOST] NoteOn")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleNoteOff_MIDI_DEVICE_USB_HOST(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOff(inChannel, inNumber, inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB_HOST] NoteOff")); |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleControlChange_MIDI_DEVICE_USB_HOST(byte inChannel, byte inData1, byte inData2) |
||||||
|
{ |
||||||
|
handleControlChange(inChannel, inData1, inData2); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB_HOST] CC")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
midi_onboard_usb.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
void handleNoteOn_MIDI_DEVICE_USB(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOn(inChannel, inNumber, inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB] NoteOn")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::NoteOn, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleNoteOff_MIDI_DEVICE_USB(byte inChannel, byte inNumber, byte inVelocity) |
||||||
|
{ |
||||||
|
handleNoteOff(inChannel, inNumber, inVelocity); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB] NoteOff")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::NoteOff, inNumber, inVelocity, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void handleControlChange_MIDI_DEVICE_USB(byte inChannel, byte inData1, byte inData2) |
||||||
|
{ |
||||||
|
handleControlChange(inChannel, inData1, inData2); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F("[MIDI_USB] CC")); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_MERGE_THRU |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
midi_serial.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_DIN")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
midi_usb.send(midi::ControlChange, inData1, inData2, inChannel); |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.print(F(" THRU->MIDI_USB_HOST")); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifdef DEBUG |
||||||
|
Serial.println(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
} |
||||||
|
#endif |
@ -0,0 +1,44 @@ |
|||||||
|
/*
|
||||||
|
MicroMDAEPiano |
||||||
|
|
||||||
|
MicroMDAEPiano is a port of the MDA-EPiano sound engine |
||||||
|
(https://sourceforge.net/projects/mda-vst/) for the Teensy-3.5/3.6 with audio shield.
|
||||||
|
|
||||||
|
(c)2019 H. Wirtz <wirtz@parasitstudio.de> |
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation; either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with this program; if not, write to the Free Software Foundation, |
||||||
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef MIDI_DEVICES_H |
||||||
|
#define MIDI_DEVICES_H |
||||||
|
|
||||||
|
void setup_midi_devices(void); |
||||||
|
void check_midi_devices(void); |
||||||
|
#ifdef MIDI_DEVICE_DIN |
||||||
|
void handleNoteOn_MIDI_DEVICE_DIN(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleNoteOff_MIDI_DEVICE_DIN(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleControlChange_MIDI_DEVICE_DIN(byte inChannel, byte inData1, byte inData2); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB_HOST |
||||||
|
void handleNoteOn_MIDI_DEVICE_USB_HOST(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleNoteOff_MIDI_DEVICE_USB_HOST(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleControlChange_MIDI_DEVICE_USB_HOST(byte inChannel, byte inData1, byte inData2); |
||||||
|
#endif |
||||||
|
#ifdef MIDI_DEVICE_USB |
||||||
|
void handleNoteOn_MIDI_DEVICE_USB(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleNoteOff_MIDI_DEVICE_USB(byte inChannel, byte inNumber, byte inVelocity); |
||||||
|
void handleControlChange_MIDI_DEVICE_USB(byte inChannel, byte inData1, byte inData2); |
||||||
|
#endif |
||||||
|
#endif |
Loading…
Reference in new issue