Skip to content

Commit

Permalink
Simplified code of GOPipeConfig and GOPipeConfigNode (GrandOrgue#1782)
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg68 authored Feb 1, 2024
1 parent c59e7c7 commit ee7aec1
Show file tree
Hide file tree
Showing 6 changed files with 191 additions and 265 deletions.
113 changes: 12 additions & 101 deletions src/grandorgue/model/pipe-config/GOPipeConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,31 @@
#include "config/GOConfigReader.h"
#include "config/GOConfigWriter.h"

#include "GOPipeConfigListener.h"
#include "GOPipeUpdateCallback.h"

GOPipeConfig::GOPipeConfig(
GOPipeConfigListener &listener, GOPipeUpdateCallback *callback)
: r_listener(listener),
m_Callback(callback),
m_Group(),
m_NamePrefix(),
m_AudioGroup(),
m_Amplitude(0),
m_DefaultAmplitude(0),
m_Amplitude(0),
m_DefaultGain(0),
m_Gain(0),
m_PitchTuning(0),
m_PitchCorrection(0),
m_Gain(0),
m_ManualTuning(0),
m_AutoTuningCorrection(0),
m_Delay(0),
m_DefaultDelay(0),
m_Delay(0),
m_ReleaseTail(0),
m_BitsPerSample(-1),
m_Compress(-1),
m_Channels(-1),
m_LoopLoad(-1),
m_Compress(-1),
m_AttackLoad(-1),
m_ReleaseLoad(-1),
m_IgnorePitch(-1),
m_ReleaseTail(0) {}
m_IgnorePitch(-1) {}

static const wxString WX_TUNING = wxT("Tuning");
static const wxString WX_MANUAL_TUNING = wxT("ManualTuning");
Expand Down Expand Up @@ -214,96 +211,10 @@ void GOPipeConfig::Save(GOConfigWriter &cfg) {
m_Group, m_NamePrefix + wxT("ReleaseTail"), (int)m_ReleaseTail);
}

GOPipeUpdateCallback *GOPipeConfig::GetCallback() { return m_Callback; }

void GOPipeConfig::SetAudioGroup(const wxString &str) {
m_AudioGroup = str;
m_Callback->UpdateAudioGroup();
r_listener.NotifyPipeConfigModified();
}

float GOPipeConfig::GetAmplitude() { return m_Amplitude; }

float GOPipeConfig::GetDefaultAmplitude() { return m_DefaultAmplitude; }

void GOPipeConfig::SetAmplitude(float amp) {
m_Amplitude = amp;
m_Callback->UpdateAmplitude();
r_listener.NotifyPipeConfigModified();
}

float GOPipeConfig::GetGain() { return m_Gain; }

float GOPipeConfig::GetDefaultGain() { return m_DefaultGain; }

void GOPipeConfig::SetGain(float gain) {
m_Gain = gain;
m_Callback->UpdateAmplitude();
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetManualTuning(float cent) {
if (cent < -1800)
cent = -1800;
if (cent > 1800)
cent = 1800;
m_ManualTuning = cent;
m_Callback->UpdateTuning();
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetAutoTuningCorrection(float cent) {
if (cent < -1800)
cent = -1800;
if (cent > 1800)
cent = 1800;
m_AutoTuningCorrection = cent;
m_Callback->UpdateTuning();
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetDelay(unsigned delay) {
m_Delay = delay;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetBitsPerSample(int value) {
m_BitsPerSample = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetCompress(int value) {
m_Compress = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetChannels(int value) {
m_Channels = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetLoopLoad(int value) {
m_LoopLoad = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetAttackLoad(int value) {
m_AttackLoad = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetReleaseLoad(int value) {
m_ReleaseLoad = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetIgnorePitch(int value) {
m_IgnorePitch = value;
r_listener.NotifyPipeConfigModified();
}

void GOPipeConfig::SetReleaseTail(unsigned releaseTail) {
m_ReleaseTail = releaseTail;
m_Callback->UpdateReleaseTail();
r_listener.NotifyPipeConfigModified();
void GOPipeConfig::SetPitchMember(float cents, float &member) {
if (cents < -1800)
cents = -1800;
if (cents > 1800)
cents = 1800;
SetSmallMember(cents, member, &GOPipeUpdateCallback::UpdateTuning);
}
105 changes: 73 additions & 32 deletions src/grandorgue/model/pipe-config/GOPipeConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@

#include <wx/string.h>

#include "GOPipeConfigListener.h"
#include "GOPipeUpdateCallback.h"

class GOConfigReader;
class GOConfigWriter;
class GOPipeConfigListener;
class GOPipeUpdateCallback;

class GOPipeConfig {
private:
Expand All @@ -22,85 +24,124 @@ class GOPipeConfig {
wxString m_Group;
wxString m_NamePrefix;
wxString m_AudioGroup;
float m_Amplitude;
float m_DefaultAmplitude;
float m_Amplitude;
float m_DefaultGain;
float m_Gain;
// ODF pitch tuning offset for using withot auto-tuning
float m_PitchTuning;
// ODF pitch tuning offset for using with auto-tuning
float m_PitchCorrection;
float m_Gain;
float m_ManualTuning;
float m_AutoTuningCorrection;
unsigned m_Delay;
unsigned m_DefaultDelay;
unsigned m_Delay;
unsigned m_ReleaseTail; // the max release length in ms
int m_BitsPerSample;
int m_Compress;
int m_Channels;
int m_LoopLoad;
int m_Compress;
int m_AttackLoad;
int m_ReleaseLoad;
int m_IgnorePitch;
unsigned m_ReleaseTail; // the max release length in ms

void ReadTuning(
GOConfigReader &cfg, const wxString &group, const wxString &prefix);

/* two generic setters SetSmallMember and SetLargeMember differ only in
* passing values */

#define SET_MEMBER_BODY(value, member, callbackFun) \
member = value; \
if (callbackFun) \
(m_Callback->*callbackFun)(); \
r_listener.NotifyPipeConfigModified();

template <typename T>
void SetSmallMember(
const T value,
T &member,
void (GOPipeUpdateCallback::*callbackFun)() = nullptr) {
SET_MEMBER_BODY(value, member, callbackFun)
}

template <typename T>
void SetLargeMember(
const T &value,
T &member,
void (GOPipeUpdateCallback::*callbackFun)() = nullptr) {
SET_MEMBER_BODY(value, member, callbackFun)
}

void SetPitchMember(float cents, float &member);

public:
GOPipeConfig(GOPipeConfigListener &listener, GOPipeUpdateCallback *callback);

void Init(GOConfigReader &cfg, const wxString &group, const wxString &prefix);
void Load(GOConfigReader &cfg, const wxString &group, const wxString &prefix);
void Save(GOConfigWriter &cfg);

GOPipeUpdateCallback *GetCallback();

float GetAmplitude();
float GetDefaultAmplitude();
void SetAmplitude(float amp);
GOPipeUpdateCallback *GetCallback() const { return m_Callback; }

float GetGain();
float GetDefaultGain();
void SetGain(float gain);
const wxString &GetAudioGroup() const { return m_AudioGroup; }
void SetAudioGroup(const wxString &str) {
SetLargeMember(str, m_AudioGroup, &GOPipeUpdateCallback::UpdateAudioGroup);
}

float GetDefaultAmplitude() const { return m_DefaultAmplitude; }
float GetAmplitude() const { return m_Amplitude; }
void SetAmplitude(float amp) {
SetSmallMember(amp, m_Amplitude, &GOPipeUpdateCallback::UpdateAmplitude);
}

float GetDefaultGain() const { return m_DefaultGain; }
float GetGain() const { return m_Gain; }
void SetGain(float gain) {
SetSmallMember(gain, m_Gain, &GOPipeUpdateCallback::UpdateAmplitude);
}

float GetPitchTuning() const { return m_PitchTuning; }
float GetPitchCorrection() const { return m_PitchCorrection; }

float GetManualTuning() const { return m_ManualTuning; }
void SetManualTuning(float cent);
void SetManualTuning(float cents) { SetPitchMember(cents, m_ManualTuning); }

float GetAutoTuningCorrection() const { return m_AutoTuningCorrection; }
void SetAutoTuningCorrection(float cent);
void SetAutoTuningCorrection(float cents) {
SetPitchMember(cents, m_AutoTuningCorrection);
}

unsigned GetDefaultDelay() const { return m_DefaultDelay; }

unsigned GetDelay() const { return m_Delay; }
void SetDelay(unsigned delay);
void SetDelay(unsigned delay) { SetSmallMember(delay, m_Delay); }

const wxString &GetAudioGroup() const { return m_AudioGroup; }
void SetAudioGroup(const wxString &str);
unsigned GetReleaseTail() const { return m_ReleaseTail; }
void SetReleaseTail(unsigned releaseTail) {
SetSmallMember(
releaseTail, m_ReleaseTail, &GOPipeUpdateCallback::UpdateReleaseTail);
}

int GetBitsPerSample() const { return m_BitsPerSample; }
void SetBitsPerSample(int value);

int GetCompress() const { return m_Compress; }
void SetCompress(int value);
void SetBitsPerSample(int value) { SetSmallMember(value, m_BitsPerSample); }

int GetChannels() const { return m_Channels; }
void SetChannels(int value);
void SetChannels(int value) { SetSmallMember(value, m_Channels); }

int GetLoopLoad() const { return m_LoopLoad; }
void SetLoopLoad(int value);
void SetLoopLoad(int value) { SetSmallMember(value, m_LoopLoad); }

int GetCompress() const { return m_Compress; }
void SetCompress(int value) { SetSmallMember(value, m_Compress); }

int GetAttackLoad() const { return m_AttackLoad; }
void SetAttackLoad(int value);
void SetAttackLoad(int value) { SetSmallMember(value, m_AttackLoad); }

int GetReleaseLoad() const { return m_ReleaseLoad; }
void SetReleaseLoad(int value);
void SetReleaseLoad(int value) { SetSmallMember(value, m_ReleaseLoad); }

int IsIgnorePitch() const { return m_IgnorePitch; }
void SetIgnorePitch(int value);

unsigned GetReleaseTail() const { return m_ReleaseTail; }
void SetReleaseTail(unsigned releaseTail);
void SetIgnorePitch(int value) { SetSmallMember(value, m_IgnorePitch); }
};

#endif
Loading

0 comments on commit ee7aec1

Please sign in to comment.