<title>Grab Mode Operation</title>
<para>After pressing the <emphasis>Mouse Grab button</emphasis>
- terminatorX enters "grab mode". This mode actually locks the
- mouse (as this input is now used to control the real time parameters)
+ terminatorX enters "grab mode". This mode actually blocks the
+ mouse (as its input is now used to control the real time parameters)
and therefore you'll have to know some mouse/keyboard shortcuts to
control the software without the GUI.</para>
<para>Now the turntable that has the focus is the one you will
manipulate with your mouse and keyboard inputs: Note that you can
actually map different functions to the mouse x/y axis - so what
- actually happens when you move your mouse depends on what you select on
- the x/y control panels for each turntable.</para>
+ actually happens when you move your mouse depends on what you select via the
+ <emphasis>Mouse Mapping</emphasis> for each turntable.</para>
<table>
<title>Keyboard Controls in Grab Mode</title>
sscanf(globals.alsa_device, "%i-%i: %s", &card, &device, foo);
sprintf(pcm_name, "hw:%i,%i", card, device);
- if (snd_pcm_open(&pcm_handle, pcm_name, stream, 0) < 0) {
+ if (snd_pcm_open(&pcm_handle, pcm_name, stream, SND_PCM_NONBLOCK) < 0) {
tX_error("ALSA: Failed to access PCM device \"%s\"", pcm_name);
snd_pcm_hw_params_free (hw_params);
return -1;
}
snd_pcm_hw_params_free (hw_params);
- return 0;
+ return snd_pcm_prepare(pcm_handle);
}
int tX_audiodevice_alsa :: close()
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_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\" or drop-outs). 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_entry_set_text(GTK_ENTRY(GTK_COMBO(lookup_widget(dialog, "alsa_audio_device"))->entry), globals.alsa_device);
gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "alsa_buffer_time")), globals.alsa_buffer_time/1000);
+ gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "alsa_buffer_time"), "Sets the size of the ALSA ring buffer. On slower systems you might have to increase this value (if you hear \"clicks\" or drop-outs). Lower values mean lower latency though.", NULL);
gtk_range_set_value(GTK_RANGE(lookup_widget(dialog, "alsa_period_time")), globals.alsa_period_time/1000);
+ gtk_tooltips_set_tip(tooltips, lookup_widget(dialog, "alsa_period_time"), "The ALSA period time determines how much audio data will be written to the device at once. It is recommended to set this value to a half or a third of the ALSA buffer time.", NULL);
gtk_combo_set_popdown_strings(GTK_COMBO(lookup_widget(dialog, "alsa_samplerate")), get_sampling_rates_list());
sprintf(tmp, "%i", globals.alsa_samplerate);
tX_debug("tX_engine::stop() - waiting for loop to stop.");
while (loop_is_active) {
+ /* Due to gtk+ signal handling this can cause a deadlock
+ on the seqpars' update list. So we need to handle events
+ while waiting...
+ */
+ while (gtk_events_pending()) gtk_main_iteration();
usleep(50);
}
#define add_widget_fix(wid); gtk_box_pack_start(GTK_BOX(vbox), wid, WID_FIX);\
gtk_widget_show(wid);
-#define gtk_flush(); while (gtk_events_pending()) gtk_main_iteration(); gdk_flush();
+#define gtk_flush(); { int ctr=0; while (gtk_events_pending()) { ctr++; if (ctr>5) break; gtk_main_iteration(); gdk_flush(); }}
int ld_create_loaddlg(int mode, int count)
if (progress!=ld_old_prog)
{
gtk_progress_bar_update(GTK_PROGRESS_BAR(ld_single_p), progress);
+
gtk_flush();
}
GtkWidget *control_parent;
GtkWidget *audio_parent;
GtkWidget *main_window;
-GtkWidget *wav_progress;
GtkWidget *grab_button;
GtkWidget *main_flash_l;
GtkWidget *main_flash_r;
gfloat old_percent=-1;
-void wav_progress_update(gfloat percent)
-{
- percent=floor(percent*10.0)/10.0; //Updating statusbars with gtk-themes eats up hell of a lot CPU-time
- // which is why we update every 10% only.
-
- if (wav_progress)
- {
- if (old_percent != percent)
- {
- old_percent = percent;
- gtk_progress_bar_update(GTK_PROGRESS_BAR(wav_progress), percent);
- while (gtk_events_pending()) gtk_main_iteration();
- }
- }
-
-}
-
void note_destroy(GtkWidget *widget, GtkWidget *mbox)
{
gtk_widget_destroy(GTK_WIDGET(mbox));
delete effect;
}
+ if (sync_master==this) {
+ sync_master=NULL;
+ }
+
delete_gui(this);
}
g->mouse_mapping=gtk_button_new_with_label("Mouse Mapping");
gtk_widget_show(g->mouse_mapping);
gui_set_tooltip(g->mouse_mapping, "Determines what parameters should be affected on mouse moition in mouse grab mode.");
- gtk_box_pack_start(GTK_BOX(tempbox), g->mouse_mapping, WID_DYN);
+ gtk_box_pack_start(GTK_BOX(tempbox2), g->mouse_mapping, WID_FIX);
#ifdef USE_ALSA_MIDI_IN
g->midi_mapping=gtk_button_new_with_label("MIDI Mapping");
gtk_widget_show(g->midi_mapping);
gui_set_tooltip(g->midi_mapping, "Determines what parameters should be bound to what MIDI events.");
- gtk_box_pack_start(GTK_BOX(tempbox), g->midi_mapping, WID_DYN);
+ gtk_box_pack_start(GTK_BOX(tempbox2), g->midi_mapping, WID_FIX);
if (!tX_engine::get_instance()->get_midi()->get_is_open()) {
gtk_widget_set_sensitive(g->midi_mapping, FALSE);
Source: %{name}-%{version}.tar.gz
Buildroot: %{_tmppath}/%{name}-%{version}-root
Requires: gtk2, libvorbis, audiofile, libxml2
-BuildPrereq: gtk2-devel, libvorbis-devel, audiofile-devel, libxml2-devel, libmad
+BuildPrereq: gtk2-devel, libvorbis-devel, audiofile-devel, libxml2-devel, zlib-devel, scrollkeeper
%description
terminatorX is a realtime audio synthesizer that allows you to "scratch" on
%{_datadir}/pixmaps/terminatorX-app.png
%{_datadir}/pixmaps/terminatorX-mime.png
%{_datadir}/gnome/apps/Multimedia/terminatorX.desktop
-%{_datadir}/omf/scrollkeeper-example2
-%{_datadir}/scrollkeeper-example2
+%{_datadir}/omf/terminatorX
+%{_datadir}/terminatorX
%post
if which scrollkeeper-update>/dev/null 2>&1; then scrollkeeper-update -q -o %{_datadir}/omf/terminatorX; fi