2 terminatorX - realtime audio scratching software
3 Copyright (C) 1999-2002 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_vtt.cc
23 08 Dec 1999 - added audiofile support
39 #include "tX_vttgui.h"
43 #include "tX_audiofile.h"
44 #include "tX_seqpar.h"
46 #include "tX_ladspa.h"
52 #define EC_MAX_BUFFER 256000
54 #define CONTROL_NOTHING 0
55 #define CONTROL_SCRATCH 1
56 #define CONTROL_VOLUME 2
57 #define CONTROL_CUTOFF 3
58 #define CONTROL_FEEDBACK 4
60 #define NEED_FADE_OUT 0
61 #define NEED_FADE_IN 1
63 #define SAMPLE_MAX 32760.0
64 #define SAMPLE_BORDER 30000.0
71 static int vtt_amount;
72 static list <vtt_class *> main_list;
73 static list <vtt_class *> render_list;
75 static f_prec *mix_buffer;
76 static f_prec *mix_buffer_end;
78 static int16_t *mix_out_buffer;
79 static f_prec mix_max_l;
80 static f_prec mix_max_r;
81 static int samples_in_mix_buffer;
82 static pthread_mutex_t render_lock;
84 static f_prec master_volume;
85 static f_prec res_master_volume;
86 static f_prec vol_channel_adjust;
88 static f_prec saturate_fac;
89 static int do_saturate;
91 static vtt_class * sync_master;
92 static int master_triggered;
93 static int master_triggered_at;
94 static vtt_class * focused_vtt;
101 /* main object vars */
102 char name[256]; // Turntable's name
103 char filename[PATH_MAX]; // The corresponding audiofile
124 int16_t *buffer; // Actual audio data
125 int samples_in_buffer; // No. of samples in audio data
128 f_prec *output_buffer;
129 f_prec *end_of_outputbuffer;
130 f_prec samples_in_outputbuffer;
131 f_prec inv_samples_in_outputbuffer;
133 /* main playback vars */
134 f_prec rel_volume; // The (user-selected) relative volume
135 f_prec res_volume; // The resulting volume
139 f_prec rel_pitch; // The (user-selected) relative pitch
143 f_prec pan; // The logical pan value -1 left, 0 center, 1 right
144 f_prec res_volume_left;
145 f_prec res_volume_right;
171 /* input control vars */
175 /* seq par mapping for x/y axis */
194 f_prec ec_buffer[EC_MAX_BUFFER];
195 f_prec *ec_output_buffer;
200 f_prec ec_res_length;
204 f_prec ec_volume_left;
205 f_prec ec_volume_right;
207 /* sequenceable parameters */
208 tX_seqpar_vtt_speed sp_speed;
209 tX_seqpar_vtt_volume sp_volume;
210 tX_seqpar_vtt_pitch sp_pitch;
211 tX_seqpar_vtt_pan sp_pan;
212 tX_seqpar_vtt_trigger sp_trigger;
213 tX_seqpar_vtt_loop sp_loop;
214 tX_seqpar_vtt_sync_client sp_sync_client;
215 tX_seqpar_vtt_sync_cycles sp_sync_cycles;
216 tX_seqpar_vtt_lp_enable sp_lp_enable;
217 tX_seqpar_vtt_lp_gain sp_lp_gain;
218 tX_seqpar_vtt_lp_reso sp_lp_reso;
219 tX_seqpar_vtt_lp_freq sp_lp_freq;
220 tX_seqpar_vtt_ec_enable sp_ec_enable;
221 tX_seqpar_vtt_ec_length sp_ec_length;
222 tX_seqpar_vtt_ec_feedback sp_ec_feedback;
223 tX_seqpar_vtt_ec_pan sp_ec_pan;
224 tX_seqpar_vtt_ec_volume sp_ec_volume;
225 tX_seqpar_vtt_mute sp_mute;
226 tX_seqpar_spin sp_spin;
228 tx_audiofile *audiofile;
230 list <vtt_fx *> fx_list;
237 /* Parameter setup methods */
238 void set_name(char *);
239 int set_output_buffer_size(int);
241 void set_volume(f_prec);
242 void recalc_volume();
244 void set_pan(f_prec);
246 void set_pitch(f_prec);
249 void set_autotrigger(int);
254 void set_controls(int, int);
255 void set_y_input_parameter(tX_seqpar *);
256 void set_x_input_parameter(tX_seqpar *);
259 void lp_set_enable(int);
260 void lp_set_gain(f_prec);
261 void lp_set_reso(f_prec);
262 void lp_set_freq(f_prec);
263 void lp_setup(f_prec, f_prec, f_prec);
265 void ec_set_enable(int);
266 void ec_set_length(f_prec);
267 void ec_set_feedback(f_prec);
268 void ec_set_volume(f_prec);
269 void ec_set_pan(f_prec);
270 void ec_clear_buffer();
272 void set_sync_master(int);
273 void set_sync_client(int, int);
274 void set_sync_client_ug(int, int); // and update gui
276 void set_scratch(int);
277 void xy_input(f_prec, f_prec);
278 void handle_input(int, f_prec);
280 vtt_fx_ladspa * add_effect(LADSPA_Plugin *);
284 void forward_turntable();
286 static int16_t *render_all_turntables();
287 static void forward_all_turntables();
289 static int set_mix_buffer_size(int);
290 static void set_master_volume(f_prec);
291 static void set_master_pitch(f_prec);
292 static void enable_saturate(int);
293 static void focus_no(int);
294 static void focus_next();
295 static void unfocus();
308 static int load_all_10(FILE *, char *fname); /* fname is for display only*/
309 static int load_all_11(FILE *, char *fname); /* fname is for display only*/
310 static int load_all_12(FILE *, char *fname); /* fname is for display only*/
311 static int load_all_13(FILE *, char *fname); /* fname is for display only*/
312 static int load_all_14(FILE *, char *fname); /* fname is for display only*/
313 static int save_all(FILE *);
314 int load_file(char *name);
316 void render_scratch();
320 void effect_up(vtt_fx *effect);
321 void effect_down(vtt_fx *effect);
322 void effect_remove(vtt_fx_ladspa *effect);
324 void hide_audio(bool);
325 void hide_control(bool);
327 void set_mix_mute(int newstate);
328 void set_mix_solo(int newstate);
331 res_mute=((mute) || (mix_mute && (!mix_solo)) || ((solo_ctr>0)&&(!mix_solo)));