Forráskód Böngészése

sequence player: beat in loop

Fabian Peter Hammerle 10 éve
szülő
commit
1f3a481a66
2 módosított fájl, 35 hozzáadás és 3 törlés
  1. 30 1
      BeatSequencePlayer.cpp
  2. 5 2
      tests/beat-sequence-player.cpp

+ 30 - 1
BeatSequencePlayer.cpp

@@ -83,7 +83,36 @@ bool BeatSequencePlayer::isPlaying()
 
 void BeatSequencePlayer::beat(void* data)
 {
-    std::cout << "beat" << std::endl;
+    BeatSequencePlayer& player = *(BeatSequencePlayer*)data;
+
+    if(player.sequence) {
+        BeatIndex beat = player.getNextBeat();
+        if(beat >= player.sequence->size()) {
+            if(player.getLooping() && player.sequence->size() > 0) {
+                beat = 0;
+            } else {
+                player.clock.stop();
+            }
+        }
+        if(beat < player.sequence->size()) {
+
+            std::cout << "beat #" << beat << std::endl;
+
+            if(beat + 1 == player.sequence->size()) {
+                if(player.getLooping()) {
+                    player.setNextBeat(0);
+                } else {
+                    player.clock.stop();
+                }
+            } else {
+                player.setNextBeat(beat + 1);
+            }
+        }
+    } else {
+        if(!player.getLooping()) {
+            player.clock.stop();
+        }
+    }
 }
 
 } // namespace

+ 5 - 2
tests/beat-sequence-player.cpp

@@ -5,9 +5,12 @@ using namespace midi;
 
 int main()
 {
-    BeatSequencePlayer p;
+    BeatSequence s;
+    s.resize(8);
+
+    BeatSequencePlayer p(&s);
     try {
-        p.start();
+        p.loop();
     } catch(const char* ex) {
         cout << ex << endl;
     }