[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