From 4c82b22d3368e386a0055ab1565ec42d6bb2f239 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 3 Jul 2007 04:40:58 +0000 Subject: Added MIDI controller/event names. git-svn-id: http://svn.drobilla.net/lad/raul@560 a436a847-0d15-0410-975c-d299462d15a1 --- raul/midi_events.h | 116 ++++++++++---------- raul/midi_names.h | 233 +++++++++++++++++++++++++++++++++++++++++ tests/midi_ringbuffer_test.cpp | 1 + 3 files changed, 291 insertions(+), 59 deletions(-) create mode 100644 raul/midi_names.h diff --git a/raul/midi_events.h b/raul/midi_events.h index a298a87..863fe0f 100644 --- a/raul/midi_events.h +++ b/raul/midi_events.h @@ -28,70 +28,45 @@ * \{ */ -// Commands: -#define MIDI_CMD_NOTE_OFF 0x80 /**< note off */ -#define MIDI_CMD_NOTE_ON 0x90 /**< note on */ -#define MIDI_CMD_NOTE_PRESSURE 0xA0 /**< key pressure */ -#define MIDI_CMD_CONTROL 0xB0 /**< control change */ -#define MIDI_CMD_PGM_CHANGE 0xC0 /**< program change */ -#define MIDI_CMD_CHANNEL_PRESSURE 0xD0 /**< channel pressure */ -#define MIDI_CMD_BENDER 0xE0 /**< pitch bender */ - -#define MIDI_CMD_COMMON_SYSEX 0xF0 /**< sysex (system exclusive) begin */ -#define MIDI_CMD_COMMON_MTC_QUARTER 0xF1 /**< MTC quarter frame */ -#define MIDI_CMD_COMMON_SONG_POS 0xF2 /**< song position */ -#define MIDI_CMD_COMMON_SONG_SELECT 0xF3 /**< song select */ -#define MIDI_CMD_COMMON_TUNE_REQUEST 0xF6 /**< tune request */ -#define MIDI_CMD_COMMON_SYSEX_END 0xF7 /**< end of sysex */ -#define MIDI_CMD_COMMON_CLOCK 0xF8 /**< clock */ -#define MIDI_CMD_COMMON_TICK 0xF9 /**< tick */ -#define MIDI_CMD_COMMON_START 0xFA /**< start */ -#define MIDI_CMD_COMMON_CONTINUE 0xFB /**< continue */ -#define MIDI_CMD_COMMON_STOP 0xFC /**< stop */ -#define MIDI_CMD_COMMON_SENSING 0xFE /**< active sensing */ -#define MIDI_CMD_COMMON_RESET 0xFF /**< reset */ - - -// Controllers: - -#define MIDI_CTL_MSB_BANK 0x00 /**< Bank selection */ +// Controllers +#define MIDI_CTL_MSB_BANK 0x00 /**< Bank Selection */ #define MIDI_CTL_MSB_MODWHEEL 0x01 /**< Modulation */ #define MIDI_CTL_MSB_BREATH 0x02 /**< Breath */ #define MIDI_CTL_MSB_FOOT 0x04 /**< Foot */ -#define MIDI_CTL_MSB_PORTAMENTO_TIME 0x05 /**< Portamento time */ -#define MIDI_CTL_MSB_DATA_ENTRY 0x06 /**< Data entry */ -#define MIDI_CTL_MSB_MAIN_VOLUME 0x07 /**< Main volume */ +#define MIDI_CTL_MSB_PORTAMENTO_TIME 0x05 /**< Portamento Time */ +#define MIDI_CTL_MSB_DATA_ENTRY 0x06 /**< Data Entry */ +#define MIDI_CTL_MSB_MAIN_VOLUME 0x07 /**< Main Volume */ #define MIDI_CTL_MSB_BALANCE 0x08 /**< Balance */ #define MIDI_CTL_MSB_PAN 0x0A /**< Panpot */ #define MIDI_CTL_MSB_EXPRESSION 0x0B /**< Expression */ #define MIDI_CTL_MSB_EFFECT1 0x0C /**< Effect1 */ #define MIDI_CTL_MSB_EFFECT2 0x0D /**< Effect2 */ -#define MIDI_CTL_MSB_GENERAL_PURPOSE1 0x10 /**< General purpose 1 */ -#define MIDI_CTL_MSB_GENERAL_PURPOSE2 0x11 /**< General purpose 2 */ -#define MIDI_CTL_MSB_GENERAL_PURPOSE3 0x12 /**< General purpose 3 */ -#define MIDI_CTL_MSB_GENERAL_PURPOSE4 0x13 /**< General purpose 4 */ -#define MIDI_CTL_LSB_BANK 0x20 /**< Bank selection */ +#define MIDI_CTL_MSB_GENERAL_PURPOSE1 0x10 /**< General Purpose 1 */ +#define MIDI_CTL_MSB_GENERAL_PURPOSE2 0x11 /**< General Purpose 2 */ +#define MIDI_CTL_MSB_GENERAL_PURPOSE3 0x12 /**< General Purpose 3 */ +#define MIDI_CTL_MSB_GENERAL_PURPOSE4 0x13 /**< General Purpose 4 */ +#define MIDI_CTL_LSB_BANK 0x20 /**< Bank Selection */ #define MIDI_CTL_LSB_MODWHEEL 0x21 /**< Modulation */ #define MIDI_CTL_LSB_BREATH 0x22 /**< Breath */ #define MIDI_CTL_LSB_FOOT 0x24 /**< Foot */ -#define MIDI_CTL_LSB_PORTAMENTO_TIME 0x25 /**< Portamento time */ -#define MIDI_CTL_LSB_DATA_ENTRY 0x26 /**< Data entry */ -#define MIDI_CTL_LSB_MAIN_VOLUME 0x27 /**< Main volume */ +#define MIDI_CTL_LSB_PORTAMENTO_TIME 0x25 /**< Portamento Time */ +#define MIDI_CTL_LSB_DATA_ENTRY 0x26 /**< Data Entry */ +#define MIDI_CTL_LSB_MAIN_VOLUME 0x27 /**< Main Volume */ #define MIDI_CTL_LSB_BALANCE 0x28 /**< Balance */ #define MIDI_CTL_LSB_PAN 0x2A /**< Panpot */ #define MIDI_CTL_LSB_EXPRESSION 0x2B /**< Expression */ #define MIDI_CTL_LSB_EFFECT1 0x2C /**< Effect1 */ #define MIDI_CTL_LSB_EFFECT2 0x2D /**< Effect2 */ -#define MIDI_CTL_LSB_GENERAL_PURPOSE1 0x30 /**< General purpose 1 */ -#define MIDI_CTL_LSB_GENERAL_PURPOSE2 0x31 /**< General purpose 2 */ -#define MIDI_CTL_LSB_GENERAL_PURPOSE3 0x32 /**< General purpose 3 */ -#define MIDI_CTL_LSB_GENERAL_PURPOSE4 0x33 /**< General purpose 4 */ -#define MIDI_CTL_SUSTAIN 0x40 /**< Sustain pedal */ +#define MIDI_CTL_LSB_GENERAL_PURPOSE1 0x30 /**< General Purpose 1 */ +#define MIDI_CTL_LSB_GENERAL_PURPOSE2 0x31 /**< General Purpose 2 */ +#define MIDI_CTL_LSB_GENERAL_PURPOSE3 0x32 /**< General Purpose 3 */ +#define MIDI_CTL_LSB_GENERAL_PURPOSE4 0x33 /**< General Purpose 4 */ +#define MIDI_CTL_SUSTAIN 0x40 /**< Sustain Pedal */ #define MIDI_CTL_PORTAMENTO 0x41 /**< Portamento */ #define MIDI_CTL_SOSTENUTO 0x42 /**< Sostenuto */ -#define MIDI_CTL_SOFT_PEDAL 0x43 /**< Soft pedal */ -#define MIDI_CTL_LEGATO_FOOTSWITCH 0x44 /**< Legato foot switch */ +#define MIDI_CTL_SOFT_PEDAL 0x43 /**< Soft Pedal */ +#define MIDI_CTL_LEGATO_FOOTSWITCH 0x44 /**< Legato Foot Switch */ #define MIDI_CTL_HOLD2 0x45 /**< Hold2 */ #define MIDI_CTL_SC1_SOUND_VARIATION 0x46 /**< SC1 Sound Variation */ #define MIDI_CTL_SC2_TIMBRE 0x47 /**< SC2 Timbre */ @@ -103,11 +78,11 @@ #define MIDI_CTL_SC8 0x4D /**< SC8 */ #define MIDI_CTL_SC9 0x4E /**< SC9 */ #define MIDI_CTL_SC10 0x4F /**< SC10 */ -#define MIDI_CTL_GENERAL_PURPOSE5 0x50 /**< General purpose 5 */ -#define MIDI_CTL_GENERAL_PURPOSE6 0x51 /**< General purpose 6 */ -#define MIDI_CTL_GENERAL_PURPOSE7 0x52 /**< General purpose 7 */ -#define MIDI_CTL_GENERAL_PURPOSE8 0x53 /**< General purpose 8 */ -#define MIDI_CTL_PORTAMENTO_CONTROL 0x54 /**< Portamento control */ +#define MIDI_CTL_GENERAL_PURPOSE5 0x50 /**< General Purpose 5 */ +#define MIDI_CTL_GENERAL_PURPOSE6 0x51 /**< General Purpose 6 */ +#define MIDI_CTL_GENERAL_PURPOSE7 0x52 /**< General Purpose 7 */ +#define MIDI_CTL_GENERAL_PURPOSE8 0x53 /**< General Purpose 8 */ +#define MIDI_CTL_PORTAMENTO_CONTROL 0x54 /**< Portamento Control */ #define MIDI_CTL_E1_REVERB_DEPTH 0x5B /**< E1 Reverb Depth */ #define MIDI_CTL_E2_TREMOLO_DEPTH 0x5C /**< E2 Tremolo Depth */ #define MIDI_CTL_E3_CHORUS_DEPTH 0x5D /**< E3 Chorus Depth */ @@ -115,18 +90,41 @@ #define MIDI_CTL_E5_PHASER_DEPTH 0x5F /**< E5 Phaser Depth */ #define MIDI_CTL_DATA_INCREMENT 0x60 /**< Data Increment */ #define MIDI_CTL_DATA_DECREMENT 0x61 /**< Data Decrement */ -#define MIDI_CTL_NONREG_PARM_NUM_LSB 0x62 /**< Non-registered parameter number */ -#define MIDI_CTL_NONREG_PARM_NUM_MSB 0x63 /**< Non-registered parameter number */ -#define MIDI_CTL_REGIST_PARM_NUM_LSB 0x64 /**< Registered parameter number */ -#define MIDI_CTL_REGIST_PARM_NUM_MSB 0x65 /**< Registered parameter number */ -#define MIDI_CTL_ALL_SOUNDS_OFF 0x78 /**< All sounds off */ +#define MIDI_CTL_NONREG_PARM_NUM_LSB 0x62 /**< Non-registered Parameter Number */ +#define MIDI_CTL_NONREG_PARM_NUM_MSB 0x63 /**< Non-registered Parameter Number */ +#define MIDI_CTL_REGIST_PARM_NUM_LSB 0x64 /**< Registered Parameter Number */ +#define MIDI_CTL_REGIST_PARM_NUM_MSB 0x65 /**< Registered Parameter Number */ +#define MIDI_CTL_ALL_SOUNDS_OFF 0x78 /**< All Sounds Off */ #define MIDI_CTL_RESET_CONTROLLERS 0x79 /**< Reset Controllers */ -#define MIDI_CTL_LOCAL_CONTROL_SWITCH 0x7A /**< Local control switch */ -#define MIDI_CTL_ALL_NOTES_OFF 0x7B /**< All notes off */ -#define MIDI_CTL_OMNI_OFF 0x7C /**< Omni off */ -#define MIDI_CTL_OMNI_ON 0x7D /**< Omni on */ +#define MIDI_CTL_LOCAL_CONTROL_SWITCH 0x7A /**< Local Control Switch */ +#define MIDI_CTL_ALL_NOTES_OFF 0x7B /**< All Notes Off */ +#define MIDI_CTL_OMNI_OFF 0x7C /**< Omni Off */ +#define MIDI_CTL_OMNI_ON 0x7D /**< Omni On */ #define MIDI_CTL_MONO1 0x7E /**< Mono1 */ #define MIDI_CTL_MONO2 0x7F /**< Mono2 */ + +// Commands +#define MIDI_CMD_NOTE_OFF 0x80 /**< Note Off */ +#define MIDI_CMD_NOTE_ON 0x90 /**< Note On */ +#define MIDI_CMD_NOTE_PRESSURE 0xA0 /**< Key Pressure */ +#define MIDI_CMD_CONTROL 0xB0 /**< Control Change */ +#define MIDI_CMD_PGM_CHANGE 0xC0 /**< Program Change */ +#define MIDI_CMD_CHANNEL_PRESSURE 0xD0 /**< Channel Pressure */ +#define MIDI_CMD_BENDER 0xE0 /**< Pitch Bender */ +#define MIDI_CMD_COMMON_SYSEX 0xF0 /**< Sysex (System Exclusive) Begin */ +#define MIDI_CMD_COMMON_MTC_QUARTER 0xF1 /**< MTC Quarter Frame */ +#define MIDI_CMD_COMMON_SONG_POS 0xF2 /**< Song Position */ +#define MIDI_CMD_COMMON_SONG_SELECT 0xF3 /**< Song Select */ +#define MIDI_CMD_COMMON_TUNE_REQUEST 0xF6 /**< Tune Request */ +#define MIDI_CMD_COMMON_SYSEX_END 0xF7 /**< End of Sysex */ +#define MIDI_CMD_COMMON_CLOCK 0xF8 /**< Clock */ +#define MIDI_CMD_COMMON_TICK 0xF9 /**< Tick */ +#define MIDI_CMD_COMMON_START 0xFA /**< Start */ +#define MIDI_CMD_COMMON_CONTINUE 0xFB /**< Continue */ +#define MIDI_CMD_COMMON_STOP 0xFC /**< Stop */ +#define MIDI_CMD_COMMON_SENSING 0xFE /**< Active Sensing */ +#define MIDI_CMD_COMMON_RESET 0xFF /**< Reset */ + //@} diff --git a/raul/midi_names.h b/raul/midi_names.h new file mode 100644 index 0000000..9b5eff6 --- /dev/null +++ b/raul/midi_names.h @@ -0,0 +1,233 @@ +/* Names of standard MIDI events and controllers. + * Copyright (C) 2007 Dave Robillard + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef RAUL_MIDINAMES_H +#define RAUL_MIDINAMES_H + +#include "midi_events.h" + +namespace Raul { + +/** \group midi + */ + +static const uint8_t X_MIDI_CMD_NOTE_OFF = 0x80; + +/** Pass this a symbol defined in midi_events.h (e.g. MIDI_CTL_PAN) to get the + * short name of a MIDI event/controller according to General MIDI. + */ +static const char* midi_name(uint8_t status) +{ + switch (status) { + + case MIDI_CMD_NOTE_OFF: + return "Note Off"; break; + case MIDI_CMD_NOTE_ON: + return "Note On"; break; + case MIDI_CMD_NOTE_PRESSURE: + return "Key Pressure"; break; + case MIDI_CMD_CONTROL: + return "Control Change"; break; + case MIDI_CMD_PGM_CHANGE: + return "Program Change"; break; + case MIDI_CMD_CHANNEL_PRESSURE: + return "Channel Pressure"; break; + case MIDI_CMD_BENDER: + return "Pitch Bender"; break; + + case MIDI_CMD_COMMON_SYSEX: + return "Sysex (System Exclusive) Begin"; break; + case MIDI_CMD_COMMON_MTC_QUARTER: + return "MTC Quarter Frame"; break; + case MIDI_CMD_COMMON_SONG_POS: + return "Song Position"; break; + case MIDI_CMD_COMMON_SONG_SELECT: + return "Song Select"; break; + case MIDI_CMD_COMMON_TUNE_REQUEST: + return "Tune Request"; break; + case MIDI_CMD_COMMON_SYSEX_END: + return "End of Sysex"; break; + case MIDI_CMD_COMMON_CLOCK: + return "Clock"; break; + case MIDI_CMD_COMMON_TICK: + return "Tick"; break; + case MIDI_CMD_COMMON_START: + return "Start"; break; + case MIDI_CMD_COMMON_CONTINUE: + return "Continue"; break; + case MIDI_CMD_COMMON_STOP: + return "Stop"; break; + case MIDI_CMD_COMMON_SENSING: + return "Active Sensing"; break; + case MIDI_CMD_COMMON_RESET: + return "Reset"; break; + + case MIDI_CTL_MSB_BANK: + return "Bank Selection"; break; + case MIDI_CTL_MSB_MODWHEEL: + return "Modulation"; break; + case MIDI_CTL_MSB_BREATH: + return "Breath"; break; + case MIDI_CTL_MSB_FOOT: + return "Foot"; break; + case MIDI_CTL_MSB_PORTAMENTO_TIME: + return "Portamento Time"; break; + case MIDI_CTL_MSB_DATA_ENTRY: + return "Data Entry"; break; + case MIDI_CTL_MSB_MAIN_VOLUME: + return "Main Volume"; break; + case MIDI_CTL_MSB_BALANCE: + return "Balance"; break; + case MIDI_CTL_MSB_PAN: + return "Panpot"; break; + case MIDI_CTL_MSB_EXPRESSION: + return "Expression"; break; + case MIDI_CTL_MSB_EFFECT1: + return "Effect1"; break; + case MIDI_CTL_MSB_EFFECT2: + return "Effect2"; break; + case MIDI_CTL_MSB_GENERAL_PURPOSE1: + return "General Purpose 1"; break; + case MIDI_CTL_MSB_GENERAL_PURPOSE2: + return "General Purpose 2"; break; + case MIDI_CTL_MSB_GENERAL_PURPOSE3: + return "General Purpose 3"; break; + case MIDI_CTL_MSB_GENERAL_PURPOSE4: + return "General Purpose 4"; break; + case MIDI_CTL_LSB_BANK: + return "Bank Selection"; break; + case MIDI_CTL_LSB_MODWHEEL: + return "Modulation"; break; + case MIDI_CTL_LSB_BREATH: + return "Breath"; break; + case MIDI_CTL_LSB_FOOT: + return "Foot"; break; + case MIDI_CTL_LSB_PORTAMENTO_TIME: + return "Portamento Time"; break; + case MIDI_CTL_LSB_DATA_ENTRY: + return "Data Entry"; break; + case MIDI_CTL_LSB_MAIN_VOLUME: + return "Main Volume"; break; + case MIDI_CTL_LSB_BALANCE: + return "Balance"; break; + case MIDI_CTL_LSB_PAN: + return "Panpot"; break; + case MIDI_CTL_LSB_EXPRESSION: + return "Expression"; break; + case MIDI_CTL_LSB_EFFECT1: + return "Effect1"; break; + case MIDI_CTL_LSB_EFFECT2: + return "Effect2"; break; + case MIDI_CTL_LSB_GENERAL_PURPOSE1: + return "General Purpose 1"; break; + case MIDI_CTL_LSB_GENERAL_PURPOSE2: + return "General Purpose 2"; break; + case MIDI_CTL_LSB_GENERAL_PURPOSE3: + return "General Purpose 3"; break; + case MIDI_CTL_LSB_GENERAL_PURPOSE4: + return "General Purpose 4"; break; + case MIDI_CTL_SUSTAIN: + return "Sustain Pedal"; break; + case MIDI_CTL_PORTAMENTO: + return "Portamento"; break; + case MIDI_CTL_SOSTENUTO: + return "Sostenuto"; break; + case MIDI_CTL_SOFT_PEDAL: + return "Soft Pedal"; break; + case MIDI_CTL_LEGATO_FOOTSWITCH: + return "Legato Foot Switch"; break; + case MIDI_CTL_HOLD2: + return "Hold2"; break; + case MIDI_CTL_SC1_SOUND_VARIATION: + return "SC1 Sound Variation"; break; + case MIDI_CTL_SC2_TIMBRE: + return "SC2 Timbre"; break; + case MIDI_CTL_SC3_RELEASE_TIME: + return "SC3 Release Time"; break; + case MIDI_CTL_SC4_ATTACK_TIME: + return "SC4 Attack Time"; break; + case MIDI_CTL_SC5_BRIGHTNESS: + return "SC5 Brightness"; break; + case MIDI_CTL_SC6: + return "SC6"; break; + case MIDI_CTL_SC7: + return "SC7"; break; + case MIDI_CTL_SC8: + return "SC8"; break; + case MIDI_CTL_SC9: + return "SC9"; break; + case MIDI_CTL_SC10: + return "SC10"; break; + case MIDI_CTL_GENERAL_PURPOSE5: + return "General Purpose 5"; break; + case MIDI_CTL_GENERAL_PURPOSE6: + return "General Purpose 6"; break; + case MIDI_CTL_GENERAL_PURPOSE7: + return "General Purpose 7"; break; + case MIDI_CTL_GENERAL_PURPOSE8: + return "General Purpose 8"; break; + case MIDI_CTL_PORTAMENTO_CONTROL: + return "Portamento Control"; break; + case MIDI_CTL_E1_REVERB_DEPTH: + return "E1 Reverb Depth"; break; + case MIDI_CTL_E2_TREMOLO_DEPTH: + return "E2 Tremolo Depth"; break; + case MIDI_CTL_E3_CHORUS_DEPTH: + return "E3 Chorus Depth"; break; + case MIDI_CTL_E4_DETUNE_DEPTH: + return "E4 Detune Depth"; break; + case MIDI_CTL_E5_PHASER_DEPTH: + return "E5 Phaser Depth"; break; + case MIDI_CTL_DATA_INCREMENT: + return "Data Increment"; break; + case MIDI_CTL_DATA_DECREMENT: + return "Data Decrement"; break; + case MIDI_CTL_NONREG_PARM_NUM_LSB: + return "Non-registered Parameter Number"; break; + case MIDI_CTL_NONREG_PARM_NUM_MSB: + return "Non-registered Narameter Number"; break; + case MIDI_CTL_REGIST_PARM_NUM_LSB: + return "Registered Parameter Number"; break; + case MIDI_CTL_REGIST_PARM_NUM_MSB: + return "Registered Parameter Number"; break; + case MIDI_CTL_ALL_SOUNDS_OFF: + return "All Sounds Off"; break; + case MIDI_CTL_RESET_CONTROLLERS: + return "Reset Controllers"; break; + case MIDI_CTL_LOCAL_CONTROL_SWITCH: + return "Local Control Switch"; break; + case MIDI_CTL_ALL_NOTES_OFF: + return "All Notes Off"; break; + case MIDI_CTL_OMNI_OFF: + return "Omni Off"; break; + case MIDI_CTL_OMNI_ON: + return "Omni On"; break; + case MIDI_CTL_MONO1: + return "Mono 1"; break; + case MIDI_CTL_MONO2: + return "Mono 2"; break; + default: + return "Unnamed"; break; + } +} + + +} // namespace Raul + +#endif /* RAUL_MIDINAMES_H */ diff --git a/tests/midi_ringbuffer_test.cpp b/tests/midi_ringbuffer_test.cpp index bb20ea7..bb9f079 100644 --- a/tests/midi_ringbuffer_test.cpp +++ b/tests/midi_ringbuffer_test.cpp @@ -1,5 +1,6 @@ #include #include "raul/MIDIRingBuffer.h" +#include "raul/midi_names.h" using namespace std; using namespace Raul; -- cgit v1.2.1