Refactoring: move main() into its own C++ file.
authorStefan Westerfeld <stefan@space.twc.de>
Sun, 16 May 2010 13:52:34 +0000 (15:52 +0200)
committerStefan Westerfeld <stefan@space.twc.de>
Sun, 16 May 2010 13:52:34 +0000 (15:52 +0200)
src/Makefile.am
src/jacksampler.cc
src/jacksampler.hh [new file with mode: 0644]
src/main.cc [new file with mode: 0644]
src/main.hh [new file with mode: 0644]

index 7553566..4606d3a 100644 (file)
@@ -2,5 +2,5 @@ AM_CXXFLAGS = $(BSE_CFLAGS) $(JACK_CFLAGS)
 
 bin_PROGRAMS = jacksampler
 
-jacksampler_SOURCES = jacksampler.cc
+jacksampler_SOURCES = jacksampler.cc main.cc jacksampler.hh main.hh
 jacksampler_LDADD = $(BSE_LIBS) $(JACK_LIBS)
index e2ac1f9..934c045 100644 (file)
@@ -38,6 +38,9 @@
 #include <jack/jack.h>
 #include <jack/midiport.h>
 
+#include "main.hh"
+#include "jacksampler.hh"
+
 using std::string;
 using std::vector;
 
@@ -115,25 +118,21 @@ isNoteOff (const jack_midi_event_t& event)
   return false;
 }
 
-class JackSampler
-{
-private:
-  double jack_mix_freq;
-
-protected:
-  int process (jack_nframes_t nframes);
-  static int jack_process (jack_nframes_t nframes, void *arg);
-
-public:
-  void init (jack_client_t *client);
-};
-
 void
 JackSampler::init (jack_client_t *client)
 {
   jack_set_process_callback (client, jack_process, this);
 
   jack_mix_freq = jack_get_sample_rate (client);
+
+  input_port = jack_port_register (client, "midi_in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
+  output_port = jack_port_register (client, "audio_out", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
+
+  if (jack_activate (client))
+    {
+      fprintf (stderr, "cannot activate client");
+      exit (1);
+    }
 }
 
 int
@@ -283,13 +282,8 @@ JackSampler::jack_process (jack_nframes_t nframes, void *arg)
   return instance->process (nframes);
 }
 
-struct Options
-{
-  string program_name;
-} options;
-
 void
-loadNote (int note, const char *file_name, int instrument)
+loadNote (const Options& options, int note, const char *file_name, int instrument)
 {
   /* open input */
   BseErrorType error;
@@ -342,8 +336,8 @@ loadNote (int note, const char *file_name, int instrument)
   samples.push_back (s);
 }
 
-int
-parseConfig (int instrument, const char *name)
+void
+JackSampler::parse_config (const Options& options, int instrument, const char *name)
 {
   FILE *config = fopen (name, "r");
 
@@ -361,7 +355,7 @@ parseConfig (int instrument, const char *name)
             {
               int note = atoi (note_str);
               const char *file = strtok (NULL, sep);
-              loadNote (note, file, instrument);
+              loadNote (options, note, file, instrument);
               printf ("NOTE %d FILE %s\n", note, file);
             }
         }
@@ -384,64 +378,11 @@ parseConfig (int instrument, const char *name)
             }
         }
     }
-  return 0;
 }
 
-int
-main (int argc, char **argv)
+void
+JackSampler::change_instrument (int new_instrument)
 {
-  /* init */
-  SfiInitValue values[] = {
-    { "stand-alone",            "true" }, /* no rcfiles etc. */
-    { "wave-chunk-padding",     NULL, 1, },
-    { "dcache-block-size",      NULL, 8192, },
-    { "dcache-cache-memory",    NULL, 5 * 1024 * 1024, },
-    { NULL }
-  };
-  bse_init_inprocess (&argc, &argv, NULL, values);
-  //options.parse (&argc, &argv);
-  options.program_name = "sampler";
-
-  if (argc < 2)
-    {
-      fprintf (stderr, "usage: jacksampler <config1> [ <config2> ... <configN> ]\n");
-      exit (1);
-    }
-
-  for (int i = 1; i < argc; i++)
-    parseConfig (i, argv[i]);
-
-  jack_client_t *client;
-  client = jack_client_open ("sampler", JackNullOption, NULL);
-  if (!client)
-    {
-      fprintf (stderr, "unable to connect to jack server\n");
-      exit (1);
-    }
-
-  JackSampler jack_sampler;
-
-  jack_sampler.init (client);
-
-
-  //jack_set_sample_rate_callback (client, srate, 0);
-
-  //jack_on_shutdown (client, jack_shutdown, 0);
-
-  input_port = jack_port_register (client, "midi_in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
-  output_port = jack_port_register (client, "audio_out", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
-
-  if (jack_activate (client))
-    {
-      fprintf(stderr, "cannot activate client");
-      return 1;
-    }
-
-  while (1)
-    {
-      char buffer[1024];
-      fgets (buffer, 1024, stdin);
-      instrument = atoi (buffer);
-      printf ("INSTRUMENT CHANGED TO %d\n", instrument);
-    }
+  instrument = new_instrument;
+  printf ("JackSampler: changed instrument to %d\n", instrument);
 }
diff --git a/src/jacksampler.hh b/src/jacksampler.hh
new file mode 100644 (file)
index 0000000..3e51fb8
--- /dev/null
@@ -0,0 +1,41 @@
+/* JackSampler - JACK based sampler
+ * Copyright (C) 2009-2010 Stefan Westerfeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef JACK_SAMPLER_JACK_SAMPLER_HH
+#define JACK_SAMPLER_JACK_SAMPLER_HH
+
+#include <jack/jack.h>
+
+class JackSampler
+{
+private:
+  double jack_mix_freq;
+
+protected:
+  int process (jack_nframes_t nframes);
+  static int jack_process (jack_nframes_t nframes, void *arg);
+
+public:
+  void init (jack_client_t *client);
+  void parse_config (const Options& options, int instrument, const char *name);
+  void change_instrument (int new_instrument);
+};
+
+#endif
+
diff --git a/src/main.cc b/src/main.cc
new file mode 100644 (file)
index 0000000..b62a8b8
--- /dev/null
@@ -0,0 +1,73 @@
+/* JackSampler - JACK based sampler
+ * Copyright (C) 2009-2010 Stefan Westerfeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <bse/bsemain.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "main.hh"
+#include "jacksampler.hh"
+
+
+int
+main (int argc, char **argv)
+{
+  Options options;
+  JackSampler jack_sampler;
+
+  /* init */
+  SfiInitValue values[] = {
+    { "stand-alone",            "true" }, /* no rcfiles etc. */
+    { "wave-chunk-padding",     NULL, 1, },
+    { "dcache-block-size",      NULL, 8192, },
+    { "dcache-cache-memory",    NULL, 5 * 1024 * 1024, },
+    { NULL }
+  };
+  bse_init_inprocess (&argc, &argv, NULL, values);
+  //options.parse (&argc, &argv);
+  options.program_name = "sampler";
+
+  if (argc < 2)
+    {
+      fprintf (stderr, "usage: jacksampler <config1> [ <config2> ... <configN> ]\n");
+      exit (1);
+    }
+
+  for (int i = 1; i < argc; i++)
+    jack_sampler.parse_config (options, i, argv[i]);
+
+  jack_client_t *client;
+  client = jack_client_open ("sampler", JackNullOption, NULL);
+  if (!client)
+    {
+      fprintf (stderr, "unable to connect to jack server\n");
+      exit (1);
+    }
+
+  jack_sampler.init (client);
+  //jack_set_sample_rate_callback (client, srate, 0);
+  //jack_on_shutdown (client, jack_shutdown, 0);
+
+  while (1)
+    {
+      char buffer[1024];
+      fgets (buffer, 1024, stdin);
+      int instrument = atoi (buffer);
+      jack_sampler.change_instrument (instrument);
+    }
+}
diff --git a/src/main.hh b/src/main.hh
new file mode 100644 (file)
index 0000000..ff6e766
--- /dev/null
@@ -0,0 +1,30 @@
+/* JackSampler - JACK based sampler
+ * Copyright (C) 2009-2010 Stefan Westerfeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef JACK_SAMPLER_MAIN_HH
+#define JACK_SAMPLER_MAIN_HH
+
+#include <string>
+
+struct Options
+{
+  std::string program_name;
+};
+
+#endif