Added status function.
authorStefan Westerfeld <stefan@space.twc.de>
Sun, 16 May 2010 14:47:41 +0000 (16:47 +0200)
committerStefan Westerfeld <stefan@space.twc.de>
Sun, 16 May 2010 14:47:41 +0000 (16:47 +0200)
src/jacksampler.cc
src/jacksampler.hh
src/main.cc

index 7518338..88cb1c3 100644 (file)
@@ -82,13 +82,18 @@ JackSampler::JackSampler() :
   pedal_down (false),
   release_delay_ms (0),
   release_ms (50),
-  mout (0)
+  mout (0),
+  instrument_count (0)
 {
 }
 
 void
-JackSampler::init (jack_client_t *client)
+JackSampler::init (const Options& options, jack_client_t *client, int argc, char **argv)
 {
+  for (int i = 1; i < argc; i++)
+    parse_config (options, i, argv[i]);
+  instrument_count = argc - 1;
+
   jack_set_process_callback (client, jack_process, this);
 
   jack_mix_freq = jack_get_sample_rate (client);
@@ -354,3 +359,35 @@ JackSampler::change_instrument (int new_instrument)
   instrument = new_instrument;
   printf ("JackSampler: changed instrument to %d\n", instrument);
 }
+
+void
+JackSampler::status()
+{
+  int unused = 0;
+  int on = 0;
+  int release_delay = 0;
+  int fade_out = 0;
+
+  for (size_t i = 0; i < voices.size(); i++)
+    {
+      if (voices[i].state == Voice::UNUSED)
+        unused++;
+      else if (voices[i].state == Voice::ON)
+        on++;
+      else if (voices[i].state == Voice::RELEASE_DELAY)
+        release_delay++;
+      else if (voices[i].state == Voice::FADE_OUT)
+        fade_out++;
+      else
+        g_assert_not_reached();
+    }
+  printf ("sampling rate:   %.2f\n", jack_mix_freq);
+  printf ("instruments:     %d\n", instrument_count);
+  printf ("active instr.:   %d\n", instrument);
+  printf ("total voices:    %d\n", voices.size());
+  printf ("\n");
+  printf (" * unused        %d\n", unused);
+  printf (" * on            %d\n", on);
+  printf (" * release delay %d\n", release_delay);
+  printf (" * fade out      %d\n", fade_out);
+}
index daaebaa..c3164c5 100644 (file)
@@ -61,6 +61,7 @@ protected:
   jack_port_t  *output_port;
 
   int           instrument;
+  int           instrument_count;
   bool          pedal_down;
 
   double        release_delay_ms;
@@ -77,9 +78,10 @@ protected:
 public:
   JackSampler();
 
-  void init (jack_client_t *client);
+  void init (const Options& options, jack_client_t *client, int argc, char **argv);
   void parse_config (const Options& options, int instrument, const char *name);
   void change_instrument (int new_instrument);
+  void status();
 };
 
 #endif
index 8721d7b..e4d877c 100644 (file)
@@ -54,9 +54,6 @@ main (int argc, char **argv)
       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)
@@ -65,7 +62,7 @@ main (int argc, char **argv)
       exit (1);
     }
 
-  jack_sampler.init (client);
+  jack_sampler.init (options, client, argc, argv);
   //jack_set_sample_rate_callback (client, srate, 0);
   //jack_on_shutdown (client, jack_shutdown, 0);
 
@@ -84,6 +81,10 @@ main (int argc, char **argv)
         {
           jack_sampler.change_instrument (instrument);
         }
+      else if (strcmp (buffer, "s") == 0 || strcmp (buffer, "status") == 0)
+        {
+          jack_sampler.status();
+        }
       else if (strcmp (buffer, "q") == 0 || strcmp (buffer, "quit") == 0)
         {
           jack_deactivate (client);
@@ -93,6 +94,7 @@ main (int argc, char **argv)
         {
           printf ("JackSampler keyboard commands:\n\n");
           printf ("  1, 2, 3, ...    switch to instrument 1, 2, 3, ...\n");
+          printf ("  s, status       show status information\n");
           printf ("  q, quit         quit JackSampler\n");
         }
     }