示例#1
0
文件: midi_in.cpp 项目: EQ4/linthesia
MidiEventList MidiIn::readAllNotes() {
    MidiEventList allNotes;
    //TODO: should be possible to transform it into
    // a do while
    MidiEvent event = read();
    while(
        event.get_type() == MidiEventType_NoteOff ||
        event.get_type() == MidiEventType_NoteOn
    ) {
        allNotes.push_back(event);
        event = read();
    }
    return allNotes;
}
示例#2
0
MidiEventList MidiTrack::Update(microseconds_t delta_microseconds)
{
   m_running_microseconds += delta_microseconds;

   MidiEventList evs;
   for (size_t i = m_last_event + 1; i < m_events.size(); ++i)
   {
      if (m_event_usecs[i] <= m_running_microseconds)
      {
         evs.push_back(m_events[i]);
         m_last_event = static_cast<long>(i);

         if (m_events[i].Type() == MidiEventType_NoteOn &&
            m_events[i].NoteVelocity() > 0) m_notes_remaining--;
      }
      else break;
   }

   return evs;
}