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