#include "stdafx.h"
#include "MIDIEvents.h"
OPENMPT_NAMESPACE_BEGIN
namespace MIDIEvents
{
uint32 Event(EventType eventType, uint8 midiChannel, uint8 dataByte1, uint8 dataByte2)
{
return (eventType << 4) | (midiChannel & 0x0F) | (dataByte1 << 8) | (dataByte2 << 16);
}
uint32 CC(MidiCC midiCC, uint8 midiChannel, uint8 param)
{
return Event(evControllerChange, midiChannel, static_cast<uint8>(midiCC), param);
}
uint32 PitchBend(uint8 midiChannel, uint16 bendAmount)
{
return Event(evPitchBend, midiChannel, static_cast<uint8>(bendAmount & 0x7F), static_cast<uint8>(bendAmount >> 7));
}
uint32 ProgramChange(uint8 midiChannel, uint8 program)
{
return Event(evProgramChange, midiChannel, program, 0);
}
uint32 NoteOff(uint8 midiChannel, uint8 note, uint8 velocity)
{
return Event(evNoteOff, midiChannel, note, velocity);
}
uint32 NoteOn(uint8 midiChannel, uint8 note, uint8 velocity)
{
return Event(evNoteOn, midiChannel, note, velocity);
}
uint8 System(SystemEvent eventType)
{
return static_cast<uint8>((evSystem << 4) | eventType);
}
uint8 GetChannelFromEvent(uint32 midiMsg)
{
return static_cast<uint8>((midiMsg & 0xF));
}
EventType GetTypeFromEvent(uint32 midiMsg)
{
return static_cast<EventType>(((midiMsg >> 4) & 0xF));
}
uint8 GetDataByte1FromEvent(uint32 midiMsg)
{
return static_cast<uint8>(((midiMsg >> 8) & 0xFF));
}
uint8 GetDataByte2FromEvent(uint32 midiMsg)
{
return static_cast<uint8>(((midiMsg >> 16) & 0xFF));
}
uint8 GetEventLength(uint8 firstByte)
{
uint8 msgSize = 3;
switch(firstByte & 0xF0)
{
case 0xC0:
case 0xD0:
msgSize = 2;
break;
case 0xF0:
switch(firstByte)
{
case 0xF1:
case 0xF3:
msgSize = 2;
break;
case 0xF2:
msgSize = 3;
break;
default:
msgSize = 1;
break;
}
break;
}
return msgSize;
}
const char* const MidiCCNames[MIDICC_end + 1] =
{
"BankSelect [Coarse]", "ModulationWheel [Coarse]", "Breathcontroller [Coarse]", "", "FootPedal [Coarse]", "PortamentoTime [Coarse]", "DataEntry [Coarse]", "Volume [Coarse]", "Balance [Coarse]", "", "Panposition [Coarse]", "Expression [Coarse]", "EffectControl1 [Coarse]", "EffectControl2 [Coarse]", "", "", "GeneralPurposeSlider1", "GeneralPurposeSlider2", "GeneralPurposeSlider3", "GeneralPurposeSlider4", "", "", "", "", "", "", "", "", "", "", "", "", "BankSelect [Fine]", "ModulationWheel [Fine]", "Breathcontroller [Fine]", "", "FootPedal [Fine]", "PortamentoTime [Fine]", "DataEntry [Fine]", "Volume [Fine]", "Balance [Fine]", "", "Panposition [Fine]", "Expression [Fine]", "EffectControl1 [Fine]", "EffectControl2 [Fine]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "HoldPedal [OnOff]", "Portamento [OnOff]", "SustenutoPedal [OnOff]", "SoftPedal [OnOff]", "LegatoPedal [OnOff]", "Hold2Pedal [OnOff]", "SoundVariation", "SoundTimbre", "SoundReleaseTime", "SoundAttackTime", "SoundBrightness", "SoundControl6", "SoundControl7", "SoundControl8", "SoundControl9", "SoundControl10", "GeneralPurposeButton1 [OnOff]", "GeneralPurposeButton2 [OnOff]", "GeneralPurposeButton3 [OnOff]", "GeneralPurposeButton4 [OnOff]", "", "", "", "", "", "", "", "EffectsLevel", "TremoloLevel", "ChorusLevel", "CelesteLevel", "PhaserLevel", "DataButtonIncrement", "DataButtonDecrement", "NonRegisteredParameter [Fine]", "NonRegisteredParameter [Coarse]", "RegisteredParameter [Fine]", "RegisteredParameter [Coarse]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AllSoundOff", "AllControllersOff", "LocalKeyboard [OnOff]", "AllNotesOff", "OmniModeOff", "OmniModeOn", "MonoOperation", "PolyOperation", };
}
OPENMPT_NAMESPACE_END