2
terminatorX - realtime audio scratching software
3
Copyright (C) 1999, 2000 Alexander K�nig
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or
8
(at your option) any later version.
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
GNU General Public License for more details.
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
Description: Header to tX_seqpar.cc
27
#include "tX_extdial.h"
28
#include "tX_midiin.h"
29
#include "tX_global.h"
32
#define _tx_seqpar_h 1
34
#define NO_MOUSE_MAPPING 0
35
#define MOUSE_MAPPING_OK 1
37
#include <libxml/xmlmemory.h>
38
#include <libxml/parser.h>
40
/* required for gcc>=3.0 */
46
static list <tX_seqpar *> all;
47
void *vtt; /* have to make this void as tX_vtt.h includes this */
49
tX_midievent bound_midi_event;
52
static list <tX_seqpar *> update;
53
static pthread_mutex_t update_lock;
60
guint32 persistence_id;
61
guint32 touch_timestamp;
62
void *last_event_recorded;
65
/* default constructor */
67
/* to initialize with a vtt
69
/* to initialize with mapping settings */
70
/* tX_seqpar(float max, float min, float scale, int mappable); */
71
/* to initialize with mapping settings AND a vtt
72
tX_seqpar (void *mytt, float max, float min, float scale, int mappable); */
74
virtual float get_value();
75
void set_mapping_parameters(float max, float min, float scale, int mappable);
79
int is_touched() {return touched;}
80
int is_untouched() {return !touched;}
82
void do_touch(); /* can't be inline as requires tX_sequencer.h */
83
void touch() { if (!touched) do_touch();}
84
void untouch() { touched=0; last_event_recorded=NULL; }
86
static void untouch_all();
88
int is_gui_active() { return gui_active; }
89
guint32 get_touch_timestamp() { return touch_timestamp; }
91
static void create_persistence_ids();
92
guint32 get_persistence_id() { return persistence_id; }
93
void set_persistence_id(guint32 pid) { persistence_id=pid; }
94
static tX_seqpar *get_sp_by_persistence_id(unsigned int pid);
96
void record_value (const float value);
97
virtual void do_exec(const float value)=NULL;
98
virtual void exec_value(const float value)=NULL;
99
virtual void do_update_graphics()=NULL;
100
void update_graphics();
101
static void update_all_graphics();
102
static void init_all_graphics();
104
/* slot for gui actions */
105
void receive_gui_value(const float value);
107
/* slot for fastforwarding (no effect for vtt) */
108
virtual void receive_forward_value(const float value);
110
/* slot for mouse and keyboard actions (updating graphics) */
111
virtual void handle_mouse_input(float adjustment);
112
void receive_input_value(const float value);
113
#ifdef USE_ALSA_MIDI_IN
114
virtual void handle_midi_input( const tX_midievent& );
118
static void materialize_forward_values();
120
/* info functions for the editor */
121
char *get_vtt_name();
122
virtual const char *get_name();
124
/* For Mouse and MIDI Mapping */
130
bool midi_upper_bound_set;
131
double midi_upper_bound;
133
bool midi_lower_bound_set;
134
double midi_lower_bound;
140
void restore_meta(xmlNodePtr node);
141
void store_meta(FILE *rc, gzFile rz);
143
void set_upper_midi_bound(double val) {
144
midi_upper_bound=val;
145
midi_upper_bound_set=true;
148
void reset_upper_midi_bound() { midi_upper_bound_set=false; }
150
void set_lower_midi_bound(double val) {
151
midi_lower_bound=val;
152
midi_lower_bound_set=true;
155
void reset_lower_midi_bound() { midi_lower_bound_set=false; }
157
static gboolean tX_seqpar_press(GtkWidget *widget, GdkEventButton *event, gpointer data);
159
#ifdef USE_ALSA_MIDI_IN
160
static gboolean remove_midi_binding(GtkWidget *widget, gpointer data);
161
static gboolean learn_midi_binding(GtkWidget *widget, gpointer data);
163
static gboolean set_midi_upper_bound(GtkWidget *widget, gpointer data);
164
static gboolean reset_midi_upper_bound(GtkWidget *widget, gpointer data);
166
static gboolean set_midi_lower_bound(GtkWidget *widget, gpointer data);
167
static gboolean reset_midi_lower_bound(GtkWidget *widget, gpointer data);
171
class tX_seqpar_update : public tX_seqpar
174
virtual void exec_value(const float value);
177
class tX_seqpar_no_update : public tX_seqpar
179
virtual void do_update_graphics();
180
virtual void exec_value(const float value);
183
class tX_seqpar_update_active_forward : public tX_seqpar_update
185
virtual void receive_forward_value(const float value);
188
class tX_seqpar_no_update_active_forward : public tX_seqpar_no_update
190
virtual void receive_forward_value(const float value);
193
/* now the classes for *real* sequenceable parameters */
195
class tX_seqpar_master_volume : public tX_seqpar_update
198
tX_seqpar_master_volume();
199
virtual void do_exec(const float value);
200
virtual void do_update_graphics();
202
virtual const char *get_name();
205
class tX_seqpar_master_pitch : public tX_seqpar_update_active_forward
208
tX_seqpar_master_pitch();
209
virtual void do_exec(const float value);
210
virtual void do_update_graphics();
212
virtual const char *get_name();
215
class tX_seqpar_vtt_speed : public tX_seqpar_no_update_active_forward
218
tX_seqpar_vtt_speed();
219
virtual void handle_mouse_input(float adjustment);
221
virtual void do_exec(const float value);
222
virtual const char *get_name();
225
class tX_seqpar_spin : public tX_seqpar_no_update_active_forward
230
virtual void do_exec(const float value);
231
virtual const char *get_name();
234
class tX_seqpar_vtt_volume : public tX_seqpar_update
237
tX_seqpar_vtt_volume();
238
virtual float get_value();
240
virtual void do_exec(const float value);
241
virtual void do_update_graphics();
242
virtual const char *get_name();
245
class tX_seqpar_vtt_pan : public tX_seqpar_update
249
virtual float get_value();
251
virtual void do_exec(const float value);
252
virtual void do_update_graphics();
253
virtual const char *get_name();
256
class tX_seqpar_vtt_pitch : public tX_seqpar_update_active_forward
259
tX_seqpar_vtt_pitch();
260
virtual float get_value();
261
virtual void do_exec(const float value);
263
virtual void do_update_graphics();
264
virtual const char *get_name();
267
class tX_seqpar_vtt_trigger : public tX_seqpar_no_update_active_forward
270
tX_seqpar_vtt_trigger();
272
virtual void do_exec(const float value);
273
virtual const char *get_name();
276
class tX_seqpar_vtt_loop : public tX_seqpar_update
279
tX_seqpar_vtt_loop();
281
virtual void do_exec(const float value);
282
virtual void do_update_graphics();
283
virtual const char *get_name();
286
class tX_seqpar_vtt_sync_client : public tX_seqpar_update
289
tX_seqpar_vtt_sync_client();
291
virtual void do_exec(const float value);
292
virtual void do_update_graphics();
293
virtual const char *get_name();
296
class tX_seqpar_vtt_sync_cycles : public tX_seqpar_update
299
tX_seqpar_vtt_sync_cycles();
301
virtual void do_exec(const float value);
302
virtual void do_update_graphics();
303
virtual const char *get_name();
306
class tX_seqpar_vtt_lp_enable : public tX_seqpar_update
309
tX_seqpar_vtt_lp_enable();
311
virtual void do_exec(const float value);
312
virtual void do_update_graphics();
313
virtual const char *get_name();
316
class tX_seqpar_vtt_lp_gain : public tX_seqpar_update
319
tX_seqpar_vtt_lp_gain();
320
virtual float get_value();
322
virtual void do_exec(const float value);
323
virtual void do_update_graphics();
324
virtual const char *get_name();
327
class tX_seqpar_vtt_lp_reso : public tX_seqpar_update
330
tX_seqpar_vtt_lp_reso();
331
virtual float get_value();
333
virtual void do_exec(const float value);
334
virtual void do_update_graphics();
335
virtual const char *get_name();
338
class tX_seqpar_vtt_lp_freq : public tX_seqpar_update
341
virtual float get_value();
342
tX_seqpar_vtt_lp_freq();
344
virtual void do_exec(const float value);
345
virtual void do_update_graphics();
346
virtual const char *get_name();
349
class tX_seqpar_vtt_ec_enable : public tX_seqpar_update
352
tX_seqpar_vtt_ec_enable();
354
virtual void do_exec(const float value);
355
virtual void do_update_graphics();
356
virtual const char *get_name();
359
class tX_seqpar_vtt_ec_length : public tX_seqpar_update
362
tX_seqpar_vtt_ec_length();
363
virtual float get_value();
365
virtual void do_exec(const float value);
366
virtual void do_update_graphics();
367
virtual const char *get_name();
370
class tX_seqpar_vtt_ec_feedback : public tX_seqpar_update
373
tX_seqpar_vtt_ec_feedback();
374
virtual float get_value();
376
virtual void do_exec(const float value);
377
virtual void do_update_graphics();
378
virtual const char *get_name();
381
class tX_seqpar_vtt_ec_pan : public tX_seqpar_update
384
tX_seqpar_vtt_ec_pan();
385
virtual float get_value();
387
virtual void do_exec(const float value);
388
virtual void do_update_graphics();
389
virtual const char *get_name();
392
class tX_seqpar_vtt_ec_volume : public tX_seqpar_update
395
tX_seqpar_vtt_ec_volume();
396
virtual float get_value();
398
virtual void do_exec(const float value);
399
virtual void do_update_graphics();
400
virtual const char *get_name();
403
class tX_seqpar_vtt_mute : public tX_seqpar_no_update
406
tX_seqpar_vtt_mute();
408
virtual void do_exec(const float value);
409
virtual const char *get_name();
412
/* Seqpars for the LADSPA Plugins */
414
class tX_seqpar_vttfx : public tX_seqpar_update
416
/* fx_value will be malloc()ed by constructor */
419
char label_name[2048];
425
virtual ~tX_seqpar_vttfx();
426
void set_name(const char *, const char *);
427
GtkWidget *get_widget() { return widget; }
429
virtual float get_value();
430
float *get_value_ptr() { return fx_value; }
433
virtual void create_widget();
436
virtual const char *get_name();
439
class tX_seqpar_vttfx_float : public tX_seqpar_vttfx
443
GtkAdjustment *myadj;
445
virtual void create_widget();
446
virtual void do_exec(const float value);
447
virtual void do_update_graphics();
449
virtual ~tX_seqpar_vttfx_float();
451
static GtkSignalFunc gtk_callback(GtkWidget*, tX_seqpar_vttfx_float *);
454
class tX_seqpar_vttfx_bool : public tX_seqpar_vttfx
457
virtual void create_widget();
458
virtual void do_exec(const float value);
459
virtual void do_update_graphics();
461
static GtkSignalFunc gtk_callback(GtkWidget*, tX_seqpar_vttfx_bool *);
464
virtual ~tX_seqpar_vttfx_bool();
467
class tX_seqpar_vttfx_int : public tX_seqpar_vttfx
470
GtkAdjustment *myadj;
473
virtual void create_widget();
474
virtual void do_exec(const float value);
475
virtual void do_update_graphics();
478
virtual ~tX_seqpar_vttfx_int();
480
static GtkSignalFunc gtk_callback(GtkWidget*, tX_seqpar_vttfx_int *);