Fixing things - Alex
authorterminatorX <>
Wed, 9 Apr 2003 19:25:44 +0000 (19:25 +0000)
committerterminatorX <>
Wed, 9 Apr 2003 19:25:44 +0000 (19:25 +0000)
doc/terminatorX-manual/C/terminatorX-manual.xml
src/tX_dialog.cc
src/tX_glade_callbacks.cc
src/tX_glade_callbacks.h
src/tX_glade_interface.cc
src/tX_global.c
terminatorX.glade

index 7991591e7fcf7cb75dbe48e5af11a4f882546cc6..0190996225d4c683e0f10e7bac7fca27b9629e2e 100644 (file)
     <sect2 id="WHATITIS">
       <title>What it is</title>
 
     <sect2 id="WHATITIS">
       <title>What it is</title>
 
-      <para><application moreinfo="none">terminatorX</application> is a real
-      time audio synthesizer that allows you to &#34;scratch&#34; on digitally
-      sampled audio data (*.wav, *.au, *.mp3, *.ogg etc.) the way Hiphop DJs
-      scratch on vinyl records. It features multiple turntables, real time
-      effects (built-in as well as LADSPA plugin effects), a sequencer and an
-      easy-to-use gtk+ GUI.</para>
+      <para>terminatorX is a realtime audio synthesizer that allows you to
+      &#34;scratch&#34; on digitally sampled audio data (*.wav, *.au, *.ogg,
+      *.mp3, etc.) the way hiphop-DJs scratch on vinyl records. It features
+      multiple turntables, realtime effects (buit-in as well as <ulink
+      url="http://www.ladspa.org">LADSPA</ulink> plugin effects), a sequencer
+      and MIDI interface - all accessible through an easy-to-use gtk+ GUI.</para>
 
       <para>This is <emphasis>beta</emphasis> Software please help me fix
       bugs. See <xref linkend="CONTACT" /> (Contact/Download). Please read
 
       <para>This is <emphasis>beta</emphasis> Software please help me fix
       bugs. See <xref linkend="CONTACT" /> (Contact/Download). Please read
                   for loading ogg files.</para>
                 </listitem>
 
                   for loading ogg files.</para>
                 </listitem>
 
+                <listitem>
+                  <para><ulink url="http://xmlsoft.org/">libxml2</ulink> to
+                  read terminatorX set and rc files</para>
+                </listitem>
+
+                <listitem>
+                  <para><ulink url="http://www.gzip.org/zlib/">zlib</ulink> to
+                  create compressed XML set files to save diskspaces</para>
+                </listitem>
+
                 <listitem>
                   <para><ulink url="http://www.68k.org/~michael/audiofile/">libaudiofile</ulink>
                   for loading misc other audio files.</para>
                 <listitem>
                   <para><ulink url="http://www.68k.org/~michael/audiofile/">libaudiofile</ulink>
                   for loading misc other audio files.</para>
         <listitem>
           <para><emphasis>Sequencer Play / Record / Stop</emphasis></para>
 
         <listitem>
           <para><emphasis>Sequencer Play / Record / Stop</emphasis></para>
 
-          <para>Please read the Sequencer-Section to find out more about the
-          sequencer.</para>
+          <para>Please read the <link linkend="SEQUENCER">sequencer</link>
+          section to find out more about the sequencer.</para>
         </listitem>
 
         <listitem>
         </listitem>
 
         <listitem>
               setup. Note that all sequencer events recorded for this
               turntable will be erased, too.</para>
             </listitem>
               setup. Note that all sequencer events recorded for this
               turntable will be erased, too.</para>
             </listitem>
+
+            <listitem>
+              <para><emphasis>Pitch Adj. Button</emphasis></para>
+
+              <para>Using two (or more) loops and terminatorX&#39;
+              synchronization facility usually requires adjusting the pitch of
+              the loops so that the turntables play in sync. For precisely cut
+              loops this usually means making them run equally fast or one
+              running twice as fast as the other etc. Manually finding the
+              necessary pitch values usually consumes a significant amount of
+              time so the feature <emphasis>Pitch Adjust</emphasis> helps
+              speeding up this process.</para>
+
+              <para>Clicking this button will cause the <emphasis>Compute
+              Pitch</emphasis> dialog to pop up. With this dialog it is
+              possible to specify how many loops of this turntable should be
+              played as fast as a certain amount of loops of the master
+              turntable. After pressing the <emphasis>Ok</emphasis> button
+              terminatorX will adjust the turntable&#39;s ptich accordingly in
+              order to match the given playback speed requirements.</para>
+
+              <para>Note that this feature is proabably useless when loading
+              complete songs into terminatorX - it&#39;s intended for use with
+              precisely cut loops.</para>
+            </listitem>
           </itemizedlist>
         </sect4>
 
           </itemizedlist>
         </sect4>
 
       <emphasis>Buffer Time</emphasis> option lets you set the size for the
       complete ring buffer, while the <emphasis>Period Time</emphasis>
       determines how many audio samples will be transferred to the audio
       <emphasis>Buffer Time</emphasis> option lets you set the size for the
       complete ring buffer, while the <emphasis>Period Time</emphasis>
       determines how many audio samples will be transferred to the audio
-      device per cycle.</para>
+      device per cycle. I&#39;m not really sure on what kind of settings to
+      recommend, however I had best results when setting the
+      <emphasis>Period Time</emphasis> to 3rd or half of the
+      <emphasis>Buffer Time</emphasis>. </para>
 
       <para>It&#39;s advisable to set the <emphasis>Buffer Time</emphasis> to
       at least the double of the <emphasis>Period Time</emphasis>, but for a
 
       <para>It&#39;s advisable to set the <emphasis>Buffer Time</emphasis> to
       at least the double of the <emphasis>Period Time</emphasis>, but for a
index d3445a2208b7f44958211e0e30b54c9702e963b8..604b965308cc4ef2733ae231590dd0ba50daab3e 100644 (file)
@@ -250,6 +250,8 @@ GList *get_xinput_devices_list() {
 }
 
 void init_tx_options(GtkWidget *dialog) {
 }
 
 void init_tx_options(GtkWidget *dialog) {
+       GtkTooltips *tooltips=GTK_TOOLTIPS(lookup_widget(dialog, "tooltips"));
+       
        /* Audio */
        switch (globals.audiodevice_type) {             
                case ALSA: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "alsa_driver")), 1);
        /* Audio */
        switch (globals.audiodevice_type) {             
                case ALSA: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "alsa_driver")), 1);
@@ -286,7 +288,7 @@ void init_tx_options(GtkWidget *dialog) {
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(lookup_widget(dialog, "oss_buffers")), globals.oss_buff_no);
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "oss_buffersize")), globals.oss_buff_size);
 
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(lookup_widget(dialog, "oss_buffers")), globals.oss_buff_no);
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "oss_buffersize")), globals.oss_buff_size);
-
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "oss_buffersize"), "Set the size of the kernel level audio buffers. On slower systems you might have to increase this value (if you hear \"clicks\"). Lower values mean lower latency though.", NULL);     
        gtk_combo_set_popdown_strings(GTK_COMBO(lookup_widget(dialog, "oss_samplerate")), get_sampling_rates_list());
        char tmp[32];
        sprintf(tmp, "%i", globals.oss_samplerate);
        gtk_combo_set_popdown_strings(GTK_COMBO(lookup_widget(dialog, "oss_samplerate")), get_sampling_rates_list());
        char tmp[32];
        sprintf(tmp, "%i", globals.oss_samplerate);
@@ -317,7 +319,10 @@ void init_tx_options(GtkWidget *dialog) {
        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(lookup_widget(dialog, "xinput_device"))->entry), globals.xinput_device);
 
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "mouse_speed")), globals.mouse_speed);
        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(lookup_widget(dialog, "xinput_device"))->entry), globals.xinput_device);
 
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "mouse_speed")), globals.mouse_speed);
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "mouse_speed"), "The speed of your mouse in scratch mode. Use negative values to invert motion.", NULL);
+       
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "stop_sense_cycles")), globals.sense_cycles);
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "stop_sense_cycles")), globals.sense_cycles);
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "stop_sense_cycles"),"If there is no \"motion-event\" for x cycles, where x is the number of cycles you select here, terminatorX assumes mouse motion has stopped. For smaller buffer sizes (=> shorter cycle times) you might have to increase this value", NULL);        
        
        /* User Interface */ 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "startup_nagbox")), globals.show_nag);
        
        /* User Interface */ 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "startup_nagbox")), globals.show_nag);
@@ -338,8 +343,11 @@ void init_tx_options(GtkWidget *dialog) {
        }
        
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "update_delay")), globals.update_delay);
        }
        
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "update_delay")), globals.update_delay);
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "update_delay"), "How often to update the slow widgets.", NULL);   
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "update_idle")), globals.update_idle);
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "update_idle")), globals.update_idle);
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "update_idle"), "The update thread will idle for the selcted amount of milliseconds. If you want to have a more responsive display update increase this value - if you have performance problems reduce this value.", NULL);       
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "vumeter_decay")), globals.flash_response);
        gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "vumeter_decay")), globals.flash_response);
+       gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "vumeter_decay"), "Defines how fast the maximum values of the VU meters should be decayed.", NULL);        
 
        /* Misc */
        gtk_entry_set_text(GTK_ENTRY(lookup_widget(dialog, "soundfile_editor")), globals.file_editor);
 
        /* Misc */
        gtk_entry_set_text(GTK_ENTRY(lookup_widget(dialog, "soundfile_editor")), globals.file_editor);
@@ -356,15 +364,6 @@ void create_options()
        gtk_widget_show(opt_dialog);
 }
 
        gtk_widget_show(opt_dialog);
 }
 
-/* void create_options()
-{
-       // gtk_tooltips_set_tip(opt_tips, buff_size_slider, "Sets the size of the kernel level audio buffers. On slower systems you might have to increase this value (if you hear \"clicks\"). Lower values mean lower latency though.", NULL);
-       // gtk_tooltips_set_tip(opt_tips, mouse_speed_slider, "The speed of your mouse in scratch mode. Use negative values to invert motion.", NULL);
-       // gtk_tooltips_set_tip(opt_tips, sense_cycles_slider, "If there is no \"motion-event\" for x cycles, where x is the number of cycles you select here, terminatorX assumes mouse motion has stopped. For smaller buffer sizes (=> shorter cycle times) you might have to increase this value", NULL);
-       // gtk_tooltips_set_tip(opt_tips,       update_idle_slider, "The update thread will idle for the selcted amount of milliseconds. If you want to have a more responsive display update increase this value - if you have performance problems reduce this value.", NULL);
-       // gtk_tooltips_set_tip(opt_tips,       update_delay_slider, "How often to update the slow widgets.", NULL);
-} */
-
 void display_options()
 {
        if (opt_dialog) {
 void display_options()
 {
        if (opt_dialog) {
index e7a334ab8b9645882070504bc72b4e5c4fc4c7a1..a0457009e35d2be60dda88d5a3f24da5f4ed7067 100644 (file)
@@ -8,6 +8,7 @@
 #include "tX_glade_interface.h"
 #include "tX_glade_support.h"
 #include "tX_dialog.h"
 #include "tX_glade_interface.h"
 #include "tX_glade_support.h"
 #include "tX_dialog.h"
+#include "tX_global.h"
 
 void
 on_pref_cancel_clicked                 (GtkButton       *button,
 
 void
 on_pref_cancel_clicked                 (GtkButton       *button,
@@ -41,3 +42,14 @@ on_tx_options_destroy                  (GtkObject       *object,
        opt_dialog=NULL;
 }
 
        opt_dialog=NULL;
 }
 
+
+void
+on_alsa_buffer_time_value_changed      (GtkRange        *range,
+                                        gpointer         user_data)
+{
+       GtkAdjustment *buffer_time=gtk_range_get_adjustment(GTK_RANGE(user_data));
+       GtkAdjustment *period_time=gtk_range_get_adjustment(GTK_RANGE(range));
+
+       period_time->upper=buffer_time->value;
+       gtk_adjustment_changed(period_time);
+}
index 8187d192fec1cd01014eff0d1321d1bd4824703b..4eb81d6ca10d1c12c304e143fb2d3f4f8f9b2dcc 100644 (file)
@@ -16,3 +16,7 @@ on_pref_ok_clicked                     (GtkButton       *button,
 void
 on_tx_options_destroy                  (GtkObject       *object,
                                         gpointer         user_data);
 void
 on_tx_options_destroy                  (GtkObject       *object,
                                         gpointer         user_data);
+
+void
+on_alsa_buffer_time_value_changed      (GtkRange        *range,
+                                        gpointer         user_data);
index 9a676555d99a59c37cdc90e348a25b7cbf4bb120..5877bf659c9a2a88bdf265be8cf7e8b82fb82202 100644 (file)
@@ -617,6 +617,9 @@ create_tx_options (void)
   g_signal_connect ((gpointer) tx_options, "destroy",
                     G_CALLBACK (on_tx_options_destroy),
                     NULL);
   g_signal_connect ((gpointer) tx_options, "destroy",
                     G_CALLBACK (on_tx_options_destroy),
                     NULL);
+  g_signal_connect_swapped ((gpointer) alsa_buffer_time, "value_changed",
+                            G_CALLBACK (on_alsa_buffer_time_value_changed),
+                            GTK_OBJECT (alsa_period_time));
   g_signal_connect ((gpointer) pref_cancel, "clicked",
                     G_CALLBACK (on_pref_cancel_clicked),
                     NULL);
   g_signal_connect ((gpointer) pref_cancel, "clicked",
                     G_CALLBACK (on_pref_cancel_clicked),
                     NULL);
index bc7bd9d605829e82ad2a7f1ebdc29bee237c1c64..de281dab24a8cc87a743bb1aacdff320b837121a 100644 (file)
@@ -73,7 +73,7 @@ void set_global_defaults() {
        strcpy(globals.xinput_device, "");
        globals.xinput_enable=0;
        
        strcpy(globals.xinput_device, "");
        globals.xinput_enable=0;
        
-       globals.update_idle=18;
+       globals.update_idle=14;
        globals.update_delay=1;
        
        strcpy(globals.oss_device, "/dev/dsp");
        globals.update_delay=1;
        
        strcpy(globals.oss_device, "/dev/dsp");
@@ -86,7 +86,7 @@ void set_global_defaults() {
        globals.alsa_period_time=5000;
        globals.alsa_samplerate=44100;
        
        globals.alsa_period_time=5000;
        globals.alsa_samplerate=44100;
        
-       globals.sense_cycles=12;
+       globals.sense_cycles=80;
        
        globals.mouse_speed=0.8;
        
        
        globals.mouse_speed=0.8;
        
@@ -359,4 +359,3 @@ char *decode_xml(char *dest, const char *src) {
        
        return dest;
 }
        
        return dest;
 }
-       
index befcd866c078fbdc4691a1fe2fd06ce444bbf684..58271841ebedd0d8475a83e37881a5c585aedf19 100644 (file)
                  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
                  <property name="inverted">False</property>
                  <property name="adjustment">50 10 500 1 10 10</property>
                  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
                  <property name="inverted">False</property>
                  <property name="adjustment">50 10 500 1 10 10</property>
+                 <signal name="value_changed" handler="on_alsa_buffer_time_value_changed" object="alsa_period_time" last_modification_time="Tue, 08 Apr 2003 20:22:15 GMT"/>
                </widget>
                <packing>
                  <property name="left_attach">1</property>
                </widget>
                <packing>
                  <property name="left_attach">1</property>