|
@@ -26,10 +26,6 @@ void PlaybackScreen::beforeBeat(Player::BeatIndex beat)
|
|
|
|
|
|
void PlaybackScreen::afterBeat(Player::BeatIndex beat)
|
|
|
{
|
|
|
- std::cout << "after beat #" << beat << std::endl;
|
|
|
- for(unsigned char y = 0; y < midi::Launchpad::height; y++) {
|
|
|
- //refreshColor(beat, y);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
|
|
@@ -51,6 +47,26 @@ void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
+ Player::BeatIndex beatIndex = x;
|
|
|
+ if(beatIndex < sequencer.beats.size() && y < sequencer.messages.size()) {
|
|
|
+ midi::MessageList& beat = sequencer.beats[beatIndex];
|
|
|
+ std::cout << "before ";
|
|
|
+ beat.print(std::cout);
|
|
|
+
|
|
|
+ std::shared_ptr<midi::Message> msg_ptr = sequencer.messages[y];
|
|
|
+ msg_ptr->print(std::cout);
|
|
|
+ midi::MessageList::const_iterator beat_msg_it = beat.find(*msg_ptr);
|
|
|
+ if(beat_msg_it == beat.end()) {
|
|
|
+ // insert message at beat
|
|
|
+ beat.push_back(msg_ptr);
|
|
|
+ } else {
|
|
|
+ // remove message from beat
|
|
|
+ beat.erase(beat_msg_it);
|
|
|
+ }
|
|
|
+
|
|
|
+ std::cout << "after ";
|
|
|
+ beat.print(std::cout);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
refresh(x, y);
|
|
@@ -79,10 +95,21 @@ void PlaybackScreen::refresh(unsigned char x, unsigned char y)
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- if(sequencer.player.getNextBeat() == x) {
|
|
|
- setColor(x, y, colors::activeMessage);
|
|
|
+ Player::BeatIndex beatIndex = x;
|
|
|
+ if(beatIndex < sequencer.beats.size() && y < sequencer.messages.size()) {
|
|
|
+ midi::MessageList& beat = sequencer.beats[beatIndex];
|
|
|
+ std::shared_ptr<midi::Message> msg_ptr = sequencer.messages[y];
|
|
|
+ if(beat.contains(*msg_ptr)) {
|
|
|
+ if(sequencer.player.getNextBeat() == beatIndex) {
|
|
|
+ setColor(x, y, colors::activeMessage);
|
|
|
+ } else {
|
|
|
+ setColor(x, y, colors::inactiveMessage);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ setColor(x, y, colors::dark);
|
|
|
+ }
|
|
|
} else {
|
|
|
- setColor(x, y, colors::inactiveMessage);
|
|
|
+ setColor(x, y, colors::dark);
|
|
|
}
|
|
|
}
|
|
|
}
|