[specimen-svn] r89 - in trunk: . src

svn at zhevny.com svn at zhevny.com
Fri Mar 26 12:23:04 CDT 2010


Author: eric
Date: 2010-03-26 12:23:04 -0500 (Fri, 26 Mar 2010)
New Revision: 89

Added:
   trunk/src/jackdriver.h
Modified:
   trunk/configure.ac
   trunk/src/jackdriver.c
   trunk/src/specimen.c
Log:
applied jack session patch from Torben Hohn.



Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac	2009-01-17 15:14:01 UTC (rev 88)
+++ trunk/configure.ac	2010-03-26 17:23:04 UTC (rev 89)
@@ -5,7 +5,6 @@
 AM_INIT_AUTOMAKE(specimen, 0.5.1+svn)
 AM_CONFIG_HEADER(src/config.h)
 
-
 # compilation
 with_debug="no"
 AC_ARG_ENABLE([debug], 
@@ -38,6 +37,7 @@
 
 # standard autoconf checks
 AC_PROG_CC
+AM_PROG_CC_C_O
 AC_PROG_CPP
 AC_PROG_RANLIB
 AC_HEADER_STDC
@@ -104,6 +104,10 @@
       fi
     fi 
   fi
+  AC_CHECK_HEADER( jack/session.h, HAVE_JACK_SESSION="yes", HAVE_JACK_SESSION="no" )
+  if test "x$HAVE_JACK_SESSION" = xyes; then
+    AC_DEFINE([HAVE_JACK_SESSION], [], [Define if we have jack session support.])
+  fi
 fi
 AC_SUBST(JACK_CFLAGS)
 AC_SUBST(JACK_LIBS)

Modified: trunk/src/jackdriver.c
===================================================================
--- trunk/src/jackdriver.c	2009-01-17 15:14:01 UTC (rev 88)
+++ trunk/src/jackdriver.c	2010-03-26 17:23:04 UTC (rev 89)
@@ -6,6 +6,9 @@
 #if defined HAVE_JACK_MIDI || defined HAVE_OLD_JACK_MIDI || defined HAVE_OLDEST_JACK_MIDI
 #include <jack/midiport.h>
 #endif /* HAVE_JACK_MIDI || HAVE_OLD_JACK_MIDI || HAVE_OLDEST_JACK_MIDI */
+#ifdef HAVE_JACK_SESSION
+#include <jack/session.h>
+#endif /* HAVE_JACK_SESSION */
 #include <jack/transport.h>
 #include <gtk/gtk.h>
 #include <pthread.h>
@@ -17,6 +20,7 @@
 #include "mixer.h"
 #include "sync.h"
 #include "lfo.h"
+#include "beef.h"
 #include "gui/gui.h"
 
 /* prototypes */
@@ -30,12 +34,16 @@
 #if defined HAVE_JACK_MIDI || defined HAVE_OLD_JACK_MIDI || defined HAVE_OLDEST_JACK_MIDI
 static jack_port_t*    midiport;
 #endif
+#ifdef HAVE_JACK_SESSION
+static jack_session_event_t *session_event;
+#endif
 static jack_client_t*  client;
 static float*          buffer;
 static int             rate = 44100;
 static int             periodsize = 2048;
 static int             running = 0;
 static pthread_mutex_t running_mutex = PTHREAD_MUTEX_INITIALIZER;
+static char*           session_uuid = NULL;
 
 /* working together to stop CTS */
 typedef jack_default_audio_sample_t jack_sample_t;
@@ -69,7 +77,36 @@
 }
 #endif /* HAVE_JACK_MIDI || HAVE_OLD_JACK_MIDI || HAVE_OLDEST_JACK_MIDI */
 
+#if defined HAVE_JACK_SESSION
+static int session_callback( void *arg )
+{
+    char filename[256];
+    char command[256];
 
+    snprintf( filename, sizeof(filename), "%sbank.beef", session_event->session_dir );
+    snprintf( command, sizeof(command), "specimen -U %s ${SESSION_DIR}bank.beef", session_event->client_uuid );
+
+    beef_write(filename);
+
+    session_event->command_line = strdup( command );
+
+    jack_session_reply( client, session_event );
+
+    if (session_event->type == JackSessionSaveAndQuit)
+	gtk_main_quit();
+
+    jack_session_event_free (session_event);
+
+    return 0;
+}
+
+static void session_callback_aux( jack_session_event_t *event, void *arg )
+{
+    session_event = event;
+    g_idle_add( session_callback, arg );
+}
+#endif
+
 static int process (jack_nframes_t frames, void* arg)
 {
      int i;
@@ -278,7 +315,12 @@
      debug ("Initializing Jack Driver...\n");
      pthread_mutex_lock (&running_mutex);
      running = 0;
-     if ((client = jack_client_open (instancename, JackNullOption, NULL)) == 0)
+#ifdef HAVE_JACK_SESSION
+     client = jack_client_open (instancename, JackSessionID, NULL, session_uuid);
+#else
+     client = jack_client_open (instancename, JackNullOption, NULL);
+#endif
+     if (client == 0)
      {
 	  errmsg ("Failed to open new jack client: %s\n", instancename);
 	  pthread_mutex_unlock (&running_mutex);
@@ -286,6 +328,10 @@
      }
 
      jack_set_process_callback (client, process, 0);
+#ifdef HAVE_JACK_SESSION
+     if (jack_set_session_callback)
+	     jack_set_session_callback (client, session_callback_aux, 0);
+#endif
      jack_on_shutdown (client, shutdown, 0);
 
      lport =
@@ -401,6 +447,11 @@
      return (void*) jack_get_client_name(client);
 }
 
+void jackdriver_set_uuid      (char *uuid)
+{
+    session_uuid = uuid;
+}
+
 Driver jack_driver = {
      init,
      start,

Added: trunk/src/jackdriver.h
===================================================================
--- trunk/src/jackdriver.h	                        (rev 0)
+++ trunk/src/jackdriver.h	2010-03-26 17:23:04 UTC (rev 89)
@@ -0,0 +1,9 @@
+#ifndef __JACKDRIVER_H__
+#define __JACKDRIVER_H__
+
+#include "config.h"
+
+void jackdriver_set_uuid      (char *uuid);
+
+
+#endif /* __JACKDRIVER_H__ */

Modified: trunk/src/specimen.c
===================================================================
--- trunk/src/specimen.c	2009-01-17 15:14:01 UTC (rev 88)
+++ trunk/src/specimen.c	2010-03-26 17:23:04 UTC (rev 89)
@@ -17,6 +17,8 @@
 #include "lashdriver.h"
 #endif
 
+#include "jackdriver.h"
+
 void show_usage (void)
 {
 	printf ("Usage: specimen [options] [bankname]\n\n");
@@ -44,12 +46,13 @@
 	static struct option long_options[] = 
 	{
 		{ "name", 1, 0, 'n'},
+		{ "uuid", 1, 0, 'U'},
 		{ "help", 0, 0, 'h'},
 		{ 0, 0, 0, 0}
 	};
 
 	/* command line argument processing */
-	while((opt = getopt_long(argc, argv, "n:h", long_options,
+	while((opt = getopt_long(argc, argv, "n:U:h", long_options,
 	                         &longopt_index)) > 0)
 	{
 		switch (opt)
@@ -57,6 +60,9 @@
 			case 'n':
 				instance_name = strdup(optarg);
 				break;
+			case 'U':
+				jackdriver_set_uuid( strdup(optarg) );
+				break;
 			case 'h':
 				show_usage();
 				return 0;


More information about the specimen-svn mailing list