瀏覽代碼

x=8 keys send message

Fabian Peter Hammerle 10 年之前
父節點
當前提交
b524ed6be8
共有 7 個文件被更改,包括 110 次插入12 次删除
  1. 31 0
      PlaybackScreen.cpp
  2. 12 0
      PlaybackScreen.h
  3. 8 0
      Player.cpp
  4. 12 0
      Player.h
  5. 25 0
      Sequencer.cpp
  6. 10 12
      Sequencer.h
  7. 12 0
      colors.h

+ 31 - 0
PlaybackScreen.cpp

@@ -0,0 +1,31 @@
+#include "Sequencer.h"
+#include "PlaybackScreen.h"
+#include "colors.h"
+#include <iostream>
+
+
+PlaybackScreen::PlaybackScreen(Sequencer& seq)
+    : sequencer(seq)
+{
+    setColorAll(midi::LaunchpadColor(0, 0));
+}
+
+void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
+{
+    std::cout << "clicked x=" << (int)x << ", y=" << (int)y << std::endl;
+
+    if(x == 8) {
+        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);
+    }
+}
+
+void PlaybackScreen::keyReleased(unsigned char x, unsigned char y)
+{
+    if(x == 8) {
+        setColor(x, y, colors::inactiveMessage);
+    }
+}
+

+ 12 - 0
PlaybackScreen.h

@@ -1,6 +1,18 @@
 #pragma once
+#include "Sequencer.h"
 #include "midi/LaunchpadScreen.h"
 
+class Sequencer;
+
 class PlaybackScreen : public midi::LaunchpadScreen
 {
+public:
+    Sequencer& sequencer;
+
+    PlaybackScreen(Sequencer& seq);
+
+protected:
+	virtual void keyPressed(unsigned char x, unsigned char y);
+	virtual void keyReleased(unsigned char x, unsigned char y);
 };
+	

+ 8 - 0
Player.cpp

@@ -0,0 +1,8 @@
+// #include "Sequencer.h"
+// #include "Player.h"
+// 
+// Player::Player(midi::Output* out, const midi::BeatSequence* sequence, Sequencer& seq)
+//     : midi::BeatSequencePlayer(out, sequence), sequencer(seq)
+// {
+// }
+

+ 12 - 0
Player.h

@@ -0,0 +1,12 @@
+#pragma once
+#include "Sequencer.h"
+#include "midi/BeatSequencePlayer.h"
+
+class Player : public midi::BeatSequencePlayer
+{
+public:
+    Sequencer& sequencer;
+
+    Player(midi::Output* out, const midi::BeatSequence* sequence, Sequencer& sequencer);
+};
+

+ 25 - 0
Sequencer.cpp

@@ -0,0 +1,25 @@
+#include "Sequencer.h"
+#include <iostream>
+
+Sequencer::Sequencer()
+    : launchpad(), playbackScreen(*this), messages(midi::Launchpad::height - 1),
+      defaultOutputChannel(9)//, player(/*&midiOut, &beats*/0, 0, *this)
+{
+    playbackScreen.setLaunchpad(launchpad);
+    beats.resize(midi::Launchpad::width - 1);
+}
+
+void Sequencer::run()
+{
+    std::cout << __func__ << std::endl;
+
+    midiOut.openVirtualPort("launchpad sequencer");
+
+    for(int i=0; i<messages.size(); i++) {
+        messages[i] = std::make_shared<midi::NoteOnMessage>(defaultOutputChannel, 20 + i * 12, 100 + i);
+    }
+
+    playbackScreen.enable(); 
+
+    std::cin.ignore();
+}

+ 10 - 12
Sequencer.h

@@ -1,25 +1,23 @@
 #pragma once
 #include <vector>
-#include <iostream>
+#include <memory>
 #include "midi/Launchpad.h"
+#include "midi/Message.h"
+#include "midi/BeatSequence.h"
 #include "PlaybackScreen.h"
+// #include "Player.h"
 
 class Sequencer
 {
 public:
     midi::Launchpad launchpad;
+    PlaybackScreen playbackScreen;
+    std::vector<std::shared_ptr<midi::Message>> messages;
+    unsigned char defaultOutputChannel;
+    midi::Output midiOut;
+    midi::BeatSequence beats;
+    //Player player;
 
     Sequencer();
     void run();
 };
-
-Sequencer::Sequencer()
-    : launchpad()
-{
-}
-
-void Sequencer::run()
-{
-    std::cout << __func__ << std::endl;
-    std::cin.ignore();
-}

+ 12 - 0
colors.h

@@ -0,0 +1,12 @@
+#pragma once
+#include "midi/LaunchpadColor.h"
+
+namespace colors
+{
+
+typedef const midi::LaunchpadColor Color;
+
+Color inactiveMessage(1, 2);
+Color activeMessage(3, 2);
+
+}; // color