|
|
|
@ -111,7 +111,8 @@ void Dexed::deactivate(void) |
|
|
|
|
|
|
|
|
|
void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) |
|
|
|
|
{ |
|
|
|
|
uint16_t i; |
|
|
|
|
uint16_t i,j; |
|
|
|
|
uint8_t note; |
|
|
|
|
float sumbuf[n_samples]; |
|
|
|
|
|
|
|
|
|
if (refreshVoice) |
|
|
|
@ -121,7 +122,6 @@ void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) |
|
|
|
|
if ( voices[i].live ) |
|
|
|
|
voices[i].dx7_note->update(data, voices[i].midi_note, voices[i].velocity, voices[i].porta); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
lfo.reset(data + 137); |
|
|
|
|
refreshVoice = false; |
|
|
|
|
} |
|
|
|
@ -139,37 +139,15 @@ void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) |
|
|
|
|
int32_t lfovalue = lfo.getsample(); |
|
|
|
|
int32_t lfodelay = lfo.getdelay(); |
|
|
|
|
|
|
|
|
|
for (uint8_t note = 0; note < max_notes; note++) |
|
|
|
|
for (note = 0; note < max_notes; note++) |
|
|
|
|
{ |
|
|
|
|
if (voices[note].live) |
|
|
|
|
{ |
|
|
|
|
voices[note].dx7_note->compute(audiobuf.get(), lfovalue, lfodelay, &controllers); |
|
|
|
|
|
|
|
|
|
for (uint8_t j = 0; j < _N_; ++j) |
|
|
|
|
for (j = 0; j < _N_; ++j) |
|
|
|
|
{ |
|
|
|
|
int32_t val = audiobuf.get()[j]; |
|
|
|
|
val = val >> 4; |
|
|
|
|
#ifdef USE_TEENSY_DSP |
|
|
|
|
int32_t clip_val = signed_saturate_rshift(val, 24, 9); |
|
|
|
|
#else |
|
|
|
|
int32_t clip_val = val < -(1 << 24) ? 0x8000 : val >= (1 << 24) ? 0x7fff : val >> 9; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
float f = static_cast<float>(clip_val >> REDUCE_LOUDNESS) / 0x7fff; |
|
|
|
|
#if defined(REDUCE_LOUDNESS_FACTOR) |
|
|
|
|
f *= REDUCE_LOUDNESS_FACTOR; |
|
|
|
|
#endif |
|
|
|
|
if (f > 1.0) |
|
|
|
|
{ |
|
|
|
|
f = 1.0; |
|
|
|
|
overload++; |
|
|
|
|
} |
|
|
|
|
else if (f < -1.0) |
|
|
|
|
{ |
|
|
|
|
f = -1.0; |
|
|
|
|
overload++; |
|
|
|
|
} |
|
|
|
|
sumbuf[i + j] += f; |
|
|
|
|
sumbuf[i + j] += static_cast<float>(signed_saturate_rshift(audiobuf.get()[j] >> 4, 24, 9)) / 0x8000; |
|
|
|
|
audiobuf.get()[j] = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -178,16 +156,9 @@ void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) |
|
|
|
|
|
|
|
|
|
#ifdef USE_FX |
|
|
|
|
fx.process(sumbuf, n_samples); |
|
|
|
|
// #else
|
|
|
|
|
// arm_scale_f32(sumbuf, fx.getGain(), sumbuf, n_samples);
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
//#ifdef USE_TEENSY_DSP
|
|
|
|
|
arm_float_to_q15(sumbuf, buffer, AUDIO_BLOCK_SAMPLES); |
|
|
|
|
//#else
|
|
|
|
|
//for (i = 0; i < n_samples; ++i)
|
|
|
|
|
//buffer[i] = static_cast<int16_t>(sumbuf[i] * 0x7fff);
|
|
|
|
|
//#endif
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Dexed::keydown(int16_t pitch, uint8_t velo) { |
|
|
|
|