From 2aae9799e1d96d827ad156aeafa549deabd51e5d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 27 Jan 2019 17:02:40 +0100 Subject: Re-instate instrument v1.0 support. --- src/instrument.cc | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'src/instrument.cc') diff --git a/src/instrument.cc b/src/instrument.cc index 05ac17d..29619d8 100644 --- a/src/instrument.cc +++ b/src/instrument.cc @@ -54,21 +54,44 @@ bool Instrument::isValid() const return this == magic; } -Sample* Instrument::sample(level_t level, size_t pos) +const Sample* Instrument::sample(level_t level, size_t pos) { - return powerlist.get(level * mod); + if(version >= VersionStr("2.0")) + { + // Version 2.0 + return powerlist.get(level * mod); + } + else + { + // Version 1.0 + auto s = samples.get(level * mod); + if(s.size() == 0) + { + return nullptr; + } + + return rand.choose(s); + } +} + +void Instrument::addSample(level_t a, level_t b, const Sample* s) +{ + samples.insert(a, b, s); } void Instrument::finalise() { - std::vector::iterator s = samplelist.begin(); - while(s != samplelist.end()) + if(version >= VersionStr("2.0")) { - powerlist.add(*s); - s++; + std::vector::iterator s = samplelist.begin(); + while(s != samplelist.end()) + { + powerlist.add(*s); + s++; + } + + powerlist.finalise(); } - - powerlist.finalise(); } const std::string& Instrument::getName() const -- cgit v1.2.3