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];