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