PlaybackScreen.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "Sequencer.h"
  2. #include "PlaybackScreen.h"
  3. #include "colors.h"
  4. #include <iostream>
  5. PlaybackScreen::PlaybackScreen(Sequencer& seq)
  6. : sequencer(seq)
  7. {
  8. }
  9. void PlaybackScreen::enable()
  10. {
  11. refreshAll();
  12. parent::enable();
  13. }
  14. void PlaybackScreen::beforeBeat(Player::BeatIndex beat)
  15. {
  16. std::cout << "before beat #" << beat << std::endl;
  17. for(unsigned char y = 0; y < midi::Launchpad::height - 1; y++) {
  18. refresh(beat, y);
  19. refresh((beat - 1) % (midi::Launchpad::width - 1), y);
  20. }
  21. }
  22. void PlaybackScreen::afterBeat(Player::BeatIndex beat)
  23. {
  24. std::cout << "after beat #" << beat << std::endl;
  25. for(unsigned char y = 0; y < midi::Launchpad::height; y++) {
  26. //refreshColor(beat, y);
  27. }
  28. }
  29. void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
  30. {
  31. std::cout << "clicked x=" << (int)x << ", y=" << (int)y << std::endl;
  32. if(x == 8) { // very right
  33. if(y < sequencer.messages.size()) {
  34. std::shared_ptr<midi::Message> msg_ptr = sequencer.messages[y];
  35. msg_ptr->print(std::cout);
  36. sequencer.midiOut.sendMessage(*msg_ptr);
  37. }
  38. } else if(y == 8) { // very top
  39. if(x == 0) {
  40. if(sequencer.player.isPlaying()) {
  41. sequencer.player.stop();
  42. } else {
  43. sequencer.player.loop();
  44. }
  45. }
  46. } else {
  47. }
  48. refresh(x, y);
  49. }
  50. void PlaybackScreen::keyReleased(unsigned char x, unsigned char y)
  51. {
  52. refresh(x, y);
  53. }
  54. void PlaybackScreen::refresh(unsigned char x, unsigned char y)
  55. {
  56. if(x == 8) { // very right
  57. if(y < sequencer.messages.size()) {
  58. setColor(x, y, getKeyPressed(x, y) ? colors::activeOption : colors::inactiveOption);
  59. } else {
  60. setColor(x, y, colors::dark);
  61. }
  62. } else if(y == 8) { // very top
  63. if(x == 0) {
  64. // start / stop
  65. if(sequencer.player.isPlaying()) {
  66. setColor(x, y, colors::activeOption);
  67. } else {
  68. setColor(x, y, colors::inactiveOption);
  69. }
  70. }
  71. } else {
  72. if(sequencer.player.getNextBeat() == x) {
  73. setColor(x, y, colors::activeMessage);
  74. } else {
  75. setColor(x, y, colors::inactiveMessage);
  76. }
  77. }
  78. }
  79. void PlaybackScreen::refreshAll()
  80. {
  81. for(unsigned char x = 0; x < midi::Launchpad::width; x++) {
  82. for(unsigned char y = 0; y < midi::Launchpad::height; y++) {
  83. if(x != 8 || y != 8) {
  84. refresh(x, y);
  85. }
  86. }
  87. }
  88. }