diff options
author | Vitaly Novichkov <admin@wohlnet.ru> | 2018-06-23 08:28:38 +0300 |
---|---|---|
committer | Vitaly Novichkov <admin@wohlnet.ru> | 2018-06-23 08:28:38 +0300 |
commit | 128c07275d7e48675113f67e2cb945b53109cb7b (patch) | |
tree | dbc3a938bc0c684ec07e2cfe8664804ed364a76b /src/midi_sequencer_impl.hpp | |
parent | fbd0ecea7c7315b37338a4c7621f50df15b460b2 (diff) | |
download | libADLMIDI-128c07275d7e48675113f67e2cb945b53109cb7b.tar.gz libADLMIDI-128c07275d7e48675113f67e2cb945b53109cb7b.tar.bz2 libADLMIDI-128c07275d7e48675113f67e2cb945b53109cb7b.zip |
Small clean-up of the MIDI sequencer's code
Diffstat (limited to 'src/midi_sequencer_impl.hpp')
-rw-r--r-- | src/midi_sequencer_impl.hpp | 48 |
1 files changed, 16 insertions, 32 deletions
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index c699db5..501de8f 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -64,9 +64,9 @@ typedef int32_t ssize_t; static inline uint64_t readBEint(const void *buffer, size_t nbytes) { uint64_t result = 0; - const unsigned char *data = reinterpret_cast<const unsigned char *>(buffer); + const uint8_t *data = reinterpret_cast<const uint8_t *>(buffer); - for(unsigned n = 0; n < nbytes; ++n) + for(size_t n = 0; n < nbytes; ++n) result = (result << 8) + data[n]; return result; @@ -81,33 +81,15 @@ static inline uint64_t readBEint(const void *buffer, size_t nbytes) static inline uint64_t readLEint(const void *buffer, size_t nbytes) { uint64_t result = 0; - const unsigned char *data = reinterpret_cast<const unsigned char *>(buffer); + const uint8_t *data = reinterpret_cast<const uint8_t *>(buffer); - for(unsigned n = 0; n < nbytes; ++n) + for(size_t n = 0; n < nbytes; ++n) result = result + static_cast<uint64_t>(data[n] << (n * 8)); return result; } /** - * @brief Standard MIDI Variable-Length numeric value parser without of validation - * @param [_inout] ptr Pointer to memory block that contains begin of variable-length value - * @return Unsigned integer that conains parsed variable-length value - */ -static inline uint64_t readVarLen(uint8_t **ptr) -{ - uint64_t result = 0; - for(;;) - { - uint8_t byte = *((*ptr)++); - result = (result << 7) + (byte & 0x7F); - if(!(byte & 0x80)) - break; - } - return result; -} - -/** * @brief Secure Standard MIDI Variable-Length numeric value parser with anti-out-of-range protection * @param [_inout] ptr Pointer to memory block that contains begin of variable-length value, will be iterated forward * @param [_in end Pointer to end of memory block where variable-length value is stored (after end of track) @@ -1136,7 +1118,7 @@ BW_MidiSequencer::MidiEvent BW_MidiSequencer::parseEvent(const uint8_t **pptr, c return evt; } -void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent &evt, int32_t &status) +void BW_MidiSequencer::handleEvent(size_t track, const BW_MidiSequencer::MidiEvent &evt, int32_t &status) { if(m_interface->onEvent) { @@ -1147,7 +1129,7 @@ void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent if(evt.type == MidiEvent::T_SYSEX || evt.type == MidiEvent::T_SYSEX2) // Ignore SysEx { - //std::string data( length?(const char*) &TrackData[tk][CurrentPosition.track[tk].ptr]:0, length ); + //std::string data( length?(const char*) &TrackData[track][CurrentPosition.track[track].ptr]:0, length ); //UI.PrintLn("SysEx %02X: %u bytes", byte, length/*, data.c_str()*/); #if 0 std::fputs("SysEx:", stderr); @@ -1186,8 +1168,10 @@ void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent if(evtype == MidiEvent::ST_DEVICESWITCH) { + if(m_interface->onDebugMessage) + m_interface->onDebugMessage(m_interface->onDebugMessage_userData, "Switching another device: %s", data.c_str()); if(m_interface->rt_deviceSwitch) - m_interface->rt_deviceSwitch(m_interface->rtUserData, tk, data.c_str(), data.size()); + m_interface->rt_deviceSwitch(m_interface->rtUserData, track, data.c_str(), data.size()); return; } @@ -1197,13 +1181,13 @@ void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent //Turn on Loop handling when loop is enabled if(m_loopEnabled && !m_invalidLoop) { - if(evtype == MidiEvent::ST_LOOPSTART) // Special non-spec ADLMIDI special for IMF playback: Direct poke to AdLib + if(evtype == MidiEvent::ST_LOOPSTART) // Special non-spec MIDI loop Start point { m_loopStart = true; return; } - if(evtype == MidiEvent::ST_LOOPEND) // Special non-spec ADLMIDI special for IMF playback: Direct poke to AdLib + if(evtype == MidiEvent::ST_LOOPEND) // Special non-spec MIDI loop End point { m_loopEnd = true; return; @@ -1223,8 +1207,8 @@ void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent // Any normal event (80..EF) // if(evt.type < 0x80) // { - // byte = static_cast<uint8_t>(CurrentPosition.track[tk].status | 0x80); - // CurrentPosition.track[tk].ptr--; + // byte = static_cast<uint8_t>(CurrentPosition.track[track].status | 0x80); + // CurrentPosition.track[track].ptr--; // } if(evt.type == MidiEvent::T_SYSCOMSNGSEL || @@ -1232,11 +1216,11 @@ void BW_MidiSequencer::handleEvent(size_t tk, const BW_MidiSequencer::MidiEvent return; /*UI.PrintLn("@%X Track %u: %02X %02X", - CurrentPosition.track[tk].ptr-1, (unsigned)tk, byte, - TrackData[tk][CurrentPosition.track[tk].ptr]);*/ + CurrentPosition.track[track].ptr-1, (unsigned)track, byte, + TrackData[track][CurrentPosition.track[track].ptr]);*/ uint8_t midCh = evt.channel;//byte & 0x0F, EvType = byte >> 4; if(m_interface->rt_currentDevice) - midCh += (uint8_t)m_interface->rt_currentDevice(m_interface->rtUserData, tk); + midCh += (uint8_t)m_interface->rt_currentDevice(m_interface->rtUserData, track); status = evt.type; switch(evt.type) |