浏览代码

sequence limited to 8 beats working

Fabian Peter Hammerle 10 年之前
父节点
当前提交
a83246085f
共有 3 个文件被更改,包括 39 次插入12 次删除
  1. 34 7
      PlaybackScreen.cpp
  2. 4 4
      Sequencer.cpp
  3. 1 1
      midi

+ 34 - 7
PlaybackScreen.cpp

@@ -26,10 +26,6 @@ void PlaybackScreen::beforeBeat(Player::BeatIndex beat)
 
 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)
@@ -51,6 +47,26 @@ void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
             }
         }
     } 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);
@@ -79,10 +95,21 @@ void PlaybackScreen::refresh(unsigned char x, unsigned char y)
             }
         }
     } else {
-        if(sequencer.player.getNextBeat() == x) {
-            setColor(x, y, colors::activeMessage);
+        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::inactiveMessage);
+            setColor(x, y, colors::dark);
         }
     }
 }

+ 4 - 4
Sequencer.cpp

@@ -15,14 +15,14 @@ void Sequencer::run()
 
     midiOut.openVirtualPort("launchpad sequencer");
 
-    messages.resize(5);
+    messages.resize(7);
     for(int i=0; i<messages.size(); i++) {
-        messages[i] = std::make_shared<midi::NoteOnMessage>(defaultOutputChannel, 20 + i * 12, 100 + i);
+        messages[i] = std::make_shared<midi::NoteOnMessage>(defaultOutputChannel, 36 + i, 100 + i);
     }
 
-    playbackScreen.enable(); 
+    playbackScreen.enable();
 
-    player.setBpm(600);
+    player.setBpm(320);
 
     std::cin.ignore();
 }

+ 1 - 1
midi

@@ -1 +1 @@
-Subproject commit 79ecc896dae3292ed596f18681c43bcd34c73041
+Subproject commit 8b46a7690197d1dc7fd403c245aa439cbf203fb4