Alex: Added the new sources for terminatorX 3.5
[terminatorX.git] / src / tX_vtt.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999  Alexander K├Ânig
4  
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.
9  
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.
14  
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.
18  
19     File: tX_vtt.h
20  
21     Description: Header to tX_vtt.cc
22 */    
23
24 #ifndef _h_tx_vtt
25 #define _h_tx_vtt 1
26
27 #ifndef DONT_USE_FLASH
28 #define USE_FLASH
29 #endif
30
31 #include <list>
32 #include "tX_types.h"
33 #include "tX_vttgui.h"
34 #include <pthread.h>
35 #include <float.h>
36 #include <stdio.h>
37
38 #define EC_MAX_BUFFER 256000
39
40 #define CONTROL_NOTHING 0
41 #define CONTROL_SCRATCH 1
42 #define CONTROL_VOLUME 2
43 #define CONTROL_CUTOFF 3
44 #define CONTROL_FEEDBACK 4
45
46 #define NEED_FADE_OUT 0
47 #define NEED_FADE_IN 1
48
49 #define SAMPLE_MAX    32760.0
50 #define SAMPLE_BORDER 30000.0
51
52
53 class vtt_class
54 {
55         public:
56         /* class vars */
57         static int vtt_amount;
58         static list <vtt_class *> main_list;
59         static list <vtt_class *> render_list;
60
61         static f_prec *mix_buffer;
62         static int16_t *mix_out_buffer;
63         static f_prec mix_max;
64         static int samples_in_mix_buffer;
65         static pthread_mutex_t render_lock;
66         static pthread_mutex_t main_lock;
67         
68         static f_prec master_volume;
69         static f_prec res_master_volume;
70         static f_prec vol_channel_adjust;
71
72         static f_prec saturate_fac;
73         static int do_saturate; 
74         
75         static vtt_class * sync_master;
76         static int master_triggered;
77         static int master_triggered_at;
78         static vtt_class * focused_vtt;
79         
80         /* the gui */
81         vtt_gui gui;
82         int have_gui;
83         
84         /* main object vars */
85         char name[256]; // Turntable's name
86         char filename[PATH_MAX]; // The corresponding audiofile
87         
88         int is_playing;
89         int is_sync_master;
90         int is_sync_client;
91         int sync_cycles;
92         int sync_countdown;
93         int want_stop;
94         int sense_cycles;
95
96 #ifdef USE_FLASH
97         f_prec max_value;
98 #endif
99         
100         int16_t *buffer;        // Actual audio data
101         int samples_in_buffer;  // No. of samples in audio data
102         int do_scratch;
103         
104         f_prec *output_buffer; 
105         f_prec *end_of_outputbuffer;
106         f_prec samples_in_outputbuffer;
107         f_prec inv_samples_in_outputbuffer;
108         
109         /* main playback vars */
110         f_prec rel_volume; // The (user-selected) relative volume
111         f_prec res_volume; // The resulting volume
112         f_prec rel_pitch; // The (user-selected) relative pitch
113         f_prec res_pitch;
114         
115         int autotrigger;
116         int loop;
117         
118         d_prec speed;
119         d_prec speed_real;
120         d_prec speed_target;
121         d_prec speed_step;
122         d_prec speed_last;
123 //      d_prec speed_default;   
124         
125         d_prec pos_f;
126         unsigned int pos_i;
127         d_prec maxpos;
128         
129         int mute;
130         int mute_old;
131         int fade;
132         
133         /* input control vars */
134         int x_control;
135         int y_control;
136         
137         /* lp vars */
138         int lp_enable;
139         f_prec lp_gain;
140         f_prec lp_reso;
141         f_prec lp_freq;
142         
143         f_prec lp_buf0;
144         f_prec lp_buf1;
145         f_prec lp_a;
146         f_prec lp_b;
147         f_prec lp_last;
148         f_prec lp_autogain;
149         f_prec lp_resgain;
150         
151         /* echo vars */
152         f_prec ec_buffer[EC_MAX_BUFFER];
153         f_prec *ec_delay;
154         f_prec *ec_ptr;
155         int ec_enable;
156         f_prec ec_length;
157         f_prec ec_res_length;
158         f_prec ec_feedback;
159
160         public:
161         /* Methods */           
162         vtt_class(int);
163         ~vtt_class();
164         
165         /* Parameter setup methods */
166         void set_name(char *);
167         void set_file_data(char *, int16_t *, int);
168         int set_output_buffer_size(int);
169
170         void set_volume(f_prec);
171         void recalc_volume();
172         
173         void set_pitch(f_prec);
174         void recalc_pitch();
175         
176         void set_autotrigger(int);
177         void set_loop(int);
178         
179         void set_mute(int);
180         
181         void set_controls(int, int);
182         
183         void lp_set_enable(int);
184         void lp_set_gain(f_prec);
185         void lp_set_reso(f_prec);
186         void lp_set_freq(f_prec);
187         void lp_setup(f_prec, f_prec, f_prec);
188         
189         void ec_set_enable(int);
190         void ec_set_length(f_prec);     
191         void ec_set_feedback(f_prec);
192         void ec_clear_buffer();
193         
194         void set_sync_master(int);              
195         void set_sync_client(int, int);
196         
197         void set_scratch(int);
198         void xy_input(f_prec, f_prec);
199         void handle_input(int, f_prec);
200         
201         void render();
202         
203         static int16_t *render_all_turntables();
204         static int set_mix_buffer_size(int);
205         static void set_master_volume(f_prec);
206         static void set_master_pitch(f_prec);
207         static int enable_saturate(int);
208         static void focus_no(int);
209         static void focus_next();
210         static void unfocus();  
211         int trigger();
212         
213         int stop();
214         int stop_nolock();
215         
216         int save(FILE *);
217         int load(FILE *);
218         
219         static int load_all(FILE *);
220         static int save_all(FILE *);
221         private:
222         void render_scratch();
223         void render_lp();
224         void render_ec();
225         
226 };
227
228 #endif