/* ============================================================================== shifter_voice.h Created: 25 Oct 2025 2:09:42pm Author: mickl ============================================================================== */ #pragma once #include "adsr.h" #include "port.h" #include "math.h" #include #include class ShifterVoice { public: ShifterVoice() {} ~ShifterVoice() {} void Init(float sample_rate); bool IsActive(); void Trigger(int midi_note); void Release(); void Process(); float CurrentAmplitude(); float CurrentPeriod(); bool PeriodOverflow(); void SetPortamentoTime(float time); void SetAdsrTimes(float attack, float decay, float release); float GetPanning(int channel) const; int GetMidiNote() const { return current_midi; } bool onoff_; private: Port portamento_; Adsr amplitude_envelope_; bool overflow_; float sample_rate_; int current_midi; float current_period_; float current_amplitude; float period_counter; float panning; };