It's 2020...
[terminatorX.git] / src / tX_vttfx.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2020  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, see <http://www.gnu.org/licenses/>.
17  
18     File: tX_vttfx.h
19  
20     Description: Header to tX_vttfx.cc - see there for more info
21 */
22
23 #ifndef _h_tx_vttfx
24 #define _h_tx_vttfx 1
25
26
27 //#include "tX_vtt.h"
28 #include "tX_seqpar.h"
29 #include "tX_ladspa.h"
30 #include <stdio.h>
31 #include <list>
32 #include <gtk/gtk.h>
33 #include "tX_panel.h"
34
35 /* Ids to guarantee positioning of builtin */
36 #define TX_FX_BUILTINCUTOFF 1
37 #define TX_FX_BUILTINECHO 2
38 #define TX_FX_LADSPA 3
39
40 #include <libxml/xmlmemory.h>
41 #include <libxml/parser.h>
42
43 /* abstract super class vtt_fx */
44
45 typedef enum  {
46         NOT_DRYWET_CAPABLE,
47         DRYWET_AVAILABLE,
48         DRYWET_ACTIVE
49 } tX_drywet_type;
50
51 class vtt_fx
52 {
53         protected:
54         void *vtt;
55         GtkWidget *panel_widget;
56         tX_panel *panel;
57
58         public: 
59         vtt_fx() { vtt=NULL; }
60         virtual ~vtt_fx();
61         void set_vtt(void *v) { vtt=v;}
62         void *get_vtt() { return vtt; }
63         
64         virtual void activate()=0;
65         virtual void deactivate()=0;
66         virtual void run()=0;   
67         virtual int isEnabled()=0;
68         virtual void reconnect_buffer();
69         virtual void toggle_drywet();
70         virtual bool is_stereo();
71         virtual tX_drywet_type has_drywet_feature();
72         
73         virtual const char *get_info_string()=0;
74         
75         virtual void save(FILE *rc, gzFile rz, char *indent)=0;
76         
77         GtkWidget* get_panel_widget() { return panel_widget; }
78         void set_panel_widget(GtkWidget *widget) { panel_widget=widget; }
79         
80         void set_panel(tX_panel *p) { panel = p; }
81         tX_panel* get_panel() { return panel; }
82 };
83
84 /*********************************/
85 /* builtin fx */
86
87 /* lowpass */
88 class vtt_fx_lp : public vtt_fx
89 {
90         public: 
91         virtual void activate();
92         virtual void deactivate();
93         virtual void run();     
94         virtual int isEnabled();
95
96         virtual void save(FILE *rc, gzFile rz, char *indent);
97         virtual const char *get_info_string();
98 };
99
100 /* echo */
101 class vtt_fx_ec : public vtt_fx
102 {
103         public: 
104         virtual void activate();
105         virtual void deactivate();
106         virtual void run();     
107         virtual int isEnabled();
108
109         virtual void save(FILE *rc, gzFile rz, char *indent);
110         virtual const char *get_info_string();  
111 };
112
113 /********************************/
114 /* LADSPA plugin fx */
115
116 class vtt_fx_ladspa : public vtt_fx
117 {
118         public:
119         list <tX_seqpar_vttfx *> controls;
120         protected:
121         tX_seqpar_vttfx *sp_enable;
122         tX_seqpar_vttfx *sp_wet;
123         f_prec *wet_buffer;
124         int input_port, output_port;
125         LADSPA_Handle *instance;
126         LADSPA_Plugin *plugin;
127
128         public:
129         vtt_fx_ladspa(LADSPA_Plugin *, void *);
130         virtual ~vtt_fx_ladspa();
131         
132         public: 
133         virtual void activate();
134         virtual void deactivate();
135         virtual void run();             
136         virtual int isEnabled();
137         virtual void reconnect_buffer();
138         virtual const char *get_info_string();
139         virtual void realloc_drywet();
140         virtual void free_drywet();
141         virtual void toggle_drywet();
142         void add_drywet();
143         void remove_drywet();
144         virtual tX_drywet_type has_drywet_feature();
145         
146         virtual void save(FILE *rc, gzFile rz, char *indent);
147 #ifdef ENABLE_TX_LEGACY 
148         virtual void load(FILE *);
149 #endif  
150         virtual void load(xmlDocPtr, xmlNodePtr);
151 };
152
153 class vtt_fx_stereo_ladspa : public vtt_fx_ladspa {
154         private:
155         f_prec *wet_buffer2;
156         int input2_port, output2_port;
157         
158         protected:
159         virtual void reconnect_buffer();        
160         virtual void realloc_drywet();
161         virtual void free_drywet();
162
163         public:
164         vtt_fx_stereo_ladspa(LADSPA_Stereo_Plugin *, void *);
165         virtual bool is_stereo();
166         virtual void run();
167         virtual ~vtt_fx_stereo_ladspa();
168 };
169 #endif