Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sources/Application/Instruments/I_Instrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ void I_Instrument::SaveContent(tinyxml2::XMLPrinter *printer) {
}

// Save all the instrument's parameters
for (auto it = Variables()->begin(); it != Variables()->end(); it++) {
for (auto it = Variables().begin(); it != Variables().end(); it++) {
printer->OpenElement("PARAM");
printer->PushAttribute("NAME", (*it)->GetName());
printer->PushAttribute("VALUE", (*it)->GetString().c_str());
Expand Down Expand Up @@ -83,7 +83,7 @@ void I_Instrument::RestoreContent(PersistencyDocument *doc) {
bool found = false;

// Find the variable with this name and set its value
for (auto it = Variables()->begin(); it != Variables()->end(); it++) {
for (auto it = Variables().begin(); it != Variables().end(); it++) {
if (!strcasecmp((*it)->GetName(), name)) {
(*it)->SetString(value);
// Trace::Log("I_INSTRUMENT", "Set parameter: %s = %s", name,
Expand Down Expand Up @@ -114,7 +114,7 @@ void I_Instrument::RestoreContent(PersistencyDocument *doc) {
}

void I_Instrument::Purge() {
for (auto it = Variables()->begin(); it != Variables()->end(); it++) {
for (auto it = Variables().begin(); it != Variables().end(); it++) {
(*it)->Reset();
}
};
4 changes: 2 additions & 2 deletions sources/Application/Instruments/I_Instrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class I_Instrument : public VariableContainer,
etl::string<MAX_INSTRUMENT_NAME_LENGTH> name_;

public:
I_Instrument(etl::ilist<Variable *> *list,
I_Instrument(etl::array_view<Variable *> list,
const char *nodeName = "INSTRUMENT",
bool registerWithPersistence = false)
: VariableContainer(list),
Expand Down Expand Up @@ -113,7 +113,7 @@ class I_Instrument : public VariableContainer,

virtual void GetTableState(TableSaveState &state) = 0;
virtual void SetTableState(TableSaveState &state) = 0;
virtual etl::ilist<Variable *> *Variables() = 0;
virtual etl::array_view<Variable *> Variables() = 0;

// Persistent implementation
virtual void SaveContent(tinyxml2::XMLPrinter *printer) override;
Expand Down
3 changes: 1 addition & 2 deletions sources/Application/Instruments/InstrumentBank.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,7 @@ unsigned short InstrumentBank::Clone(unsigned short i) {
return NO_MORE_INSTRUMENT;
}

for (auto it = src->Variables()->begin(); it != src->Variables()->end();
it++) {
for (auto it = src->Variables().begin(); it != src->Variables().end(); it++) {
Variable *dstV = dst->FindVariable((*it)->GetID());
if (dstV) {
dstV->CopyFrom(**it);
Expand Down
12 changes: 3 additions & 9 deletions sources/Application/Instruments/MacroInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,17 @@
#include <assert.h>

MacroInstrument::MacroInstrument()
: I_Instrument(&variables_),
: I_Instrument(variables_),
shape_(FourCC::MacroInstrumentShape, braids::algo_values,
braids::MACRO_OSC_SHAPE_LAST - 2, 0),
timbre_(FourCC::MacroInstrmentTimbre, 0x7f),
color_(FourCC::MacroInstrumentColor, 0x7f),
attack_(FourCC::MacroInstrumentAttack, 0),
decay_(FourCC::MacroInstrumentDecay, 0x05),
signature_(FourCC::MacroInstrumentSignature, 0) {
signature_(FourCC::MacroInstrumentSignature, 0),
variables_{&shape_, &timbre_, &color_, &attack_, &decay_, &signature_} {

running_ = false;

variables_.insert(variables_.end(), &shape_);
variables_.insert(variables_.end(), &timbre_);
variables_.insert(variables_.end(), &color_);
variables_.insert(variables_.end(), &attack_);
variables_.insert(variables_.end(), &decay_);
variables_.insert(variables_.end(), &signature_);
}

MacroInstrument::~MacroInstrument() {}
Expand Down
6 changes: 3 additions & 3 deletions sources/Application/Instruments/MacroInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class MacroInstrument : public I_Instrument, I_Observer {
virtual bool GetTableAutomation();
virtual void GetTableState(TableSaveState &state);
virtual void SetTableState(TableSaveState &state);
etl::ilist<Variable *> *Variables() { return &variables_; };
etl::array_view<Variable *> Variables() { return variables_; };

// Engine playback start callback
virtual void OnStart();
Expand All @@ -52,8 +52,6 @@ class MacroInstrument : public I_Instrument, I_Observer {

protected:
private:
etl::list<Variable *, 7> variables_;

bool running_;

braids::MacroOscillator osc_;
Expand All @@ -71,6 +69,8 @@ class MacroInstrument : public I_Instrument, I_Observer {
Variable decay_;
Variable signature_;

etl::array<Variable *, 7> variables_;

uint16_t gain_lp_;
uint16_t remain_;
};
Expand Down
14 changes: 4 additions & 10 deletions sources/Application/Instruments/MidiInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ TimerService *MidiInstrument::timerSvc_ = 0;
MidiInstrument::NoteOffInfo MidiInstrument::NoteOffInfo::current = {0, 0};

MidiInstrument::MidiInstrument()
: I_Instrument(&variables_), channel_(FourCC::MidiInstrumentChannel, 0),
: I_Instrument(variables_), channel_(FourCC::MidiInstrumentChannel, 0),
noteLen_(FourCC::MidiInstrumentNoteLength, 0),
volume_(FourCC::MidiInstrumentVolume, 255),
table_(FourCC::MidiInstrumentTable, VAR_OFF),
tableAuto_(FourCC::MidiInstrumentTableAutomation, false),
program_(FourCC::MidiInstrumentProgram, VAR_OFF) {
program_(FourCC::MidiInstrumentProgram, VAR_OFF),
variables_{&channel_, &noteLen_, &volume_,
&table_, &tableAuto_, &program_} {

if (svc_ == 0) {
svc_ = MidiService::GetInstance();
Expand All @@ -36,14 +38,6 @@ MidiInstrument::MidiInstrument()
if (timerSvc_ == 0) {
timerSvc_ = TimerService::GetInstance();
};

// name_ is now an etl::string in the base class, not a Variable
variables_.insert(variables_.end(), &channel_);
variables_.insert(variables_.end(), &noteLen_);
variables_.insert(variables_.end(), &volume_);
variables_.insert(variables_.end(), &table_);
variables_.insert(variables_.end(), &tableAuto_);
variables_.insert(variables_.end(), &program_);
}

MidiInstrument::~MidiInstrument(){};
Expand Down
7 changes: 4 additions & 3 deletions sources/Application/Instruments/MidiInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class MidiInstrument : public I_Instrument {
virtual bool GetTableAutomation();
virtual void GetTableState(TableSaveState &state);
virtual void SetTableState(TableSaveState &state);
etl::ilist<Variable *> *Variables() { return &variables_; };
etl::array_view<Variable *> Variables() { return variables_; };

void SetChannel(int i);
void SendProgramChange(int channel, int program);
Expand All @@ -78,8 +78,6 @@ class MidiInstrument : public I_Instrument {
};

private:
etl::list<Variable *, 7> variables_;

etl::array<uint8_t, MAX_MIDI_CHORD_NOTES + 1> lastNotes_[SONG_CHANNEL_COUNT];
int remainingTicks_;
bool playing_;
Expand All @@ -102,6 +100,9 @@ class MidiInstrument : public I_Instrument {
Variable table_;
Variable tableAuto_;
Variable program_;

etl::array<Variable *, 7> variables_;

static MidiService *svc_;
static TimerService *timerSvc_;
};
Expand Down
2 changes: 1 addition & 1 deletion sources/Application/Instruments/NoneInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include "Application/Persistency/PersistenceConstants.h"
#include "Externals/etl/include/etl/string.h"

NoneInstrument::NoneInstrument() : I_Instrument(&variables_) {}
NoneInstrument::NoneInstrument() : I_Instrument(variables_) {}

NoneInstrument::~NoneInstrument(){};

Expand Down
4 changes: 2 additions & 2 deletions sources/Application/Instruments/NoneInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ class NoneInstrument : public I_Instrument {
virtual bool GetTableAutomation();
virtual void GetTableState(TableSaveState &state);
virtual void SetTableState(TableSaveState &state);
etl::ilist<Variable *> *Variables() { return &variables_; };
etl::array_view<Variable *> Variables() { return variables_; };

private:
etl::list<Variable *, 2> variables_;
etl::array<Variable *, 2> variables_{};
};
#endif
27 changes: 7 additions & 20 deletions sources/Application/Instruments/OpalInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static const unsigned int noteFNumbers[] = {342, 363, 385, 408, 432, 458,
485, 514, 544, 577, 611, 647};

OpalInstrument::OpalInstrument()
: I_Instrument(&variables_),
: I_Instrument(variables_),
algorithm_(FourCC::OPALInstrumentAlgorithm, algorithms, 6, 0),
feedback_(FourCC::OPALInstrumentFeedback, 0),
deepTremeloVibrato_(FourCC::OPALInstrumentDeepTremeloVibrato, 0),
Expand All @@ -49,25 +49,12 @@ OpalInstrument::OpalInstrument()
op2WaveShape_(FourCC::OPALInstrumentOp2WaveShape, waveShapes, 8, 0),
op2TremVibSusKSR_(FourCC::OPALInstrumentOp2TremVibSusKSR, 0x2),
op2KeyScaleLevel_(FourCC::OPALInstrumentOp2KeyScaleLevel, kslValues, 4,
0) {

// name_ is now an etl::string in the base class, not a Variable
variables_.insert(variables_.end(), &algorithm_);
variables_.insert(variables_.end(), &feedback_);
variables_.insert(variables_.end(), &deepTremeloVibrato_);
variables_.insert(variables_.end(), &op1Level_);
variables_.insert(variables_.end(), &op1Multiplier_);
variables_.insert(variables_.end(), &op1ADSR_);
variables_.insert(variables_.end(), &op1WaveShape_);
variables_.insert(variables_.end(), &op1KeyScaleLevel_);
variables_.insert(variables_.end(), &op1TremVibSusKSR_);
variables_.insert(variables_.end(), &op2Level_);
variables_.insert(variables_.end(), &op2Multiplier_);
variables_.insert(variables_.end(), &op2ADSR_);
variables_.insert(variables_.end(), &op2WaveShape_);
variables_.insert(variables_.end(), &op2KeyScaleLevel_);
variables_.insert(variables_.end(), &op2TremVibSusKSR_);
}
0),
variables_{&algorithm_, &feedback_, &deepTremeloVibrato_,
&op1Level_, &op1Multiplier_, &op1ADSR_,
&op1WaveShape_, &op1KeyScaleLevel_, &op1TremVibSusKSR_,
&op2Level_, &op2Multiplier_, &op2ADSR_,
&op2WaveShape_, &op2KeyScaleLevel_, &op2TremVibSusKSR_} {}

OpalInstrument::~OpalInstrument(){};

Expand Down
6 changes: 3 additions & 3 deletions sources/Application/Instruments/OpalInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class OpalInstrument : public I_Instrument {
virtual bool GetTableAutomation();
virtual void GetTableState(TableSaveState &state);
virtual void SetTableState(TableSaveState &state);
etl::ilist<Variable *> *Variables() { return &variables_; };
etl::array_view<Variable *> Variables() { return variables_; };

void setChannel(uint8_t channel);

Expand All @@ -56,8 +56,6 @@ class OpalInstrument : public I_Instrument {

uint8_t breg;

etl::list<Variable *, 16> variables_;

Variable algorithm_;
Variable feedback_;
Variable deepTremeloVibrato_;
Expand All @@ -76,6 +74,8 @@ class OpalInstrument : public I_Instrument {
// Termelo(AM),Vibrato(VIB),SustainingVoice(EG),EnveloperScale(KSR)
Variable op2TremVibSusKSR_;
Variable op2KeyScaleLevel_;

etl::array<Variable *, 16> variables_;
};

#endif
29 changes: 6 additions & 23 deletions sources/Application/Instruments/SIDInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Variable SIDInstrument::fltmode2_(FourCC::SIDInstrument2FilterMode,
Variable SIDInstrument::vol2_(FourCC::SIDInstrument2Volume, 0xF);

SIDInstrument::SIDInstrument(SIDInstrumentInstance chip)
: I_Instrument(&variables_), chip_(chip),
: I_Instrument(variables_), chip_(chip),
vpw_(FourCC::SIDInstrumentPulseWidth, 0x800),
vwf_(FourCC::SIDInstrumentWaveform, sidWaveformText, DWF_LAST, 0x1),
vsync_(FourCC::SIDInstrumentVSync, false),
Expand All @@ -56,28 +56,11 @@ SIDInstrument::SIDInstrument(SIDInstrumentInstance chip)
vfon_(FourCC::SIDInstrumentFilterOn, false),
table_(FourCC::SIDInstrumentTable, -1),
tableAuto_(FourCC::SIDInstrumentTableAutomation, false),
osc_(FourCC::SIDInstrumentOSCNumber, 0) {

// name_ is now an etl::string in the base class, not a Variable
variables_.insert(variables_.end(), &vpw_);
variables_.insert(variables_.end(), &vwf_);
variables_.insert(variables_.end(), &vsync_);
variables_.insert(variables_.end(), &vring_);
variables_.insert(variables_.end(), &vadsr_);
variables_.insert(variables_.end(), &vfon_);
variables_.insert(variables_.end(), &table_);
variables_.insert(variables_.end(), &tableAuto_);
variables_.insert(variables_.end(), &osc_);
variables_.insert(variables_.end(), &fltcut1_);
variables_.insert(variables_.end(), &fltres1_);
variables_.insert(variables_.end(), &fltmode1_);
variables_.insert(variables_.end(), &vol1_);

variables_.insert(variables_.end(), &fltcut2_);
variables_.insert(variables_.end(), &fltres2_);
variables_.insert(variables_.end(), &fltmode2_);
variables_.insert(variables_.end(), &vol2_);
}
osc_(FourCC::SIDInstrumentOSCNumber, 0),
variables_{&vpw_, &vwf_, &vsync_, &vring_, &vadsr_,
&vfon_, &table_, &tableAuto_, &osc_, &fltcut1_,
&fltres1_, &fltmode1_, &vol1_, &fltcut2_, &fltres2_,
&fltmode2_, &vol2_} {}

SIDInstrument::~SIDInstrument(){};

Expand Down
6 changes: 3 additions & 3 deletions sources/Application/Instruments/SIDInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class SIDInstrument : public I_Instrument {
virtual bool GetTableAutomation();
virtual void GetTableState(TableSaveState &state);
virtual void SetTableState(TableSaveState &state);
etl::ilist<Variable *> *Variables() { return &variables_; };
etl::array_view<Variable *> Variables() { return variables_; };

SIDInstrumentInstance GetChip() { return chip_; };
unsigned short GetOsc() { return osc_.GetInt(); };
Expand All @@ -92,8 +92,6 @@ class SIDInstrument : public I_Instrument {
const char *GetChipName() { return (chip_ == SID1) ? "SID #1" : "SID #2"; };

private:
etl::list<Variable *, 19> variables_;

SIDInstrumentInstance chip_; // SID1 or SID2
bool render_ = false;

Expand Down Expand Up @@ -122,6 +120,8 @@ class SIDInstrument : public I_Instrument {
Variable tableAuto_;
Variable osc_; // 0, 1 or 2

etl::array<Variable *, 19> variables_;

// all these settings are shared by all oscillators on a single SID Chip
static Variable fltcut1_;
static Variable fltcut2_;
Expand Down
33 changes: 8 additions & 25 deletions sources/Application/Instruments/SampleInstrument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ signed char SampleInstrument::lastMidiNote_[SONG_CHANNEL_COUNT];
#define KRATE_SAMPLE_COUNT 100

SampleInstrument::SampleInstrument()
: I_Instrument(&variables_), sample_(FourCC::SampleInstrumentSample),
: I_Instrument(variables_), sample_(FourCC::SampleInstrumentSample),
volume_(FourCC::SampleInstrumentVolume, 0x80),
interpolation_(FourCC::SampleInstrumentInterpolation, interpolationTypes,
2, 0),
Expand All @@ -61,7 +61,12 @@ SampleInstrument::SampleInstrument()
loopStart_(FourCC::SampleInstrumentLoopStart, 0),
loopEnd_(FourCC::SampleInstrumentEnd, 0),
table_(FourCC::SampleInstrumentTable, -1),
tableAuto_(FourCC::SampleInstrumentTableAutomation, false) {
tableAuto_(FourCC::SampleInstrumentTableAutomation, false),
variables_{&sample_, &volume_, &interpolation_, &crush_,
&drive_, &downsample_, &rootNote_, &fineTune_,
&pan_, &cutoff_, &reso_, &filterMix_,
&filterMode_, &start_, &loopMode_, &loopStart_,
&loopEnd_, &table_, &tableAuto_} {

// Initialize MIDI notes
for (int i = 0; i < SONG_CHANNEL_COUNT; i++) {
Expand All @@ -73,33 +78,11 @@ SampleInstrument::SampleInstrument()
dirty_ = false;
running_ = false;

// Initialize exported variables
// name_ is now an etl::string in the base class, not a Variable
variables_.insert(variables_.end(), &sample_);
sample_.AddObserver(*this);

variables_.insert(variables_.end(), &volume_);
variables_.insert(variables_.end(), &interpolation_);
variables_.insert(variables_.end(), &crush_);
variables_.insert(variables_.end(), &drive_);
variables_.insert(variables_.end(), &downsample_);
variables_.insert(variables_.end(), &rootNote_);
variables_.insert(variables_.end(), &fineTune_);
variables_.insert(variables_.end(), &pan_);
variables_.insert(variables_.end(), &cutoff_);
variables_.insert(variables_.end(), &reso_);
variables_.insert(variables_.end(), &filterMix_);
variables_.insert(variables_.end(), &filterMode_);
variables_.insert(variables_.end(), &start_);
start_.AddObserver(*this);
variables_.insert(variables_.end(), &loopMode_);
loopMode_.SetInt(0);
variables_.insert(variables_.end(), &loopStart_);
loopStart_.AddObserver(*this);
variables_.insert(variables_.end(), &loopEnd_);
loopEnd_.AddObserver(*this);
variables_.insert(variables_.end(), &table_);
variables_.insert(variables_.end(), &tableAuto_);

tableState_.Reset();
slicePoints_.fill(0);
Expand Down Expand Up @@ -1540,7 +1523,7 @@ void SampleInstrument::RestoreContent(PersistencyDocument *doc) {
setSliceFromString(name.c_str() + 2, value.c_str());
} else {
bool found = false;
for (auto it = Variables()->begin(); it != Variables()->end(); it++) {
for (auto it = Variables().begin(); it != Variables().end(); it++) {
if (!strcasecmp((*it)->GetName(), name.c_str())) {
(*it)->SetString(value.c_str());
found = true;
Expand Down
Loading
Loading