From 90d1466d82e01fd7e5e2d2b49977e2dccaac9e33 Mon Sep 17 00:00:00 2001
From: deva <deva>
Date: Tue, 5 Aug 2008 08:43:35 +0000
Subject: Forgot to put eXpat in configure

---
 src/Makefile.am   |   2 +
 src/beatmapper.cc |  13 ++++--
 src/beatmapper.h  |   2 +-
 src/drumgizmo.cc  |  98 ++-------------------------------------
 src/midimapper.cc |   5 +-
 src/midiplayer.cc | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/midiplayer.h  |  48 +++++++++++++++++++
 7 files changed, 201 insertions(+), 101 deletions(-)
 create mode 100644 src/midiplayer.cc
 create mode 100644 src/midiplayer.h

(limited to 'src')

diff --git a/src/Makefile.am b/src/Makefile.am
index 6de8c3f..2108c43 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,6 +14,7 @@ drumgizmo_SOURCES = \
 	instrument.cc \
 	jackclient.cc \
 	midimapper.cc \
+	midiplayer.cc \
 	sample.cc \
 	saxparser.cc \
 	velocity.cc
@@ -28,6 +29,7 @@ EXTRA_DIST = \
 	instrument.h \
 	jackclient.h \
 	midimapper.h \
+	midiplayer.h \
 	sample.h \
 	saxparser.h \
 	velocity.h
diff --git a/src/beatmapper.cc b/src/beatmapper.cc
index 99432ce..2600499 100644
--- a/src/beatmapper.cc
+++ b/src/beatmapper.cc
@@ -26,18 +26,21 @@
  */
 #include "beatmapper.h"
 
+#define DEF 2.0
+
 BeatMapper::BeatMapper(Instrument *instrument)
 {
   this->instrument = instrument;
-  for(size_t i = 0; i < HISTORY_SIZE; i++) hist[i] = 1.0;
+  for(size_t i = 0; i < HISTORY_SIZE; i++) hist[i] = DEF;
   C = 1.3;
-  mindist = 2;
+  mindist = 4;
   last = mindist;
 }
 
 
 Sample *BeatMapper::map(jack_nframes_t nframes)
 {
+  return NULL;
   Sample *sample = NULL;
   
   jack_default_audio_sample_t *buffer;
@@ -50,13 +53,15 @@ Sample *BeatMapper::map(jack_nframes_t nframes)
 
   float E = 0.0;
   for(size_t i = 0; i < HISTORY_SIZE; i++) E += hist[i] / (float)HISTORY_SIZE;
-  if(E == 0) E = 1.0; // We do not have a connection
+  if(E == 0) E = DEF; // We do not have a connection
 
   //  printf("last: %d, E: %f,  e: %f - threshold: %f\n", last, E, e, 1.3 * E);
 
   // Shift history and save new value
   for(size_t i = 0; i < HISTORY_SIZE - 1; i++) hist[i] = hist[i+1];
-  hist[HISTORY_SIZE - 1] = e;
+  hist[HISTORY_SIZE - 1] = e>DEF?e:DEF;
+
+  if(instrument->name == "hihat" && e > 0) printf("e: %f\n", e);
 
   if(e > C * E && last > mindist) {
     Velocity *v = instrument->getVelocity(127);
diff --git a/src/beatmapper.h b/src/beatmapper.h
index c57164b..8182e40 100644
--- a/src/beatmapper.h
+++ b/src/beatmapper.h
@@ -34,7 +34,7 @@
 
 #include <map>
 
-#define HISTORY_SIZE 43
+#define HISTORY_SIZE 200
 
 class BeatMapper {
 public:
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index b3b7473..4445712 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -24,9 +24,10 @@
  *  along with DrumGizmo; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
  */
-#include "jackclient.h"
 
+#include "jackclient.h"
 #include "drumkitparser.h"
+#include "midiplayer.h"
 
 int main(int argc, char *argv[])
 {
@@ -37,102 +38,9 @@ int main(int argc, char *argv[])
 
   client.activate();
 
-  //  sendMidi();
+  MidiPlayer player("dimmer.mid");
 
   while(1) sleep(1);
 
   return 0;
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#if 0
-#include <jack/jack.h>
-#include <jack/midiport.h>
-
-static jack_port_t *test_midi_port = NULL;
-static size_t timer = 0;
-static size_t next = 44100;
-
-int process(jack_nframes_t nframes, void *arg)
-{
-  //  if(jack_port_connected_to(test_midi_port, "DrumGizmo:midi_in")) {
-  void* port_buf = jack_port_get_buffer(test_midi_port, nframes);
-
-  if(timer > next) { // activate every second (44100 samples)
-    //    printf("ding\n");
-
-    jack_nframes_t time = (jack_nframes_t)(((float)rand() / (float)RAND_MAX) * nframes);
-    size_t size = 1;
-    jack_midi_data_t all_notes_off[] = { rand() % 2 };
-    jack_midi_event_write(port_buf, time, all_notes_off, size);
-
-    timer = 0;
-    next = (size_t)(((float)rand() / (float)RAND_MAX) * 0.2 * 44100);
-  }
-
-  timer += nframes;
-  
-  return 0;
-}
-
-void sendMidi()
-{
-	jack_status_t status;
-
-  jack_client_t *jack_client = jack_client_open("MidiTest", JackNullOption, &status);
-
-	test_midi_port = jack_port_register(jack_client,
-                                      "midi_out",
-                                      JACK_DEFAULT_MIDI_TYPE,
-                                      JackPortIsOutput,// | JackPortIsTerminal,
-                                      0);
-
-  jack_set_process_callback(jack_client, process, NULL);
-
-	jack_activate(jack_client);
-
-  jack_connect(jack_client, "MidiTest:midi_out", "DrumGizmo:midi_in");
-
-  jack_connect(jack_client, "DrumGizmo:output_1", "system:playback_1");
-  jack_connect(jack_client, "DrumGizmo:output_2", "system:playback_2");
-}
-#endif/*0*/
diff --git a/src/midimapper.cc b/src/midimapper.cc
index 10e038f..1d2c7a8 100644
--- a/src/midimapper.cc
+++ b/src/midimapper.cc
@@ -80,7 +80,10 @@ Sample *MidiMapper::map(jack_midi_event_t event)
   }
   printf("]\n");
   */
-  if(drumkit->instruments.find(key) == drumkit->instruments.end()) return NULL;
+  if(drumkit->instruments.find(key) == drumkit->instruments.end()) {
+    printf("Unknown intrsument %d\n", key);
+    return NULL;
+  }
 
   Velocity *v = drumkit->instruments[key]->getVelocity(velocity);
   
diff --git a/src/midiplayer.cc b/src/midiplayer.cc
new file mode 100644
index 0000000..d936eae
--- /dev/null
+++ b/src/midiplayer.cc
@@ -0,0 +1,134 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            midiplayer.cc
+ *
+ *  Sat Jul 26 15:23:19 CEST 2008
+ *  Copyright 2008 Bent Bisballe Nyeng
+ *  deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ *  This file is part of DrumGizmo.
+ *
+ *  DrumGizmo is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  DrumGizmo is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with DrumGizmo; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+ */
+#include "midiplayer.h"
+
+#define NOTE_ON 0x90
+
+int _process(jack_nframes_t nframes, void *arg)
+{
+  return ((MidiPlayer*)arg)->process(nframes);
+}
+
+MidiPlayer::MidiPlayer(char *filename)
+{
+	jack_status_t status;
+
+  jack_client_t *jack_client = jack_client_open("MidiTest", JackNullOption, &status);
+
+	port = jack_port_register(jack_client,
+                            "midi_out",
+                            JACK_DEFAULT_MIDI_TYPE,
+                            JackPortIsOutput,// | JackPortIsTerminal,
+                            0);
+
+  jack_set_process_callback(jack_client, _process, this);
+
+	jack_activate(jack_client);
+
+  jack_connect(jack_client, "MidiTest:midi_out", "DrumGizmo:midi_in");
+
+  jack_connect(jack_client, "DrumGizmo:Kick-R", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Kick-L", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:SnareTop", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:SnareBottom", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:SnareTrigger", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Tom1", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Tom2", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Tom3", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Tom4", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Ride", "system:playback_1");
+  //  jack_connect(jack_client, "DrumGizmo:Hihat", "system:playback_1");
+
+  jack_connect(jack_client, "DrumGizmo:Kick-R", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Kick-L", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:SnareTop", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:SnareBottom", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:SnareTrigger", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Tom1", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Tom2", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Tom3", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Tom4", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Ride", "system:playback_2");
+  //  jack_connect(jack_client, "DrumGizmo:Hihat", "system:playback_2");
+
+  jack_connect(jack_client, "DrumGizmo:OH-R", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:OH-L", "system:playback_2");
+  jack_connect(jack_client, "DrumGizmo:Amb-R", "system:playback_1");
+  jack_connect(jack_client, "DrumGizmo:Amb-L", "system:playback_2");
+
+  timer = 0;
+  next = 44100;
+}
+
+MidiPlayer::~MidiPlayer()
+{
+}
+
+#if 0 // All
+#define NUM_INST 11
+static int inst[] = { 35, 36, 38, 46, 41, 43, 45, 47, 49, 57, 51 };
+#endif
+
+#if 1 // Cymbals
+#define NUM_INST 3
+static int inst[] = { 51, 49, 57 };
+#endif
+
+#if 0 // Toms
+#define NUM_INST 4
+static int inst[] = { 41, 43, 45, 47 };
+#endif
+
+#if 0 // Kicks
+#define NUM_INST 2
+static int inst[] = { 35, 36 };
+#endif
+int MidiPlayer::process(jack_nframes_t nframes)
+{
+  return 0;
+
+  //  if(jack_port_connected_to(test_midi_port, "DrumGizmo:midi_in")) {
+  void* port_buf = jack_port_get_buffer(port, nframes);
+
+  if(timer > next) { // activate every second (44100 samples)
+    //    printf("ding\n");
+
+    jack_nframes_t time = (jack_nframes_t)(((float)rand() / (float)RAND_MAX) * nframes);
+    size_t size = 3;
+    jack_midi_data_t note[] = { NOTE_ON, inst[rand() % NUM_INST], rand() % 127};
+    jack_midi_event_write(port_buf, time, note, size);
+
+    timer = 0;
+    next = (size_t)(((float)rand() / (float)RAND_MAX) * 0.2 * 44100);
+  }
+
+  timer += nframes;
+  
+  return 0;
+}
+
+
diff --git a/src/midiplayer.h b/src/midiplayer.h
new file mode 100644
index 0000000..5069ec6
--- /dev/null
+++ b/src/midiplayer.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            midiplayer.h
+ *
+ *  Sat Jul 26 15:23:18 CEST 2008
+ *  Copyright 2008 Bent Bisballe Nyeng
+ *  deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ *  This file is part of DrumGizmo.
+ *
+ *  DrumGizmo is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  DrumGizmo is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with DrumGizmo; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+ */
+#ifndef __DRUMGIZMO_MIDIPLAYER_H__
+#define __DRUMGIZMO_MIDIPLAYER_H__
+
+#include <jack/jack.h>
+#include <jack/midiport.h>
+
+class MidiPlayer {
+public:
+  MidiPlayer(char *filename);
+  ~MidiPlayer();
+
+  int process(jack_nframes_t nframes);
+
+private:
+  jack_client_t *jack_client;
+  jack_port_t *port;
+
+  size_t timer;
+  size_t next;
+};
+
+#endif/*__DRUMGIZMO_MIDIPLAYER_H__*/
-- 
cgit v1.2.3