Jack shutdown, master volume fixes - Alex
authorterminatorX <>
Thu, 7 Aug 2003 19:42:17 +0000 (19:42 +0000)
committerterminatorX <>
Thu, 7 Aug 2003 19:42:17 +0000 (19:42 +0000)
ChangeLog
NEWS
src/main.cc
src/tX_audiodevice.cc
src/tX_audiodevice.h
src/tX_dialog.cc
src/tX_global.c
src/tX_mastergui.cc
src/tX_seqpar.cc
src/tX_vtt.cc
src/tX_vtt.h

index 9d78bc4c188f4f74ced61b9c52a6b132c1056c81..ce37c478b9fe198442b5a06644647f4a5ff1796a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,17 +4,24 @@ This is not a GNU-style ChangeLog but you sort of get the idea what was
 changed.
 
 [v3.81]
+- terminatorX now has a JACK backend. Currently it works like this: on startup
+  tX will connect to the JACK daemon - if the daemon is not available on 
+  startup JACK output is not available. When the audio engine is turned off,
+  tX emits silence via the JACK ports, so you can leave the ports connected. 
+- sick of green - you can now configure the colors terminatorX should use for 
+  the audio display as well as the vu meters in the Preferences dialog.
+- hopefully fixed wrong setting of the master volume when loading set files.
 - some ALSA installations seem to core on snd_pcm_hw_params_free() after sound
   device init. So freeing the hw_params can now be explicitly disabled in
   the Preferences - if terminatorX crashes right after hitting the "Power On"
   button it might be necessary to activate this for your ALSA setup. This
-  probably results in a memory leak - but on leak vs core you might decide for
-  leak.
+  probably results in a tiny memory leak - but on leak vs core you might decide
+  for leak.
 - fixed a bug that caused turntable 1 to get the focus on entering Mouse Grab
   mode even when it's audio panel was minimized.
 - introduced a new way of assigning MIDI controllers to parameters: simply 
-  right-click on a parameters control: a menu with "MIDI Learn" and 
-  "Remove MIDI Binding" will pop up. Simply select "MIDI Learn" and send the 
+  right-click on a parameter's control: a menu with "MIDI Learn" and 
+  "Remove MIDI Binding" will pop up - select "MIDI Learn" and send the 
   corresponding MIDI event.
 - fixed a bug in the MIDI callback thanks to 
 - the realtime scheduling reproducibly stalled separate machines. Unluckily 
diff --git a/NEWS b/NEWS
index f06c9899d95baa0ce51456600f54d4c340ce9468..93b9f3ca08aef9bc76e52683ea0cd5b985b8b177 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
 terminatorX NEWS:
 
-Sorry folks, I only maintain ChangeLog which from the GNU point of view
-rather is a NEWS then a ChangeLog file.
+Sorry, I only maintain ChangeLog which from the GNU point of view rather is a 
+NEWS then a ChangeLog file.
index b2fae4ff2feebd7ab44b9e61a9ba0a8a5cef9c81..297264dd61461b3f9ec77c1bcb56a4c70f75eea3 100644 (file)
@@ -72,7 +72,7 @@ gint idle_tag;
 #ifdef USE_JACK        
 void jack_check()
 {
-       if (!tX_jack_client::get_instance()) {
+       if ((!tX_jack_client::get_instance()) && (globals.audiodevice_type==JACK)) {
                tx_note("Couldn't connect to JACK server - JACK output not available.\n\nIf you want to use JACK, ensure the JACK daemon is running before you start terminatorX.", true);
        }
 }
@@ -245,17 +245,19 @@ int main(int argc, char **argv)
                
        if (!globals.show_nag) {
                display_mastergui();
-#ifdef USE_JACK        
-               jack_check();
-#endif                 
        }
                
-       if (globals.startup_set)
-       {
+       if (globals.startup_set) {
                while (gtk_events_pending()) gtk_main_iteration(); gdk_flush(); 
+               tX_cursor::set_cursor(tX_cursor::WAIT_CURSOR);
                load_tt_part(globals.startup_set);
+               tX_cursor::reset_cursor();
        }
-               
+
+#ifdef USE_JACK        
+       jack_check();
+#endif                 
+       
 #ifndef CREATE_BENCHMARK
 
 //     gdk_input_init();
index 6289aa83ff31aeac08a25c14eb7ffb183b803a01..3def5e023a69f13d287c7e69053763f1c6625359 100644 (file)
@@ -365,7 +365,7 @@ void tX_jack_client::init()
                }       
 }
 
-tX_jack_client::tX_jack_client():device(NULL)
+tX_jack_client::tX_jack_client():device(NULL),jack_shutdown(false)
 {
        jack_set_error_function(tX_jack_client::error);
        
@@ -416,13 +416,14 @@ void tX_jack_client::error(const char *desc)
 
 int tX_jack_client::srate(jack_nframes_t nframes, void *arg)
 {
-       tX_error("tX_jack_client::srate() jack changed samplerate -> this is bad, stopping audio.");
+       tX_error("tX_jack_client::srate() jack changed samplerate - ignored.");
        return 0;
 }
 
 void tX_jack_client::shutdown(void *arg)
 {
-       /***AARGH how to handle this?***/
+       tX_error("tX_jack_client::shutdown() jack daemon has shut down. Bad!");
+       if (instance) instance->jack_shutdown=true;
 }
 
 int tX_jack_client::process(jack_nframes_t nframes, void *arg)
@@ -495,14 +496,12 @@ void tX_audiodevice_jack::play(int16_t *buffer)
 
 void tX_audiodevice_jack::start()
 {
-       tX_debug("activating jack playback");
        overrun_buffer=new f_prec[vtt_class::samples_in_mix_buffer];
        
        client->set_device(this);
-       while (!engine->is_stopped()) {
+       while ((!engine->is_stopped()) && !(client->get_jack_shutdown())) {
                usleep(100);
        }       
-       tX_debug("stopping jack playback");     
        client->set_device(NULL);
        
        delete [] overrun_buffer;
index 82f2e9850e30b1277de0d77e43b4ebeb3a041dc1..6330ed549c683e06d158264c0f62f22e489dc5ee 100644 (file)
@@ -136,7 +136,7 @@ class tX_jack_client
        ~tX_jack_client();
        
        private:
-       tX_jack_client();
+       tX_jack_client();       
        static tX_jack_client *instance;
        static void error(const char *desc);
        static int srate(jack_nframes_t nframes, void *arg);
@@ -147,10 +147,12 @@ class tX_jack_client
        tX_audiodevice_jack *device;
        jack_port_t *left_port;
        jack_port_t *right_port;
+       bool jack_shutdown;
        int play(jack_nframes_t nframes);
        
        public:
        int get_sample_rate();
+       bool get_jack_shutdown() { return jack_shutdown; }
        void set_device(tX_audiodevice_jack *dev) { device=dev; }
 };
 
index 15f54436f0e0f0955f6178fbbaf5ebc8fb007299..3eee3754c05e9d79e2dbf0a29965b95aa680788d 100644 (file)
 #include "tX_vtt.h"
 #include <dirent.h>
 
+#ifdef USE_JACK
+extern void jack_check();
+#endif
+
 extern char *logo_xpm[];
 GtkWidget *opt_dialog;
 int opt_hidden=0;
@@ -150,6 +154,10 @@ void apply_options(GtkWidget *dialog) {
        gtk_widget_queue_draw(main_flash_l);
        gtk_tx_flash_update_colors(GTK_TX_FLASH(main_flash_r));
        gtk_widget_queue_draw(main_flash_r);
+       
+#ifdef USE_JACK
+       jack_check();
+#endif 
 }
 
 
index 79a1417f09cb3ad262d9f97889bda3fdffe9f828..db22059dfd21b343b4281007acc18375c5211148 100644 (file)
@@ -131,9 +131,6 @@ void set_global_defaults() {
 #endif         
        globals.use_stdout_cmdline=0;
        strcpy(globals.current_path, "");
-       globals.pitch=1.0;
-       globals.volume=1.0;
-       
        strcpy(globals.lrdf_path, "/usr/share/ladspa/rdf:/usr/local/share/ladspa/rdf");
        globals.fullscreen_enabled=0;
        globals.confirm_events=0;
@@ -141,7 +138,7 @@ void set_global_defaults() {
        
        globals.vtt_inertia=10.0;
        
-       globals.alsa_free_hwstats=1;
+       globals.alsa_free_hwstats=0;
        globals.filename_length=20;
        globals.restore_midi_connections=1;
        
index 146b288664cddfd708ba2bd5116f823b8b5cd419..b31ac6548b10de9ad6d95fcedf9379fd0ebc1ffd 100644 (file)
@@ -560,7 +560,7 @@ GtkSignalFunc save_tables()
 
 GtkSignalFunc master_volume_changed (GtkWidget *wid, void *d)
 {
-       sp_master_volume.receive_gui_value((float) 2.0-GTK_ADJUSTMENT(wid)->value);
+       sp_master_volume.receive_gui_value((float) GTK_ADJUSTMENT(wid)->value);
        return NULL;    
 }
 
@@ -570,12 +570,6 @@ GtkSignalFunc master_pitch_changed(GtkWidget *wid, void *d)
        return NULL;    
 }
 
-GtkSignalFunc saturate_changed(GtkWidget *w, void *d)
-{
-       vtt_class::enable_saturate (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)));
-       return NULL;    
-}
-
 void mg_enable_critical_buttons(int enable)
 {
        gtk_widget_set_sensitive(seq_rec_btn, enable);
@@ -1357,7 +1351,7 @@ void create_mastergui(int x, int y)
 
        connect_adj(dumadj, master_volume_changed, NULL);       
        dummy=gtk_vscale_new(dumadj);
-       //gtk_range_set_inverted(GTK_RANGE(dummy), TRUE);
+       gtk_range_set_inverted(GTK_RANGE(dummy), TRUE);
        gtk_scale_set_draw_value(GTK_SCALE(dummy), False);
        gtk_signal_connect(GTK_OBJECT(dummy), "button_press_event", (GtkSignalFunc) tX_seqpar::tX_seqpar_press, &sp_master_volume);     
        
index 242c32a4ca5e244159a4b087d14c79e2b1b76696..6aa96be2eda1e423b14d612580450afc4eec31b1 100644 (file)
@@ -423,7 +423,7 @@ void tX_seqpar_master_volume :: do_exec(const float value)
 
 void tX_seqpar_master_volume :: do_update_graphics ()
 {
-       gtk_adjustment_set_value(volume_adj, 2.0-vtt_class::master_volume);
+       gtk_adjustment_set_value(volume_adj, vtt_class::master_volume);
 }
 
 const char * tX_seqpar_master_volume :: get_name()
index ca40c47471fd32188006f28613249736730b8fdb..ecd898d015970e124713295efc3e79de88b9f713 100644 (file)
@@ -83,8 +83,7 @@ int vtt_class::samples_in_mix_buffer=0;
 pthread_mutex_t vtt_class::render_lock=PTHREAD_MUTEX_INITIALIZER;
 f_prec vtt_class::master_volume=1.0;
 f_prec vtt_class::res_master_volume=1.0;
-f_prec vtt_class::saturate_fac=0.1;
-int vtt_class::do_saturate=0;
+
 vtt_class * vtt_class::sync_master=NULL;
 int vtt_class::master_triggered=0;
 int vtt_class::master_triggered_at=0;
@@ -1177,11 +1176,6 @@ void vtt_class :: set_master_pitch(f_prec new_pitch)
        }
 }
 
-void vtt_class :: enable_saturate (int newstate)
-{
-       do_saturate=newstate;
-}
-
 void vtt_class :: focus_no(int no)
 {
        list <vtt_class *> :: iterator vtt;
index b820d430037b8bf19564028e654c5b7d1677a30c..a64b6b23179c9631ae391b32a30da8097019a166 100644 (file)
@@ -71,9 +71,6 @@ class vtt_class
        static f_prec res_master_volume;
        static f_prec vol_channel_adjust;
 
-       static f_prec saturate_fac;
-       static int do_saturate; 
-       
        static vtt_class * sync_master;
        static int master_triggered;
        static int master_triggered_at;
@@ -270,7 +267,6 @@ class vtt_class
        static int set_mix_buffer_size(int);
        static void set_master_volume(f_prec);
        static void set_master_pitch(f_prec);
-       static void enable_saturate(int);
        static void focus_no(int);
        static void focus_next();
        static void unfocus();