#pragma once #include "sender.h" #include #include #include #include #include #include namespace midi_router { enum class Message_Type { NOTE_OFF = 0x8u, NOTE_ON = 0x9u, POLY_AT = 0xAu, CONTROL_CHANGE = 0xBu, PROGRAM_CHANGE = 0xCu, CHANNEL_AT = 0xDu, PITCH_WHEEL = 0xEu, CLOCK = 0xF8u, MEAS_END = 0xF9u, START = 0xFAu, CONTINUE = 0xFBu, STOP = 0xFCu, }; using Device_Id = std::string; using Device_Map = std::map; using Target_List = std::vector>; using Route_Table = std::map>; struct Message { Device_Id const * source_id; std::vector bytes; Message_Type type() const { if ((bytes[0] & 0xF0) == 0xF0) return static_cast(bytes[0]); else return static_cast(bytes[0] >> 4); } }; static const std::map string2type = { {"note_off", Message_Type::NOTE_OFF}, {"note_on", Message_Type::NOTE_ON}, {"poly_at", Message_Type::POLY_AT}, {"control_change", Message_Type::CONTROL_CHANGE}, {"program_change", Message_Type::PROGRAM_CHANGE}, {"channel_at", Message_Type::CHANNEL_AT}, {"pitch_wheel", Message_Type::PITCH_WHEEL}, {"clock", Message_Type::CLOCK}, {"meas_end", Message_Type::MEAS_END}, {"start", Message_Type::START}, {"continue", Message_Type::CONTINUE}, {"stop", Message_Type::STOP}, }; static const std::map type2string = { {Message_Type::NOTE_OFF, "note_off"}, {Message_Type::NOTE_ON, "note_on"}, {Message_Type::POLY_AT, "poly_at"}, {Message_Type::CONTROL_CHANGE, "control_change"}, {Message_Type::PROGRAM_CHANGE, "program_change"}, {Message_Type::CHANNEL_AT, "channel_at"}, {Message_Type::PITCH_WHEEL, "pitch_wheel"}, {Message_Type::CLOCK, "clock"}, {Message_Type::MEAS_END, "meas_end"}, {Message_Type::START, "start"}, {Message_Type::CONTINUE, "continue"}, {Message_Type::STOP, "stop"} }; } // namespace midi_router