#include "Sequencer.h" #include "PlaybackScreen.h" #include "colors.h" #include PlaybackScreen::PlaybackScreen(Sequencer& seq) : sequencer(seq) { } void PlaybackScreen::enable() { refreshAll(); parent::enable(); } void PlaybackScreen::beforeBeat(Player::BeatIndex beat) { std::cout << "before beat #" << beat << std::endl; for(unsigned char y = 0; y < midi::Launchpad::height - 1; y++) { refresh(beat, y); refresh((beat - 1) % (midi::Launchpad::width - 1), y); } } 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) { std::cout << "clicked x=" << (int)x << ", y=" << (int)y << std::endl; if(x == 8) { // very right if(y < sequencer.messages.size()) { std::shared_ptr msg_ptr = sequencer.messages[y]; msg_ptr->print(std::cout); sequencer.midiOut.sendMessage(*msg_ptr); } } else if(y == 8) { // very top if(x == 0) { if(sequencer.player.isPlaying()) { sequencer.player.stop(); } else { sequencer.player.loop(); } } } else { } refresh(x, y); } void PlaybackScreen::keyReleased(unsigned char x, unsigned char y) { refresh(x, y); } void PlaybackScreen::refresh(unsigned char x, unsigned char y) { if(x == 8) { // very right if(y < sequencer.messages.size()) { setColor(x, y, getKeyPressed(x, y) ? colors::activeOption : colors::inactiveOption); } else { setColor(x, y, colors::dark); } } else if(y == 8) { // very top if(x == 0) { // start / stop if(sequencer.player.isPlaying()) { setColor(x, y, colors::activeOption); } else { setColor(x, y, colors::inactiveOption); } } } else { if(sequencer.player.getNextBeat() == x) { setColor(x, y, colors::activeMessage); } else { setColor(x, y, colors::inactiveMessage); } } } void PlaybackScreen::refreshAll() { for(unsigned char x = 0; x < midi::Launchpad::width; x++) { for(unsigned char y = 0; y < midi::Launchpad::height; y++) { if(x != 8 || y != 8) { refresh(x, y); } } } }