148 |
|
|
149 |
void PitchEGUnit::Trigger() { |
void PitchEGUnit::Trigger() { |
150 |
::sfz::Region* const pRegion = pVoice->pRegion; |
::sfz::Region* const pRegion = pVoice->pRegion; |
151 |
depth = pRegion->pitcheg_depth; |
depth = pRegion->pitcheg_depth + GetInfluence(pRegion->pitcheg_depth_oncc); |
152 |
|
|
153 |
// the length of the decay and release curves are dependent on the velocity |
// the length of the decay and release curves are dependent on the velocity |
154 |
const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity); |
const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity); |
155 |
|
|
156 |
// set the delay trigger |
// set the delay trigger |
157 |
uiDelayTrigger = (pRegion->pitcheg_delay + pRegion->pitcheg_vel2delay * velrelease) * GetSampleRate(); |
float delay = pRegion->pitcheg_delay + pRegion->pitcheg_vel2delay * velrelease; |
158 |
|
delay += GetInfluence(pRegion->pitcheg_delay_oncc); |
159 |
|
uiDelayTrigger = std::max(0.0f, delay) * GetSampleRate(); |
160 |
|
|
161 |
EG.trigger(uint(pRegion->pitcheg_start * 10), |
float start = (pRegion->pitcheg_start + GetInfluence(pRegion->pitcheg_start_oncc)) * 10; |
162 |
std::max(0.0, pRegion->pitcheg_attack + pRegion->pitcheg_vel2attack * velrelease), |
|
163 |
std::max(0.0, pRegion->pitcheg_hold + pRegion->pitcheg_vel2hold * velrelease), |
float attack = pRegion->pitcheg_attack + pRegion->pitcheg_vel2attack * velrelease; |
164 |
std::max(0.0, pRegion->pitcheg_decay + pRegion->pitcheg_vel2decay * velrelease), |
attack = std::max(0.0f, attack + GetInfluence(pRegion->pitcheg_attack_oncc)); |
165 |
uint(std::min(std::max(0.0, 10 * (pRegion->pitcheg_sustain + pRegion->pitcheg_vel2sustain * velrelease)), 1000.0)), |
|
166 |
std::max(0.0, pRegion->pitcheg_release + pRegion->pitcheg_vel2release * velrelease), |
float hold = pRegion->pitcheg_hold + pRegion->pitcheg_vel2hold * velrelease; |
167 |
GetSampleRate()); |
hold = std::max(0.0f, hold + GetInfluence(pRegion->pitcheg_hold_oncc)); |
168 |
|
|
169 |
|
float decay = pRegion->pitcheg_decay + pRegion->pitcheg_vel2decay * velrelease; |
170 |
|
decay = std::max(0.0f, decay + GetInfluence(pRegion->pitcheg_decay_oncc)); |
171 |
|
|
172 |
|
float sustain = pRegion->pitcheg_sustain + pRegion->pitcheg_vel2sustain * velrelease; |
173 |
|
sustain = 10 * (sustain + GetInfluence(pRegion->pitcheg_sustain_oncc)); |
174 |
|
|
175 |
|
float release = pRegion->pitcheg_release + pRegion->pitcheg_vel2release * velrelease; |
176 |
|
release = std::max(0.0f, release + GetInfluence(pRegion->pitcheg_release_oncc)); |
177 |
|
|
178 |
|
EG.trigger ( |
179 |
|
uint(std::min(std::max(0.0f, start), 1000.0f)), attack, hold, decay, |
180 |
|
uint(std::min(std::max(0.0f, sustain), 1000.0f)), release, GetSampleRate() |
181 |
|
); |
182 |
} |
} |
183 |
|
|
184 |
|
|
185 |
void FilEGUnit::Trigger() { |
void FilEGUnit::Trigger() { |
186 |
::sfz::Region* const pRegion = pVoice->pRegion; |
::sfz::Region* const pRegion = pVoice->pRegion; |
187 |
depth = pRegion->fileg_depth; |
depth = pRegion->fileg_depth + GetInfluence(pRegion->fileg_depth_oncc); |
188 |
|
|
189 |
// the length of the decay and release curves are dependent on the velocity |
// the length of the decay and release curves are dependent on the velocity |
190 |
const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity); |
const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity); |
191 |
|
|
192 |
// set the delay trigger |
// set the delay trigger |
193 |
uiDelayTrigger = (pRegion->fileg_delay + pRegion->fileg_vel2delay * velrelease) * GetSampleRate(); |
float delay = pRegion->fileg_delay + pRegion->fileg_vel2delay * velrelease; |
194 |
|
delay += GetInfluence(pRegion->fileg_delay_oncc); |
195 |
|
uiDelayTrigger = std::max(0.0f, delay) * GetSampleRate(); |
196 |
|
|
197 |
|
float start = (pRegion->fileg_start + GetInfluence(pRegion->fileg_start_oncc)) * 10; |
198 |
|
|
199 |
|
float attack = pRegion->fileg_attack + pRegion->fileg_vel2attack * velrelease; |
200 |
|
attack = std::max(0.0f, attack + GetInfluence(pRegion->fileg_attack_oncc)); |
201 |
|
|
202 |
|
float hold = pRegion->fileg_hold + pRegion->fileg_vel2hold * velrelease; |
203 |
|
hold = std::max(0.0f, hold + GetInfluence(pRegion->fileg_hold_oncc)); |
204 |
|
|
205 |
|
float decay = pRegion->fileg_decay + pRegion->fileg_vel2decay * velrelease; |
206 |
|
decay = std::max(0.0f, decay + GetInfluence(pRegion->fileg_decay_oncc)); |
207 |
|
|
208 |
|
float sustain = pRegion->fileg_sustain + pRegion->fileg_vel2sustain * velrelease; |
209 |
|
sustain = 10 * (sustain + GetInfluence(pRegion->fileg_sustain_oncc)); |
210 |
|
|
211 |
|
float release = pRegion->fileg_release + pRegion->fileg_vel2release * velrelease; |
212 |
|
release = std::max(0.0f, release + GetInfluence(pRegion->fileg_release_oncc)); |
213 |
|
|
214 |
EG.trigger(uint(pRegion->fileg_start * 10), |
EG.trigger ( |
215 |
std::max(0.0, pRegion->fileg_attack + pRegion->fileg_vel2attack * velrelease), |
uint(std::min(std::max(0.0f, start), 1000.0f)), attack, hold, decay, |
216 |
std::max(0.0, pRegion->fileg_hold + pRegion->fileg_vel2hold * velrelease), |
uint(std::min(std::max(0.0f, sustain), 1000.0f)), release, GetSampleRate() |
217 |
std::max(0.0, pRegion->fileg_decay + pRegion->fileg_vel2decay * velrelease), |
); |
|
uint(std::min(std::max(0.0, 10 * (pRegion->fileg_sustain + pRegion->fileg_vel2sustain * velrelease)), 1000.0)), |
|
|
std::max(0.0, pRegion->fileg_release + pRegion->fileg_vel2release * velrelease), |
|
|
GetSampleRate()); |
|
218 |
} |
} |
219 |
|
|
220 |
|
|