1 /*
2   Copyright (C) 2003-2008 Fons Adriaensen <fons@kokkinizita.net>
3 
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 2 of the License, or
7   (at your option) any later version.
8 
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13 
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software
16   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 
19 //-----------------------------------------------------------------------------------
20 // Common definitions
21 
22 
23 #include "cs_chorus.h"
24 
25 #define NMODS 3
26 #define VERSION "0.4.0"
27 
28 
29 static const char* maker = "Fons Adriaensen <fons@kokkinizita.net>";
30 static const char* copyr = "(C) 2003-2008 Fons Adriaensen - License: GPL2";
31 
32 
pconnect(LADSPA_Handle H,unsigned long port,LADSPA_Data * data)33 static void pconnect (LADSPA_Handle H, unsigned long port, LADSPA_Data *data)
34 {
35     ((LadspaPlugin *)H)->setport (port, data);
36 }
37 
activate(LADSPA_Handle H)38 static void activate (LADSPA_Handle H)
39 {
40     ((LadspaPlugin *)H)->active (true);
41 }
42 
runplugin(LADSPA_Handle H,unsigned long k)43 static void runplugin (LADSPA_Handle H, unsigned long k)
44 {
45     ((LadspaPlugin *)H)->runproc (k, false);
46 }
47 
runadding(LADSPA_Handle H,unsigned long k)48 static void runadding (LADSPA_Handle H, unsigned long k)
49 {
50     ((LadspaPlugin *)H)->runproc (k, true);
51 }
52 
setadding(LADSPA_Handle H,LADSPA_Data gain)53 static void setadding (LADSPA_Handle H, LADSPA_Data gain)
54 {
55     ((LadspaPlugin *)H)->setgain (gain);
56 }
57 
deactivate(LADSPA_Handle H)58 static void deactivate (LADSPA_Handle H)
59 {
60     ((LadspaPlugin *)H)->active (false);
61 }
62 
cleanup(LADSPA_Handle H)63 static void cleanup (LADSPA_Handle H)
64 {
65     delete (LadspaPlugin *) H;
66 }
67 
68 //-----------------------------------------------------------------------------------
69 // Plugin definitions
70 
71 
72 static const char* name1 = "Chorus1 - Based on CSound orchestra by Sean Costello";
73 static const char* label1  = "Chorus1";
74 
instant1(const struct _LADSPA_Descriptor * desc,unsigned long rate)75 static LADSPA_Handle instant1 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
76 {
77     return new Ladspa_CS_chorus1 (rate);
78 }
79 
80 
81 static const char* name2 = "Chorus2 - Based on CSound orchestra by Sean Costello";
82 static const char* label2  = "Chorus2";
83 
instant2(const struct _LADSPA_Descriptor * desc,unsigned long rate)84 static LADSPA_Handle instant2 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
85 {
86     return new Ladspa_CS_chorus2 (rate);
87 }
88 
89 
90 static const char* name3 = "Triple chorus";
91 static const char* label3  = "TripleChorus";
92 
instant3(const struct _LADSPA_Descriptor * desc,unsigned long rate)93 static LADSPA_Handle instant3 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
94 {
95     return new Ladspa_CS_chorus3 (rate);
96 }
97 
98 
99 
100 static const LADSPA_PortDescriptor pdesc12 [Ladspa_CS_chorus1::NPORT] =
101 {
102     LADSPA_PORT_INPUT  | LADSPA_PORT_AUDIO,
103     LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
104     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
105     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
106     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
107     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
108     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL
109 };
110 
111 static const char * const pname12  [Ladspa_CS_chorus1::NPORT] =
112 {
113     "Input",
114     "Output",
115     "Delay (ms)",
116     "Mod Frequency 1 (Hz)",
117     "Mod Amplitude 1 (ms)",
118     "Mod Frequency 2 (Hz)",
119     "Mod Amplitude 2 (ms)"
120 };
121 
122 static const LADSPA_PortRangeHint phint12 [Ladspa_CS_chorus1::NPORT] =
123 {
124     { 0, 0, 0 },
125     { 0, 0, 0 },
126     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 30 },
127     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC, 0.003, 10 },
128     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 10 },
129     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC, 0.01, 30 },
130     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 3 }
131 };
132 
133 
134 static const LADSPA_PortDescriptor pdesc3 [Ladspa_CS_chorus3::NPORT] =
135 {
136     LADSPA_PORT_INPUT  | LADSPA_PORT_AUDIO,
137     LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
138     LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
139     LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
140     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
141     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
142     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
143     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL,
144     LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL
145 };
146 
147 static const char * const pname3  [Ladspa_CS_chorus3::NPORT] =
148 {
149     "Input",
150     "Output1",
151     "Output2",
152     "Output3",
153     "Delay (ms)",
154     "Mod Frequency 1 (Hz)",
155     "Mod Amplitude 1 (ms)",
156     "Mod Frequency 2 (Hz)",
157     "Mod Amplitude 2 (ms)"
158 };
159 
160 static const LADSPA_PortRangeHint phint3 [Ladspa_CS_chorus3::NPORT] =
161 {
162     { 0, 0, 0 },
163     { 0, 0, 0 },
164     { 0, 0, 0 },
165     { 0, 0, 0 },
166     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 30 },
167     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC, 0.003, 10 },
168     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 10 },
169     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC, 0.01, 30 },
170     { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, 0, 3 }
171 };
172 
173 
174 static const LADSPA_Descriptor moddescr [NMODS] =
175 {
176     {
177 	1944,
178 	label1,
179 	LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
180 	name1,
181 	maker,
182 	copyr,
183 	Ladspa_CS_chorus1::NPORT,
184 	pdesc12,
185 	pname12,
186 	phint12,
187 	0,
188 	instant1,
189 	pconnect,
190 	activate,
191 	runplugin,
192 	runadding,
193 	setadding,
194 	deactivate,
195 	cleanup
196     },
197     {
198 	1945,
199 	label2,
200 	LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
201 	name2,
202 	maker,
203 	copyr,
204 	Ladspa_CS_chorus1::NPORT,
205 	pdesc12,
206 	pname12,
207 	phint12,
208 	0,
209 	instant2,
210 	pconnect,
211 	activate,
212 	runplugin,
213 	runadding,
214 	setadding,
215 	deactivate,
216 	cleanup
217     },
218     {
219 	1951,
220 	label3,
221 	LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
222 	name3,
223 	maker,
224 	copyr,
225 	Ladspa_CS_chorus3::NPORT,
226 	pdesc3,
227 	pname3,
228 	phint3,
229 	0,
230 	instant3,
231 	pconnect,
232 	activate,
233 	runplugin,
234 	runadding,
235 	setadding,
236 	deactivate,
237 	cleanup
238     }
239 };
240 
ladspa_descriptor(unsigned long i)241 extern "C" const LADSPA_Descriptor *ladspa_descriptor (unsigned long i)
242 {
243     if (i >= NMODS) return 0;
244     return moddescr + i;
245 }
246 
247 //-----------------------------------------------------------------------------------
248