Flipper/Applications/Official/source-OLDER/xMasterX/usb_midi/midi/message.c

144 lines
3.7 KiB
C

#include "message.h"
/** Returns the data within the MidiEvent as a NoteOffEvent struct */
NoteOffEvent AsNoteOff(MidiEvent* event) {
NoteOffEvent m;
m.channel = event->channel;
m.note = event->data[0];
m.velocity = event->data[1];
return m;
}
/** Returns the data within the MidiEvent as a NoteOnEvent struct */
NoteOnEvent AsNoteOn(MidiEvent* event) {
NoteOnEvent m;
m.channel = event->channel;
m.note = event->data[0];
m.velocity = event->data[1];
return m;
}
/** Returns the data within the MidiEvent as a PolyphonicKeyPressureEvent struct */
PolyphonicKeyPressureEvent AsPolyphonicKeyPressure(MidiEvent* event) {
PolyphonicKeyPressureEvent m;
m.channel = event->channel;
m.note = event->data[0];
m.pressure = event->data[1];
return m;
}
/** Returns the data within the MidiEvent as a ControlChangeEvent struct.*/
ControlChangeEvent AsControlChange(MidiEvent* event) {
ControlChangeEvent m;
m.channel = event->channel;
m.control_number = event->data[0];
m.value = event->data[1];
return m;
}
/** Returns the data within the MidiEvent as a ProgramChangeEvent struct.*/
ProgramChangeEvent AsProgramChange(MidiEvent* event) {
ProgramChangeEvent m;
m.channel = event->channel;
m.program = event->data[0];
return m;
}
/** Returns the data within the MidiEvent as a ProgramChangeEvent struct.*/
ChannelPressureEvent AsChannelPressure(MidiEvent* event) {
ChannelPressureEvent m;
m.channel = event->channel;
m.pressure = event->data[0];
return m;
}
/** Returns the data within the MidiEvent as a PitchBendEvent struct.*/
PitchBendEvent AsPitchBend(MidiEvent* event) {
PitchBendEvent m;
m.channel = event->channel;
m.value = ((uint16_t)(event->data[1]) << 7) + (event->data[0] - 8192);
return m;
}
SystemExclusiveEvent AsSystemExclusive(MidiEvent* event) {
SystemExclusiveEvent m;
m.length = event->sysex_message_len;
for(int i = 0; i < SYSEX_BUFFER_LEN; i++) {
m.data[i] = 0;
if(i < m.length) {
m.data[i] = event->sysex_data[i];
}
}
return m;
}
MTCQuarterFrameEvent AsMTCQuarterFrame(MidiEvent* event) {
MTCQuarterFrameEvent m;
m.message_type = (event->data[0] & 0x70) >> 4;
m.value = (event->data[0]) & 0x0f;
return m;
}
SongPositionPointerEvent AsSongPositionPointer(MidiEvent* event) {
SongPositionPointerEvent m;
m.position = ((uint16_t)(event->data[1]) << 7) | (event->data[0]);
return m;
}
SongSelectEvent AsSongSelect(MidiEvent* event) {
SongSelectEvent m;
m.song = event->data[0];
return m;
}
AllSoundOffEvent AsAllSoundOff(MidiEvent* event) {
AllSoundOffEvent m;
m.channel = event->channel;
return m;
}
ResetAllControllersEvent AsResetAllControllers(MidiEvent* event) {
ResetAllControllersEvent m;
m.channel = event->channel;
m.value = event->data[1];
return m;
}
LocalControlEvent AsLocalControl(MidiEvent* event) {
LocalControlEvent m;
m.channel = event->channel;
m.local_control_off = (event->data[1] == 0);
m.local_control_on = (event->data[1] == 127);
return m;
}
AllNotesOffEvent AsAllNotesOff(MidiEvent* event) {
AllNotesOffEvent m;
m.channel = event->channel;
return m;
}
OmniModeOffEvent AsOmniModeOff(MidiEvent* event) {
OmniModeOffEvent m;
m.channel = event->channel;
return m;
}
OmniModeOnEvent AsOmniModeOn(MidiEvent* event) {
OmniModeOnEvent m;
m.channel = event->channel;
return m;
}
MonoModeOnEvent AsMonoModeOn(MidiEvent* event) {
MonoModeOnEvent m;
m.channel = event->channel;
m.num_channels = event->data[1];
return m;
}
PolyModeOnEvent AsPolyModeOn(MidiEvent* event) {
PolyModeOnEvent m;
m.channel = event->channel;
return m;
}