1 /* -*- Mode: C ; c-basic-offset: 2 -*- */
2 /*****************************************************************************
4 * Copyright (C) 2006,2007,2008,2009 Nedko Arnaudov <nedko@arnaudov.name>
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; version 2 of the License
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.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *****************************************************************************/
27 #include "lfo_parameters.h"
28 #include "filter_parameters.h"
29 #include "envelope_parameters.h"
30 #include "resonance.h"
32 #include "oscillator.h"
33 #include "portamento.h"
34 #include "addsynth_internal.h"
37 #define envelope_params_ptr ((EnvelopeParams * )context)
40 zyn_component_amp_envelope_get_float(
42 unsigned int parameter
)
46 case ZYNADD_PARAMETER_FLOAT_ENV_ATTACK_DURATION
:
47 return percent_from_0_127(
48 envelope_params_ptr
->get_duration(
49 envelope_params_ptr
->m_attack_duration_index
));
50 case ZYNADD_PARAMETER_FLOAT_ENV_DECAY_DURATION
:
51 return percent_from_0_127(
52 envelope_params_ptr
->get_duration(
53 envelope_params_ptr
->m_decay_duration_index
));
54 case ZYNADD_PARAMETER_FLOAT_ENV_SUSTAIN_VALUE
:
55 return percent_from_0_127(
56 envelope_params_ptr
->get_value(
57 envelope_params_ptr
->m_sustain_value_index
));
58 case ZYNADD_PARAMETER_FLOAT_ENV_RELEASE_DURATION
:
59 return percent_from_0_127(
60 envelope_params_ptr
->get_duration(
61 envelope_params_ptr
->m_release_duration_index
));
62 case ZYNADD_PARAMETER_FLOAT_ENV_STRETCH
:
63 return percent_from_0_127(
64 envelope_params_ptr
->m_stretch
) * 2;
66 LOG_ERROR("Unknown amplitude envelope parameter %u", parameter
);
72 zyn_component_amp_envelope_set_float(
74 unsigned int parameter
,
79 case ZYNADD_PARAMETER_FLOAT_ENV_ATTACK_DURATION
:
80 envelope_params_ptr
->set_duration(
81 envelope_params_ptr
->m_attack_duration_index
,
82 percent_to_0_127(value
));
84 case ZYNADD_PARAMETER_FLOAT_ENV_DECAY_DURATION
:
85 envelope_params_ptr
->set_duration(
86 envelope_params_ptr
->m_decay_duration_index
,
87 percent_to_0_127(value
));
89 case ZYNADD_PARAMETER_FLOAT_ENV_SUSTAIN_VALUE
:
90 envelope_params_ptr
->set_value(
91 envelope_params_ptr
->m_sustain_value_index
,
92 percent_to_0_127(value
));
94 case ZYNADD_PARAMETER_FLOAT_ENV_RELEASE_DURATION
:
95 envelope_params_ptr
->set_duration(
96 envelope_params_ptr
->m_release_duration_index
,
97 percent_to_0_127(value
));
99 case ZYNADD_PARAMETER_FLOAT_ENV_STRETCH
:
100 envelope_params_ptr
->m_stretch
= percent_to_0_127(value
/2);
103 LOG_ERROR("Unknown amplitude envelope parameter %u", parameter
);
109 zyn_component_amp_envelope_get_int(
111 unsigned int parameter
)
118 zyn_component_amp_envelope_set_int(
120 unsigned int parameter
,
127 zyn_component_amp_envelope_get_bool(
129 unsigned int parameter
)
133 case ZYNADD_PARAMETER_BOOL_ENV_FORCED_RELEASE
:
134 return envelope_params_ptr
->m_forced_release
;
135 case ZYNADD_PARAMETER_BOOL_ENV_LINEAR
:
136 return envelope_params_ptr
->m_linear
;
138 LOG_ERROR("Unknown bool amplitude envelope parameter %u", parameter
);
144 zyn_component_amp_envelope_set_bool(
146 unsigned int parameter
,
151 case ZYNADD_PARAMETER_BOOL_ENV_FORCED_RELEASE
:
152 envelope_params_ptr
->m_forced_release
= value
;
154 case ZYNADD_PARAMETER_BOOL_ENV_LINEAR
:
155 envelope_params_ptr
->m_linear
= value
;
158 LOG_ERROR("Unknown bool amplitude envelope parameter %u", parameter
);
163 #undef envelope_params_ptr
166 zyn_addsynth_component_init_amp_envelope(
167 struct zyn_component_descriptor
* component_ptr
,
168 EnvelopeParams
* envelope_params_ptr
)
170 ZYN_INIT_COMPONENT(component_ptr
, envelope_params_ptr
, zyn_component_amp_envelope_
);