Преглед на файлове

beat player: making noise

Fabian Peter Hammerle преди 10 години
родител
ревизия
1c715f0952
променени са 3 файла, в които са добавени 32 реда и са изтрити 9 реда
  1. 10 2
      BeatSequencePlayer.cpp
  2. 3 1
      BeatSequencePlayer.h
  3. 19 6
      tests/beat-sequence-player.cpp

+ 10 - 2
BeatSequencePlayer.cpp

@@ -8,9 +8,14 @@ BeatSequencePlayer::BeatSequencePlayer()
 {
 }
 
-BeatSequencePlayer::BeatSequencePlayer(const BeatSequence* seq)
+BeatSequencePlayer::BeatSequencePlayer(Output* out)
+    : BeatSequencePlayer(out)
+{
+}
+
+BeatSequencePlayer::BeatSequencePlayer(Output* out, const BeatSequence* seq)
     : looping(false), nextBeat(0), 
-      clock(&beat, (void*)this), sequence(seq)
+      clock(&beat, (void*)this), sequence(seq), output(out)
 {
 }
 
@@ -97,6 +102,9 @@ void BeatSequencePlayer::beat(void* data)
         if(beat < player.sequence->size()) {
 
             std::cout << "beat #" << beat << std::endl;
+            const BeatSequence& seq = *player.sequence;
+            const MessageList& messages = seq[beat];
+            player.output->sendMessages(messages);
 
             if(beat + 1 == player.sequence->size()) {
                 if(player.getLooping()) {

+ 3 - 1
BeatSequencePlayer.h

@@ -18,12 +18,14 @@ private:
     BeatIndex nextBeat;
     std::mutex nextBeat_mutex;
     CallbackClock clock;
+    Output* output;
 
 public:
     const BeatSequence* sequence;
 
     BeatSequencePlayer();
-    BeatSequencePlayer(const BeatSequence* sequence);
+    BeatSequencePlayer(Output* output);
+    BeatSequencePlayer(Output* output, const BeatSequence* sequence);
     Bpm getBpm();
     void setBpm(Bpm bpm);
     bool getLooping();

+ 19 - 6
tests/beat-sequence-player.cpp

@@ -5,15 +5,28 @@ using namespace midi;
 
 int main()
 {
+    Output out;
+    out.openVirtualPort();
+
+    const int base = 54;
+
     BeatSequence s;
     s.resize(8);
+    s[0].push_back(std::make_shared<NoteOnMessage>(0, base + 0 + 0, 127));
+    s[0].push_back(std::make_shared<NoteOnMessage>(0, base + 0 + 4, 127));
+    s[0].push_back(std::make_shared<NoteOnMessage>(0, base + 0 + 7, 127));
+    s[2].push_back(std::make_shared<NoteOnMessage>(0, base + 7 + 0, 127));
+    s[2].push_back(std::make_shared<NoteOnMessage>(0, base + 7 + 4, 127));
+    s[2].push_back(std::make_shared<NoteOnMessage>(0, base + 7 + 7, 127));
+    s[4].push_back(std::make_shared<NoteOnMessage>(0, base + 9 + 0, 127));
+    s[4].push_back(std::make_shared<NoteOnMessage>(0, base + 9 + 3, 127));
+    s[4].push_back(std::make_shared<NoteOnMessage>(0, base + 9 + 7, 127));
+    s[6].push_back(std::make_shared<NoteOnMessage>(0, base + 5 + 0, 127));
+    s[6].push_back(std::make_shared<NoteOnMessage>(0, base + 5 + 4, 127));
+    s[6].push_back(std::make_shared<NoteOnMessage>(0, base + 5 + 7, 127));
 
-    BeatSequencePlayer p(&s);
-    try {
-        p.loop();
-    } catch(const char* ex) {
-        cout << ex << endl;
-    }
+    BeatSequencePlayer p(&out, &s);
+    p.loop();
     
     while(true) {
         BeatSequencePlayer::Bpm bpm;