| 288 | |
| 289 | |
| 290 | void EnvelopeAndLfoParameters::fillLevel( float * _buf, f_cnt_t _frame, |
| 291 | const f_cnt_t _release_begin, |
| 292 | const fpp_t _frames ) |
| 293 | { |
| 294 | QMutexLocker m(&m_paramMutex); |
| 295 | |
| 296 | if( _frame < 0 || _release_begin < 0 ) |
| 297 | { |
| 298 | return; |
| 299 | } |
| 300 | |
| 301 | fillLfoLevel( _buf, _frame, _frames ); |
| 302 | |
| 303 | for( fpp_t offset = 0; offset < _frames; ++offset, ++_buf, ++_frame ) |
| 304 | { |
| 305 | float env_level; |
| 306 | if( _frame < _release_begin ) |
| 307 | { |
| 308 | if( _frame < m_pahdFrames ) |
| 309 | { |
| 310 | env_level = m_pahdEnv[_frame]; |
| 311 | } |
| 312 | else |
| 313 | { |
| 314 | env_level = m_sustainLevel; |
| 315 | } |
| 316 | } |
| 317 | else if( ( _frame - _release_begin ) < m_rFrames ) |
| 318 | { |
| 319 | env_level = m_rEnv[_frame - _release_begin] * |
| 320 | ( ( _release_begin < m_pahdFrames ) ? |
| 321 | m_pahdEnv[_release_begin] : m_sustainLevel ); |
| 322 | } |
| 323 | else |
| 324 | { |
| 325 | env_level = 0.0f; |
| 326 | } |
| 327 | |
| 328 | // at this point, *_buf is LFO level |
| 329 | *_buf = m_controlEnvAmountModel.value() ? |
| 330 | env_level * ( 0.5f + *_buf ) : |
| 331 | env_level + *_buf; |
| 332 | } |
| 333 | } |
| 334 | |
| 335 | |
| 336 |
no test coverage detected