Fabian Peter Hammerle před 10 roky
rodič
revize
506c2172a8
7 změnil soubory, kde provedl 62 přidání a 12 odebrání
  1. 27 2
      PlaybackScreen.cpp
  2. 4 0
      PlaybackScreen.h
  3. 17 7
      Player.cpp
  4. 6 0
      Player.h
  5. 3 1
      Sequencer.cpp
  6. 2 2
      Sequencer.h
  7. 3 0
      colors.h

+ 27 - 2
PlaybackScreen.cpp

@@ -10,22 +10,47 @@ PlaybackScreen::PlaybackScreen(Sequencer& seq)
     setColorAll(midi::LaunchpadColor(0, 0));
 }
 
+void PlaybackScreen::beforeBeat(Player::BeatIndex beat)
+{
+    std::cout << "before beat #" << beat << std::endl;
+    setColor(beat, 0, colors::activeMessage);
+    setColor((beat - 1) % 8, 0, colors::dark);
+}
+
+void PlaybackScreen::afterBeat(Player::BeatIndex beat)
+{
+    std::cout << "after beat #" << beat << std::endl;
+}
+
 void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
 {
     std::cout << "clicked x=" << (int)x << ", y=" << (int)y << std::endl;
 
-    if(x == 8) {
+    if(x == 8) { // very right
         setColor(x, y, colors::activeMessage);
         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();
+                setColor(x, y, colors::inactiveOption);
+            } else {
+                sequencer.player.loop();
+                setColor(x, y, colors::activeOption);
+            }
+        }
+    } else {
     }
 }
 
 void PlaybackScreen::keyReleased(unsigned char x, unsigned char y)
 {
-    if(x == 8) {
+    if(x == 8) { // very right
         setColor(x, y, colors::inactiveMessage);
+    } else if(y == 8) { // very top
+    } else {
     }
 }
 

+ 4 - 0
PlaybackScreen.h

@@ -1,5 +1,6 @@
 #pragma once
 #include "Sequencer.h"
+#include "Player.h"
 #include "midi/LaunchpadScreen.h"
 
 class Sequencer;
@@ -11,6 +12,9 @@ public:
 
     PlaybackScreen(Sequencer& seq);
 
+    void beforeBeat(Player::BeatIndex beat);
+    void afterBeat(Player::BeatIndex beat);
+
 protected:
 	virtual void keyPressed(unsigned char x, unsigned char y);
 	virtual void keyReleased(unsigned char x, unsigned char y);

+ 17 - 7
Player.cpp

@@ -1,8 +1,18 @@
-// #include "Sequencer.h"
-// #include "Player.h"
-// 
-// Player::Player(midi::Output* out, const midi::BeatSequence* sequence, Sequencer& seq)
-//     : midi::BeatSequencePlayer(out, sequence), sequencer(seq)
-// {
-// }
+#include "Sequencer.h"
+#include "Player.h"
+
+Player::Player(midi::Output* out, const midi::BeatSequence* sequence, Sequencer& seq)
+    : midi::BeatSequencePlayer(out, sequence), sequencer(seq)
+{
+}
+
+void Player::beforeBeat(BeatIndex beat)
+{
+    sequencer.playbackScreen.beforeBeat(beat); 
+}
+
+void Player::afterBeat(BeatIndex beat)
+{
+    sequencer.playbackScreen.afterBeat(beat); 
+}
 

+ 6 - 0
Player.h

@@ -2,11 +2,17 @@
 #include "Sequencer.h"
 #include "midi/BeatSequencePlayer.h"
 
+class Sequencer;
+
 class Player : public midi::BeatSequencePlayer
 {
 public:
     Sequencer& sequencer;
 
     Player(midi::Output* out, const midi::BeatSequence* sequence, Sequencer& sequencer);
+
+protected:
+    virtual void beforeBeat(BeatIndex beat);
+    virtual void afterBeat(BeatIndex beat);
 };
 

+ 3 - 1
Sequencer.cpp

@@ -3,7 +3,7 @@
 
 Sequencer::Sequencer()
     : launchpad(), playbackScreen(*this), messages(midi::Launchpad::height - 1),
-      defaultOutputChannel(9)//, player(/*&midiOut, &beats*/0, 0, *this)
+      defaultOutputChannel(9), player(&midiOut, &beats, *this)
 {
     playbackScreen.setLaunchpad(launchpad);
     beats.resize(midi::Launchpad::width - 1);
@@ -21,5 +21,7 @@ void Sequencer::run()
 
     playbackScreen.enable(); 
 
+    player.setBpm(600);
+
     std::cin.ignore();
 }

+ 2 - 2
Sequencer.h

@@ -5,7 +5,7 @@
 #include "midi/Message.h"
 #include "midi/BeatSequence.h"
 #include "PlaybackScreen.h"
-// #include "Player.h"
+#include "Player.h"
 
 class Sequencer
 {
@@ -16,7 +16,7 @@ public:
     unsigned char defaultOutputChannel;
     midi::Output midiOut;
     midi::BeatSequence beats;
-    //Player player;
+    Player player;
 
     Sequencer();
     void run();

+ 3 - 0
colors.h

@@ -6,7 +6,10 @@ namespace colors
 
 typedef const midi::LaunchpadColor Color;
 
+Color dark(0, 0);
 Color inactiveMessage(1, 2);
 Color activeMessage(3, 2);
+Color activeOption(3, 3);
+Color inactiveOption(1, 2);
 
 }; // color