123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "Sequencer.h"
- #include "PlaybackScreen.h"
- #include "colors.h"
- #include <iostream>
- 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)
- {
- }
- 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<midi::Message> 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 {
- 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);
- }
- 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 {
- 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::dark);
- }
- }
- }
- 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);
- }
- }
- }
- }
|