diff --git a/src/Makefile b/src/Makefile index d6f5796..a1f65d0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,14 +6,38 @@ CIRCLE_STDLIB_DIR = ../circle-stdlib SYNTH_DEXED_DIR = ../Synth_Dexed/src CMSIS_DIR = ../CMSIS_5/CMSIS -OBJS = main.o kernel.o minidexed.o config.o userinterface.o uimenu.o \ - mididevice.o midikeyboard.o serialmididevice.o pckeyboard.o \ - sysexfileloader.o performanceconfig.o perftimer.o \ - effect_compressor.o effect_platervbstereo.o \ - fx.o fx_components.o \ - fx_svf.o fx_tube.o fx_chorus.o fx_flanger.o fx_orbitone.o fx_phaser.o \ - fx_delay.o fx_diffuser.o fx_pitch_shifter.o fx_shimmer_reverb.o fx_dry.o \ - uibuttons.o midipin.o +OBJS := main.o +OBJS += kernel.o +OBJS += minidexed.o +OBJS += config.o +OBJS += userinterface.o +OBJS += uimenu.o +OBJS += mididevice.o +OBJS += midikeyboard.o +OBJS += serialmididevice.o +OBJS += pckeyboard.o +OBJS += sysexfileloader.o +OBJS += performanceconfig.o +OBJS += perftimer.o +OBJS += effect_compressor.o +OBJS += effect_platervbstereo.o +OBJS += fx.o +OBJS += fx_components.o +OBJS += fx_svf.o +OBJS += fx_tube.o +OBJS += fx_chorus.o +OBJS += fx_flanger.o +OBJS += fx_orbitone.o +OBJS += fx_phaser.o +OBJS += fx_delay.o +OBJS += fx_shimmer_helper.o +OBJS += fx_diffuser.o +OBJS += fx_pitch_shifter.o +OBJS += fx_reverberator.o +OBJS += fx_shimmer_reverb.o +OBJS += fx_dry.o +OBJS += uibuttons.o +OBJS += midipin.o OPTIMIZE = -O3 diff --git a/src/fx_engine.hpp b/src/fx_engine.hpp index 8e68a22..2fd6d5b 100644 --- a/src/fx_engine.hpp +++ b/src/fx_engine.hpp @@ -481,7 +481,7 @@ private: if(enable_lfo) { - for(size_t i = 0; i < size; ++i) + for(size_t i = 0; i < LFOIndex::kLFOCount; ++i) { this->lfo_[i]->inspect(inspector, deepInspection, tag + ".lfo_[ " + std::to_string(i) + " ]"); } diff --git a/src/fx_pitch_shifter.cpp b/src/fx_pitch_shifter.cpp index 08b7515..550af94 100644 --- a/src/fx_pitch_shifter.cpp +++ b/src/fx_pitch_shifter.cpp @@ -1,8 +1,11 @@ #include "fx_pitch_shifter.h" +#include "fx_shimmer_helper.h" #include #include +#define PITCH_SHIFT_BOUND 36.0f + #define ONE_POLE(out, in, coefficient) out += (coefficient) * ((in) - out); #define TAIL , -1 @@ -11,11 +14,12 @@ PitchShifter::PitchShifter(float32_t sampling_rate) : FXElement(sampling_rate), engine_(sampling_rate), phase_(0.0f), + transpose_(0.0f), ratio_(0.0f), size_(-1.0f), sample_size_(0.0f) { - this->setRatio(0.5f); + this->setTranspose(0.0f); this->setSize(0.5f); } @@ -68,14 +72,19 @@ void PitchShifter::processSample(float32_t inL, float32_t inR, float32_t& outL, c.writeAndLoad(outR, 0.0f); } -void PitchShifter::setRatio(float32_t ratio) +void PitchShifter::setTranspose(float32_t transpose) { - this->ratio_ = constrain(ratio, 0.0f, 1.0f); + transpose = constrain(transpose, -PITCH_SHIFT_BOUND, PITCH_SHIFT_BOUND); + if(this->transpose_ != transpose) + { + this->transpose_ = transpose; + this->ratio_ = semitoneToRatio(transpose); + } } -float32_t PitchShifter::getRatio() const +float32_t PitchShifter::getTranspose() const { - return this->ratio_; + return this->transpose_; } void PitchShifter::setSize(float32_t size) diff --git a/src/fx_pitch_shifter.h b/src/fx_pitch_shifter.h index b1ae39c..5d31d17 100644 --- a/src/fx_pitch_shifter.h +++ b/src/fx_pitch_shifter.h @@ -36,8 +36,8 @@ public: virtual void reset() override; virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; - void setRatio(float32_t ratio); - float32_t getRatio() const; + void setTranspose(float32_t transpose); + float32_t getTranspose() const; void setSize(float32_t size); float32_t getSize() const; @@ -47,6 +47,7 @@ private: Engine engine_; float32_t phase_; + float32_t transpose_; float32_t ratio_; float32_t size_; float32_t sample_size_; diff --git a/src/fx_reverberator.h b/src/fx_reverberator.h index 5412b4a..b8a8204 100644 --- a/src/fx_reverberator.h +++ b/src/fx_reverberator.h @@ -97,7 +97,7 @@ private: if(deepInspection) { - this->engine.dump(out, deepInspection, tag + ".engine_"); + this->engine_.dump(out, deepInspection, tag + ".engine_"); } ) diff --git a/src/fx_shimmer_helper.cpp b/src/fx_shimmer_helper.cpp index 4833aa9..bed1fad 100644 --- a/src/fx_shimmer_helper.cpp +++ b/src/fx_shimmer_helper.cpp @@ -1,5 +1,3 @@ -#pragma once - #include "fx_shimmer_helper.h" const float lut_pitch_ratio_high[] = { diff --git a/src/fx_shimmer_helper.h b/src/fx_shimmer_helper.h index 53d746b..b501f32 100644 --- a/src/fx_shimmer_helper.h +++ b/src/fx_shimmer_helper.h @@ -5,10 +5,10 @@ extern const float lut_pitch_ratio_high[257]; extern const float lut_pitch_ratio_low[257]; -inline float32_t SemitonesToRatio(float32_t semitones) +inline float32_t semitoneToRatio(float32_t semitones) { float32_t pitch = semitones + 128.0f; - MAKE_INTEGRAL_FRACTIONAL(pitch) + MAKE_INTEGRAL_FRACTIONAL(pitch); return lut_pitch_ratio_high[pitch_integral] * lut_pitch_ratio_low[static_cast(pitch_fractional * 256.0f)]; } diff --git a/src/test/Makefile b/src/test/Makefile index c9c1e47..f37dbf5 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -34,8 +34,10 @@ FX__SRCS += ../fx_orbitone.cpp FX__SRCS += ../fx_flanger.cpp FX__SRCS += ../fx_delay.cpp FX__SRCS += ../effect_platervbstereo.cpp +FX__SRCS += ../fx_shimmer_helper.cpp FX__SRCS += ../fx_diffuser.cpp FX__SRCS += ../fx_pitch_shifter.cpp +FX__SRCS += ../fx_reverberator.cpp FX__SRCS += ../fx_shimmer_reverb.cpp FX__SRCS += ../fx_dry.cpp FX__SRCS += ../fx_rack.cpp diff --git a/src/test/test_unitFXTuning.cpp b/src/test/test_unitFXTuning.cpp index 45357a9..d9a5293 100644 --- a/src/test/test_unitFXTuning.cpp +++ b/src/test/test_unitFXTuning.cpp @@ -131,7 +131,7 @@ TEST(UnitFXTuning, PitchShifter) { PitchShifter fx(SAMPLING_FREQUENCY); fx.setSize(0.2f); - fx.setRatio(0.8f); + fx.setTranspose(24.0f); PREPARE_AUDIO_TEST(size, inSamples, outSamples, full_test_name); SIMPLE_AUDIO_LOOP(inSamples, outSamples, size, inL, inR, outL, outR, fx);