LMMS
Loading...
Searching...
No Matches
lv2_midi.h
Go to the documentation of this file.
1/*
2 Copyright 2012 David Robillard <http://drobilla.net>
3
4 Permission to use, copy, modify, and/or distribute this software for any
5 purpose with or without fee is hereby granted, provided that the above
6 copyright notice and this permission notice appear in all copies.
7
8 THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*/
16
21
22#ifndef LV2_MIDI_H
23#define LV2_MIDI_H
24
25#include <stdint.h>
26
27#ifdef __cplusplus
28extern "C" {
29#else
30# include <stdbool.h>
31#endif
32
33#define LV2_MIDI_URI "http://lv2plug.in/ns/ext/midi"
34#define LV2_MIDI_PREFIX LV2_MIDI_URI "#"
35
36#define LV2_MIDI__ActiveSense LV2_MIDI_PREFIX "ActiveSense"
37#define LV2_MIDI__Aftertouch LV2_MIDI_PREFIX "Aftertouch"
38#define LV2_MIDI__Bender LV2_MIDI_PREFIX "Bender"
39#define LV2_MIDI__ChannelPressure LV2_MIDI_PREFIX "ChannelPressure"
40#define LV2_MIDI__Chunk LV2_MIDI_PREFIX "Chunk"
41#define LV2_MIDI__Clock LV2_MIDI_PREFIX "Clock"
42#define LV2_MIDI__Continue LV2_MIDI_PREFIX "Continue"
43#define LV2_MIDI__Controller LV2_MIDI_PREFIX "Controller"
44#define LV2_MIDI__MidiEvent LV2_MIDI_PREFIX "MidiEvent"
45#define LV2_MIDI__NoteOff LV2_MIDI_PREFIX "NoteOff"
46#define LV2_MIDI__NoteOn LV2_MIDI_PREFIX "NoteOn"
47#define LV2_MIDI__ProgramChange LV2_MIDI_PREFIX "ProgramChange"
48#define LV2_MIDI__QuarterFrame LV2_MIDI_PREFIX "QuarterFrame"
49#define LV2_MIDI__Reset LV2_MIDI_PREFIX "Reset"
50#define LV2_MIDI__SongPosition LV2_MIDI_PREFIX "SongPosition"
51#define LV2_MIDI__SongSelect LV2_MIDI_PREFIX "SongSelect"
52#define LV2_MIDI__Start LV2_MIDI_PREFIX "Start"
53#define LV2_MIDI__Stop LV2_MIDI_PREFIX "Stop"
54#define LV2_MIDI__SystemCommon LV2_MIDI_PREFIX "SystemCommon"
55#define LV2_MIDI__SystemExclusive LV2_MIDI_PREFIX "SystemExclusive"
56#define LV2_MIDI__SystemMessage LV2_MIDI_PREFIX "SystemMessage"
57#define LV2_MIDI__SystemRealtime LV2_MIDI_PREFIX "SystemRealtime"
58#define LV2_MIDI__Tick LV2_MIDI_PREFIX "Tick"
59#define LV2_MIDI__TuneRequest LV2_MIDI_PREFIX "TuneRequest"
60#define LV2_MIDI__VoiceMessage LV2_MIDI_PREFIX "VoiceMessage"
61#define LV2_MIDI__benderValue LV2_MIDI_PREFIX "benderValue"
62#define LV2_MIDI__binding LV2_MIDI_PREFIX "binding"
63#define LV2_MIDI__byteNumber LV2_MIDI_PREFIX "byteNumber"
64#define LV2_MIDI__channel LV2_MIDI_PREFIX "channel"
65#define LV2_MIDI__chunk LV2_MIDI_PREFIX "chunk"
66#define LV2_MIDI__controllerNumber LV2_MIDI_PREFIX "controllerNumber"
67#define LV2_MIDI__controllerValue LV2_MIDI_PREFIX "controllerValue"
68#define LV2_MIDI__noteNumber LV2_MIDI_PREFIX "noteNumber"
69#define LV2_MIDI__pressure LV2_MIDI_PREFIX "pressure"
70#define LV2_MIDI__programNumber LV2_MIDI_PREFIX "programNumber"
71#define LV2_MIDI__property LV2_MIDI_PREFIX "property"
72#define LV2_MIDI__songNumber LV2_MIDI_PREFIX "songNumber"
73#define LV2_MIDI__songPosition LV2_MIDI_PREFIX "songPosition"
74#define LV2_MIDI__status LV2_MIDI_PREFIX "status"
75#define LV2_MIDI__statusMask LV2_MIDI_PREFIX "statusMask"
76#define LV2_MIDI__velocity LV2_MIDI_PREFIX "velocity"
77
107
111typedef enum {
185
189static inline bool
191 return msg[0] >= 0x80 && msg[0] < 0xF0;
192}
193
197static inline bool
199 switch (msg[0]) {
200 case 0xF4: case 0xF5: case 0xF7: case 0xF9: case 0xFD:
201 return false;
202 default:
203 return (msg[0] & 0xF0) == 0xF0;
204 }
205}
206
211static inline LV2_Midi_Message_Type
214 return (LV2_Midi_Message_Type)(msg[0] & 0xF0);
215 } else if (lv2_midi_is_system_message(msg)) {
216 return (LV2_Midi_Message_Type)msg[0];
217 } else {
219 }
220}
221
222#ifdef __cplusplus
223} /* extern "C" */
224#endif
225
226#endif /* LV2_MIDI_H */
LV2_Midi_Message_Type
Definition midi.h:90
LV2_Midi_Controller
Definition midi.h:115
@ LV2_MIDI_MSG_TUNE_REQUEST
Definition midi.h:103
@ LV2_MIDI_MSG_NOTE_PRESSURE
Definition midi.h:94
@ LV2_MIDI_MSG_CHANNEL_PRESSURE
Definition midi.h:97
@ LV2_MIDI_MSG_INVALID
Definition midi.h:91
@ LV2_MIDI_MSG_SONG_SELECT
Definition midi.h:102
@ LV2_MIDI_MSG_BENDER
Definition midi.h:98
@ LV2_MIDI_MSG_MTC_QUARTER
Definition midi.h:100
@ LV2_MIDI_MSG_CONTROLLER
Definition midi.h:95
@ LV2_MIDI_MSG_PGM_CHANGE
Definition midi.h:96
@ LV2_MIDI_MSG_RESET
Definition midi.h:109
@ LV2_MIDI_MSG_NOTE_ON
Definition midi.h:93
@ LV2_MIDI_MSG_CLOCK
Definition midi.h:104
@ LV2_MIDI_MSG_NOTE_OFF
Definition midi.h:92
@ LV2_MIDI_MSG_STOP
Definition midi.h:107
@ LV2_MIDI_MSG_START
Definition midi.h:105
@ LV2_MIDI_MSG_SONG_POS
Definition midi.h:101
@ LV2_MIDI_MSG_SYSTEM_EXCLUSIVE
Definition midi.h:99
@ LV2_MIDI_MSG_ACTIVE_SENSE
Definition midi.h:108
@ LV2_MIDI_MSG_CONTINUE
Definition midi.h:106
@ LV2_MIDI_CTL_LSB_GENERAL_PURPOSE3
Definition midi.h:146
@ LV2_MIDI_CTL_LSB_GENERAL_PURPOSE2
Definition midi.h:145
@ LV2_MIDI_CTL_MONO1
Definition midi.h:186
@ LV2_MIDI_CTL_GENERAL_PURPOSE8
Definition midi.h:167
@ LV2_MIDI_CTL_SC9
Definition midi.h:162
@ LV2_MIDI_CTL_E1_REVERB_DEPTH
Definition midi.h:169
@ LV2_MIDI_CTL_MSB_DATA_ENTRY
Definition midi.h:121
@ LV2_MIDI_CTL_SOSTENUTO
Definition midi.h:150
@ LV2_MIDI_CTL_LSB_BANK
Definition midi.h:132
@ LV2_MIDI_CTL_SUSTAIN
Definition midi.h:148
@ LV2_MIDI_CTL_MONO2
Definition midi.h:187
@ LV2_MIDI_CTL_MSB_PORTAMENTO_TIME
Definition midi.h:120
@ LV2_MIDI_CTL_LOCAL_CONTROL_SWITCH
Definition midi.h:182
@ LV2_MIDI_CTL_MSB_GENERAL_PURPOSE4
Definition midi.h:131
@ LV2_MIDI_CTL_LSB_MODWHEEL
Definition midi.h:133
@ LV2_MIDI_CTL_NRPN_LSB
Definition midi.h:176
@ LV2_MIDI_CTL_MSB_GENERAL_PURPOSE2
Definition midi.h:129
@ LV2_MIDI_CTL_E3_CHORUS_DEPTH
Definition midi.h:171
@ LV2_MIDI_CTL_LSB_BREATH
Definition midi.h:134
@ LV2_MIDI_CTL_SC10
Definition midi.h:163
@ LV2_MIDI_CTL_PORTAMENTO
Definition midi.h:149
@ LV2_MIDI_CTL_MSB_EFFECT1
Definition midi.h:126
@ LV2_MIDI_CTL_GENERAL_PURPOSE5
Definition midi.h:164
@ LV2_MIDI_CTL_E4_DETUNE_DEPTH
Definition midi.h:172
@ LV2_MIDI_CTL_LSB_EXPRESSION
Definition midi.h:141
@ LV2_MIDI_CTL_LSB_MAIN_VOLUME
Definition midi.h:138
@ LV2_MIDI_CTL_SC2_TIMBRE
Definition midi.h:155
@ LV2_MIDI_CTL_SOFT_PEDAL
Definition midi.h:151
@ LV2_MIDI_CTL_LSB_GENERAL_PURPOSE4
Definition midi.h:147
@ LV2_MIDI_CTL_RESET_CONTROLLERS
Definition midi.h:181
@ LV2_MIDI_CTL_MSB_MODWHEEL
Definition midi.h:117
@ LV2_MIDI_CTL_SC3_RELEASE_TIME
Definition midi.h:156
@ LV2_MIDI_CTL_LSB_GENERAL_PURPOSE1
Definition midi.h:144
@ LV2_MIDI_CTL_LSB_PORTAMENTO_TIME
Definition midi.h:136
@ LV2_MIDI_CTL_SC7
Definition midi.h:160
@ LV2_MIDI_CTL_MSB_BALANCE
Definition midi.h:123
@ LV2_MIDI_CTL_LSB_BALANCE
Definition midi.h:139
@ LV2_MIDI_CTL_SC8
Definition midi.h:161
@ LV2_MIDI_CTL_MSB_FOOT
Definition midi.h:119
@ LV2_MIDI_CTL_GENERAL_PURPOSE7
Definition midi.h:166
@ LV2_MIDI_CTL_GENERAL_PURPOSE6
Definition midi.h:165
@ LV2_MIDI_CTL_LSB_FOOT
Definition midi.h:135
@ LV2_MIDI_CTL_MSB_EXPRESSION
Definition midi.h:125
@ LV2_MIDI_CTL_RPN_MSB
Definition midi.h:179
@ LV2_MIDI_CTL_E5_PHASER_DEPTH
Definition midi.h:173
@ LV2_MIDI_CTL_DATA_INCREMENT
Definition midi.h:174
@ LV2_MIDI_CTL_MSB_GENERAL_PURPOSE1
Definition midi.h:128
@ LV2_MIDI_CTL_ALL_NOTES_OFF
Definition midi.h:183
@ LV2_MIDI_CTL_MSB_GENERAL_PURPOSE3
Definition midi.h:130
@ LV2_MIDI_CTL_OMNI_ON
Definition midi.h:185
@ LV2_MIDI_CTL_SC6
Definition midi.h:159
@ LV2_MIDI_CTL_OMNI_OFF
Definition midi.h:184
@ LV2_MIDI_CTL_SC1_SOUND_VARIATION
Definition midi.h:154
@ LV2_MIDI_CTL_LSB_EFFECT2
Definition midi.h:143
@ LV2_MIDI_CTL_LSB_DATA_ENTRY
Definition midi.h:137
@ LV2_MIDI_CTL_NRPN_MSB
Definition midi.h:177
@ LV2_MIDI_CTL_MSB_BANK
Definition midi.h:116
@ LV2_MIDI_CTL_MSB_BREATH
Definition midi.h:118
@ LV2_MIDI_CTL_LSB_PAN
Definition midi.h:140
@ LV2_MIDI_CTL_RPN_LSB
Definition midi.h:178
@ LV2_MIDI_CTL_E2_TREMOLO_DEPTH
Definition midi.h:170
@ LV2_MIDI_CTL_MSB_MAIN_VOLUME
Definition midi.h:122
@ LV2_MIDI_CTL_MSB_EFFECT2
Definition midi.h:127
@ LV2_MIDI_CTL_HOLD2
Definition midi.h:153
@ LV2_MIDI_CTL_DATA_DECREMENT
Definition midi.h:175
@ LV2_MIDI_CTL_SC5_BRIGHTNESS
Definition midi.h:158
@ LV2_MIDI_CTL_MSB_PAN
Definition midi.h:124
@ LV2_MIDI_CTL_ALL_SOUNDS_OFF
Definition midi.h:180
@ LV2_MIDI_CTL_LEGATO_FOOTSWITCH
Definition midi.h:152
@ LV2_MIDI_CTL_SC4_ATTACK_TIME
Definition midi.h:157
@ LV2_MIDI_CTL_LSB_EFFECT1
Definition midi.h:142
@ LV2_MIDI_CTL_PORTAMENTO_CONTROL
Definition midi.h:168
static bool lv2_midi_is_voice_message(const uint8_t *msg)
Definition lv2_midi.h:190
static bool lv2_midi_is_system_message(const uint8_t *msg)
Definition lv2_midi.h:198
static LV2_Midi_Message_Type lv2_midi_message_type(const uint8_t *msg)
Definition lv2_midi.h:212
unsigned char uint8_t
Definition mid.cpp:98
const char * msg
Definition missing_descriptor.c:20