4 * Copyright (C) Robert Ham 2003 (node@users.sourceforge.net)
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #include "plugin_settings.h"
29 settings_set_to_default (settings_t
* settings
, guint32 sample_rate
)
31 unsigned long control
;
35 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
37 value
= plugin_desc_get_default_control_value (settings
->desc
, control
, sample_rate
);
39 for (copy
= 0; copy
< settings
->copies
; copy
++)
41 settings
->control_values
[copy
][control
] = value
;
44 settings
->locks
[control
] = TRUE
;
49 settings_new (plugin_desc_t
* desc
, unsigned long channels
, guint32 sample_rate
)
51 settings_t
* settings
;
52 unsigned long channel
;
55 settings
= g_malloc (sizeof (settings_t
));
56 copies
= plugin_desc_get_copies (desc
, channels
);
58 settings
->sample_rate
= sample_rate
;
59 settings
->desc
= desc
;
60 settings
->copies
= copies
;
61 settings
->channels
= channels
;
62 settings
->lock_all
= TRUE
;
63 settings
->enabled
= FALSE
;
64 settings
->locks
= NULL
;
65 settings
->control_values
= NULL
;
66 settings
->wet_dry_enabled
= FALSE
;
67 settings
->wet_dry_locked
= TRUE
;
69 /* control settings */
70 if (desc
->control_port_count
> 0)
74 settings
->locks
= g_malloc (sizeof (gboolean
) * desc
->control_port_count
);
76 settings
->control_values
= g_malloc (sizeof (LADSPA_Data
*) * copies
);
77 for (copy
= 0; copy
< copies
; copy
++)
79 settings
->control_values
[copy
] = g_malloc (sizeof (LADSPA_Data
) * desc
->control_port_count
);
82 settings_set_to_default (settings
, sample_rate
);
85 /* wet/dry settings */
86 settings
->wet_dry_values
= g_malloc (sizeof (LADSPA_Data
) * channels
);
87 for (channel
= 0; channel
< channels
; channel
++)
88 settings
->wet_dry_values
[channel
] = 1.0;
94 settings_dup (settings_t
* other
)
96 settings_t
* settings
;
98 unsigned long channel
;
100 settings
= g_malloc (sizeof (settings_t
));
102 settings
->sample_rate
= other
->sample_rate
;
103 settings
->desc
= other
->desc
;
104 settings
->copies
= settings_get_copies (other
);
105 settings
->channels
= settings_get_channels (other
);
106 settings
->wet_dry_enabled
= settings_get_wet_dry_enabled (other
);
107 settings
->wet_dry_locked
= settings_get_wet_dry_locked (other
);
108 settings
->lock_all
= settings_get_lock_all (other
);
109 settings
->enabled
= settings_get_enabled (other
);
110 settings
->locks
= NULL
;
111 settings
->control_values
= NULL
;
115 if (desc
->control_port_count
> 0)
118 unsigned long control
;
120 settings
->locks
= g_malloc (sizeof (gboolean
) * desc
->control_port_count
);
121 for (control
= 0; control
< desc
->control_port_count
; control
++)
122 settings_set_lock (settings
, control
, settings_get_lock (other
, control
));
124 settings
->control_values
= g_malloc (sizeof (LADSPA_Data
*) * settings
->copies
);
125 for (copy
= 0; copy
< settings
->copies
; copy
++)
127 settings
->control_values
[copy
] = g_malloc (sizeof (LADSPA_Data
) * desc
->control_port_count
);
129 for (control
= 0; control
< desc
->control_port_count
; control
++)
131 settings
->control_values
[copy
][control
] = settings_get_control_value (other
, copy
, control
);
136 settings
->wet_dry_values
= g_malloc (sizeof (LADSPA_Data
) * settings
->channels
);
137 for (channel
= 0; channel
< settings
->channels
; channel
++)
138 settings
->wet_dry_values
[channel
] = settings_get_wet_dry_value (other
, channel
);
144 settings_destroy (settings_t
* settings
)
146 if (settings
->desc
->control_port_count
> 0)
149 for (i
= 0; i
< settings
->copies
; i
++)
150 g_free (settings
->control_values
[i
]);
152 g_free (settings
->control_values
);
153 g_free (settings
->locks
);
156 g_free (settings
->wet_dry_values
);
162 settings_set_copies (settings_t
* settings
, guint copies
)
166 unsigned long control
;
168 if (copies
<= settings
->copies
)
171 last_copy
= settings
->copies
- 1;
173 settings
->control_values
= g_realloc (settings
->control_values
,
174 sizeof (LADSPA_Data
*) * copies
);
176 /* copy over the last settings to the new copies */
177 for (copy
= settings
->copies
; copy
< copies
; copy
++)
179 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
181 settings
->control_values
[copy
][control
] =
182 settings
->control_values
[last_copy
][control
];
186 settings
->copies
= copies
;
190 settings_set_channels (settings_t
* settings
, unsigned long channels
)
192 unsigned long channel
;
193 LADSPA_Data last_value
;
195 if (channels
<= settings
->channels
)
198 settings
->wet_dry_values
= g_realloc (settings
->wet_dry_values
, sizeof (LADSPA_Data
) * channels
);
200 last_value
= settings
->wet_dry_values
[settings
->channels
- 1];
202 for (channel
= settings
->channels
; channel
< channels
; channel
++)
203 settings
->wet_dry_values
[channel
] = last_value
;
205 settings
->channels
= channels
;
209 settings_set_sample_rate (settings_t
* settings
, guint32 sample_rate
)
211 LADSPA_Data old_sample_rate
;
212 LADSPA_Data new_sample_rate
;
214 g_return_if_fail (settings
!= NULL
);
216 if (settings
->sample_rate
== sample_rate
)
219 if (settings
->desc
->control_port_count
> 0)
221 unsigned long control
;
224 new_sample_rate
= (LADSPA_Data
) sample_rate
;
225 old_sample_rate
= (LADSPA_Data
) settings
->sample_rate
;
227 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
229 for (copy
= 0; copy
< settings
->copies
; copy
++)
231 if (LADSPA_IS_HINT_SAMPLE_RATE (settings
->desc
->port_range_hints
[control
].HintDescriptor
))
233 settings
->control_values
[copy
][control
] =
234 (settings
->control_values
[copy
][control
] / old_sample_rate
) * new_sample_rate
;
240 settings
->sample_rate
= sample_rate
;
244 settings_set_control_value (settings_t
* settings
, guint copy
, unsigned long control_index
, LADSPA_Data value
)
246 g_return_if_fail (settings
!= NULL
);
247 g_return_if_fail (control_index
< settings
->desc
->control_port_count
);
249 if (copy
>= settings
->copies
)
250 settings_set_copies (settings
, copy
+ 1);
252 settings
->control_values
[copy
][control_index
] = value
;
256 settings_set_lock (settings_t
* settings
, unsigned long control_index
, gboolean locked
)
258 g_return_if_fail (settings
!= NULL
);
259 g_return_if_fail (control_index
< settings
->desc
->control_port_count
);
261 settings
->locks
[control_index
] = locked
;
265 settings_set_lock_all (settings_t
* settings
, gboolean lock_all
)
267 g_return_if_fail (settings
!= NULL
);
269 settings
->lock_all
= lock_all
;
273 settings_set_enabled (settings_t
* settings
, gboolean enabled
)
275 g_return_if_fail (settings
!= NULL
);
277 settings
->enabled
= enabled
;
281 settings_set_wet_dry_enabled (settings_t
* settings
, gboolean enabled
)
283 g_return_if_fail (settings
!= NULL
);
285 settings
->wet_dry_enabled
= enabled
;
289 settings_set_wet_dry_locked (settings_t
* settings
, gboolean locked
)
291 g_return_if_fail (settings
!= NULL
);
293 settings
->wet_dry_locked
= locked
;
297 settings_set_wet_dry_value (settings_t
* settings
, unsigned long channel
, LADSPA_Data value
)
299 g_return_if_fail (settings
!= NULL
);
301 if (channel
>= settings
->channels
)
302 settings_set_channels (settings
, channel
+ 1);
304 settings
->wet_dry_values
[channel
] = value
;
309 settings_get_control_value (settings_t
* settings
, guint copy
, unsigned long control_index
)
311 g_return_val_if_fail (settings
!= NULL
, NAN
);
312 g_return_val_if_fail (control_index
< settings
->desc
->control_port_count
, NAN
);
314 if (copy
>= settings
->copies
)
315 settings_set_copies (settings
, copy
- 1);
317 return settings
->control_values
[copy
][control_index
];
321 settings_get_lock (const settings_t
* settings
, unsigned long control_index
)
323 g_return_if_fail (settings
!= NULL
);
325 return settings
->locks
[control_index
];
329 settings_get_lock_all (const settings_t
* settings
)
331 g_return_if_fail (settings
!= NULL
);
333 return settings
->lock_all
;
337 settings_get_enabled (const settings_t
* settings
)
339 g_return_if_fail (settings
!= NULL
);
341 return settings
->enabled
;
345 settings_get_copies (const settings_t
* settings
)
347 g_return_if_fail (settings
!= NULL
);
349 return settings
->copies
;
354 settings_get_channels (const settings_t
* settings
)
356 g_return_if_fail (settings
!= NULL
);
358 return settings
->channels
;
362 settings_get_wet_dry_enabled (const settings_t
* settings
)
364 g_return_if_fail (settings
!= NULL
);
366 return settings
->wet_dry_enabled
;
370 settings_get_wet_dry_locked (const settings_t
* settings
)
372 g_return_if_fail (settings
!= NULL
);
374 return settings
->wet_dry_locked
;
378 settings_get_wet_dry_value (settings_t
* settings
, unsigned long channel
)
380 g_return_if_fail (settings
!= NULL
);
382 if (channel
>= settings
->channels
)
383 settings_set_channels (settings
, channel
+ 1);
385 return settings
->wet_dry_values
[channel
];