diff --git a/.fm_op_kernel.cpp.swp b/.fm_op_kernel.cpp.swp deleted file mode 100644 index e9aa84b..0000000 Binary files a/.fm_op_kernel.cpp.swp and /dev/null differ diff --git a/config.h b/config.h index 12ae091..c5853bf 100644 --- a/config.h +++ b/config.h @@ -22,18 +22,18 @@ */ -//#define TEST_MIDI 1 +#define TEST_MIDI 1 #define TEST_NOTE 40 #define TEST_VEL_MIN 60 #define TEST_VEL_MAX 110 +#define SHOW_DEXED_TIMING 1 #define DEBUG 1 #define SERIAL_SPEED 38400 #define VOLUME 0.1 #define SAMPLE_RATE 44100 //#define DEXED_ENGINE DEXED_ENGINE_MODERN #define USE_ONBOARD_USB_HOST 1 -//#define SHOW_DEXED_TIMING 1 #define SHOW_MIDI_EVENT 1 #define SHOW_XRUN 1 #define SHOW_CPU_LOAD_MSEC 5000 @@ -48,6 +48,7 @@ #define MASTER_BANK_SELECT 83 // B5 #define USE_TEENSY_DSP 1 +//#define SUM_UP_AS_INT 1 // Use these with the Teensy Audio Shield #define SDCARD_CS_PIN 10 diff --git a/dexed.cpp b/dexed.cpp index 51dec11..6b5f188 100644 --- a/dexed.cpp +++ b/dexed.cpp @@ -127,11 +127,15 @@ void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) for (i = 0; i < n_samples; i += _N_) { AlignedBuf audiobuf; +#ifndef SUM_UP_AS_INT float sumbuf[_N_]; +#endif for (uint8_t j = 0; j < _N_; ++j) { audiobuf.get()[j] = 0; +#ifndef SUM_UP_AS_INT sumbuf[j] = 0.0; +#endif } int32_t lfovalue = lfo.getsample(); @@ -144,22 +148,38 @@ void Dexed::getSamples(uint16_t n_samples, int16_t* buffer) int32_t val = audiobuf.get()[j]; val = val >> 4; #ifdef USE_TEENSY_DSP - int32_t clip_val=signed_saturate_rshift(val,24,9); + 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(clip_val >> 1) / 0x8000; +#ifdef SUM_UP_AS_INT + int32_t tmp = buffer[i + j] + clip_val; + if (buffer[i + j] > 0 && clip_val > 0) + { + if ((tmp < buffer[i + j]) && (tmp < clip_val)) + tmp = 0x8000; + } + else if (buffer[i + j] < 0 && clip_val < 0) + { + if ((tmp > buffer[i + j]) && (tmp > clip_val)) + tmp = 0x7FFF; + } + buffer[i + j] = tmp; +#else + float f = static_cast(clip_val) / 0x8000; if (f > 1) f = 1; if (f < -1) f = -1; sumbuf[j] += f; audiobuf.get()[j] = 0; +#endif } } } - +#ifndef SUM_UP_AS_INT for (uint8_t j = 0; j < _N_; ++j) { buffer[i + j] = static_cast(sumbuf[j] * 0x8000); } +#endif } } @@ -194,7 +214,7 @@ bool Dexed::processMidiMessage(uint8_t type, uint8_t data1, uint8_t data2) controllers.refresh(); break; case 32: // BankSelect LSB - bank=data2; + bank = data2; break; case 64: sustain = value > 63;