added fritzing files
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#include "Arduino.h"
|
||||
#include "bombatuino_MIDI.h"
|
||||
|
||||
void MIDI::begin(int channel) {
|
||||
Serial.begin(31250);
|
||||
//if given channel is not valid, set default channel to 1
|
||||
if (channel > MIDI_MAX_CHANNEL)
|
||||
channel = MIDI_DEFAULT_CHANNEL;
|
||||
_channel = channel;
|
||||
}
|
||||
|
||||
bool MIDI::message(int status, int data, int data2, int channel) {
|
||||
//check if status byte is valid
|
||||
if (status > MIDI_MAX_STATUS) return false;
|
||||
//check if first data byte is valid
|
||||
if (data > MIDI_MAX_DATA) return false;
|
||||
//check if second data byte is valid
|
||||
if (data2 > MIDI_MAX_DATA) return false;
|
||||
//if no specific channel given, use default channel
|
||||
if (channel == MIDI_NULL_CHANNEL) channel = _channel;
|
||||
//check if channel is valid
|
||||
if (channel > MIDI_MAX_CHANNEL) return false;
|
||||
//write bytes to serial
|
||||
Serial.write(status+channel);
|
||||
Serial.write(data);
|
||||
//check if second data byte should be send
|
||||
if (status != MIDI_PROGRAMM_CHANGE && status != MIDI_CHANNEL_PRESSURE)
|
||||
Serial.write(data2);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MIDI::noteOff(int note, int velocity, int channel) {
|
||||
return message(MIDI_NOTE_OFF,note,velocity,channel);
|
||||
}
|
||||
|
||||
bool MIDI::noteOn(int note, int velocity, int channel) {
|
||||
return message(MIDI_NOTE_ON,note,velocity,channel);
|
||||
}
|
||||
|
||||
bool MIDI::polyphonicKeyPressure(int note, int velocity, int channel) {
|
||||
return message(MIDI_POLYPHONIC_KEY_PRESSURE,note,velocity,channel);
|
||||
}
|
||||
|
||||
bool MIDI::controlChange(int controller, int value, int channel) {
|
||||
return message(MIDI_CONTROL_CHANGE,controller,value,channel);
|
||||
}
|
||||
|
||||
bool MIDI::programChange(int programm, int channel) {
|
||||
return message(MIDI_PROGRAMM_CHANGE,programm,0,channel);
|
||||
}
|
||||
|
||||
bool MIDI::channelPressure(int pressure, int channel) {
|
||||
return message(MIDI_CHANNEL_PRESSURE,pressure,0,channel);
|
||||
}
|
||||
|
||||
bool MIDI::pitchWheelChange(int last, int most, int channel) {
|
||||
return message(MIDI_PITCH_WHEEL_CHANGE,last,most,channel);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* @file bombatuino_MIDI.h
|
||||
*
|
||||
* @author Lukas Haubaum (lukas@haubaum.de)
|
||||
*
|
||||
* @date February, 2013
|
||||
*
|
||||
* @brief arduino library for sending MIDI messages over serial
|
||||
*
|
||||
* library is just for sending MIDI messages over normal Serial (TX), not for receiving.
|
||||
*
|
||||
* */
|
||||
|
||||
#ifndef bombatuino_MIDI_h
|
||||
#define bombatuino_MIDI_h
|
||||
|
||||
#define MIDI_NOTE_OFF 0x80
|
||||
#define MIDI_NOTE_ON 0x90
|
||||
#define MIDI_POLYPHONIC_KEY_PRESSURE 0xA0
|
||||
#define MIDI_CONTROL_CHANGE 0xB0
|
||||
#define MIDI_PROGRAMM_CHANGE 0xC0
|
||||
#define MIDI_CHANNEL_PRESSURE 0xD0
|
||||
#define MIDI_PITCH_WHEEL_CHANGE 0xE0
|
||||
|
||||
#define MIDI_DEFAULT_CHANNEL 0x00
|
||||
#define MIDI_MAX_STATUS 0xE0
|
||||
#define MIDI_MAX_CHANNEL 0x0F
|
||||
#define MIDI_MAX_DATA 0x7F
|
||||
#define MIDI_NULL_CHANNEL -1
|
||||
|
||||
class MIDI {
|
||||
public:
|
||||
/**
|
||||
* initalize the class, should be called in setup() function
|
||||
*
|
||||
* !IMPORTANT sets Serial baud rate to the default MIDI baud rate, so do not change baud rate manually
|
||||
*
|
||||
* @param optional: default MIDI channel
|
||||
*/
|
||||
void begin(int channel = MIDI_DEFAULT_CHANNEL);
|
||||
/**
|
||||
* send MIDI message over Serial
|
||||
*
|
||||
* @param status byte
|
||||
* @param first data byte
|
||||
* @param second data byte
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool message(int status, int data, int data2, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send Note off MIDI message
|
||||
*
|
||||
* @param note number
|
||||
* @param optional: velocity
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool noteOff(int note, int velocity = MIDI_MAX_DATA, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send Note on MIDI message
|
||||
*
|
||||
* @param note number
|
||||
* @param velocity
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool noteOn(int note, int velocity, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send polyphinic key pressure MIDI message
|
||||
*
|
||||
* @param note number
|
||||
* @param velocity
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool polyphonicKeyPressure(int note, int velocity, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send control change MIDI message
|
||||
*
|
||||
* @param controller number
|
||||
* @param value
|
||||
* @param optional: MIDI channel
|
||||
*/
|
||||
bool controlChange(int controller, int value, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send program change MIDI message
|
||||
*
|
||||
* @param programm number
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool programChange(int programm, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send channel pressure MIDI message
|
||||
*
|
||||
* @param pressure value
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool channelPressure(int pressure, int channel = MIDI_NULL_CHANNEL);
|
||||
/**
|
||||
* send pitch wheel change MIDI message
|
||||
*
|
||||
* @param last significant bits
|
||||
* @param most significant bits
|
||||
* @param optional: MIDI channel
|
||||
*
|
||||
* @return false, if an error occurs
|
||||
*/
|
||||
bool pitchWheelChange(int last, int most, int channel = MIDI_NULL_CHANNEL);
|
||||
private:
|
||||
int _channel; /**> the default MIDI channel */
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user