Scope the enums in sfz and remove the prefix

This commit is contained in:
Paul Fd 2021-01-03 23:29:33 +01:00 committed by Paul Ferrand
parent 60b5783753
commit e9941b4337
14 changed files with 113 additions and 113 deletions

View file

@ -53,7 +53,7 @@ void ADSREnvelope::reset(const EGDescription& desc, const Region& region, const
shouldRelease = false; shouldRelease = false;
freeRunning = ( freeRunning = (
(this->sustain == Float(0.0)) (this->sustain == Float(0.0))
|| (region.loopMode == SfzLoopMode::one_shot && region.isOscillator()) || (region.loopMode == LoopMode::one_shot && region.isOscillator())
); );
currentValue = this->start; currentValue = this->start;
currentState = State::Delay; currentState = State::Delay;

View file

@ -145,11 +145,11 @@ extern const OpcodeSpec<float> lofiBitred { 0.0f, Range<float>(0.0f, 100.0f), kI
extern const OpcodeSpec<float> lofiDecim { 0.0f, Range<float>(0.0f, 100.0f), kIgnoreOOB }; extern const OpcodeSpec<float> lofiDecim { 0.0f, Range<float>(0.0f, 100.0f), kIgnoreOOB };
extern const OpcodeSpec<float> rectify { 0.0f, Range<float>(0.0f, 100.0f), kIgnoreOOB }; extern const OpcodeSpec<float> rectify { 0.0f, Range<float>(0.0f, 100.0f), kIgnoreOOB };
extern const OpcodeSpec<unsigned> stringsNumber { maxStrings, Range<unsigned>(0, maxStrings), kEnforceLowerBound }; extern const OpcodeSpec<unsigned> stringsNumber { maxStrings, Range<unsigned>(0, maxStrings), kEnforceLowerBound };
extern const OpcodeSpec<SfzTrigger> trigger { SfzTrigger::attack, Range<SfzTrigger>(SfzTrigger::attack, SfzTrigger::release_key), 0}; extern const OpcodeSpec<Trigger> trigger { Trigger::attack, Range<Trigger>(Trigger::attack, Trigger::release_key), 0};
extern const OpcodeSpec<SfzCrossfadeCurve> crossfadeCurve { SfzCrossfadeCurve::power, Range<SfzCrossfadeCurve>(SfzCrossfadeCurve::gain, SfzCrossfadeCurve::power), 0}; extern const OpcodeSpec<CrossfadeCurve> crossfadeCurve { CrossfadeCurve::power, Range<CrossfadeCurve>(CrossfadeCurve::gain, CrossfadeCurve::power), 0};
extern const OpcodeSpec<SfzOffMode> offMode { SfzOffMode::fast, Range<SfzOffMode>(SfzOffMode::fast, SfzOffMode::time), 0}; extern const OpcodeSpec<OffMode> offMode { OffMode::fast, Range<OffMode>(OffMode::fast, OffMode::time), 0};
extern const OpcodeSpec<SfzVelocityOverride> velocityOverride { SfzVelocityOverride::current, Range<SfzVelocityOverride>(SfzVelocityOverride::current, SfzVelocityOverride::previous), 0}; extern const OpcodeSpec<VelocityOverride> velocityOverride { VelocityOverride::current, Range<VelocityOverride>(VelocityOverride::current, VelocityOverride::previous), 0};
extern const OpcodeSpec<SfzSelfMask> selfMask { SfzSelfMask::mask, Range<SfzSelfMask>(SfzSelfMask::mask, SfzSelfMask::dontMask), 0}; extern const OpcodeSpec<SelfMask> selfMask { SelfMask::mask, Range<SelfMask>(SelfMask::mask, SelfMask::dontMask), 0};
extern const OpcodeSpec<FilterType> filter { FilterType::kFilterNone, Range<FilterType>(FilterType::kFilterNone, FilterType::kFilterPeq), 0}; extern const OpcodeSpec<FilterType> filter { FilterType::kFilterNone, Range<FilterType>(FilterType::kFilterNone, FilterType::kFilterPeq), 0};
extern const OpcodeSpec<EqType> eq { EqType::kEqNone, Range<EqType>(EqType::kEqNone, EqType::kEqHighShelf), 0}; extern const OpcodeSpec<EqType> eq { EqType::kEqNone, Range<EqType>(EqType::kEqNone, EqType::kEqHighShelf), 0};
} // namespace Default } // namespace Default

View file

@ -30,16 +30,16 @@
#include <limits> #include <limits>
#include <cstdint> #include <cstdint>
enum class SfzTrigger { attack = 0, release, release_key, first, legato };
enum class SfzLoopMode { no_loop = 0, one_shot, loop_continuous, loop_sustain };
enum class SfzOffMode { fast = 0, normal, time };
enum class SfzVelocityOverride { current = 0, previous };
enum class SfzCrossfadeCurve { gain = 0, power };
enum class SfzSelfMask { mask = 0, dontMask };
namespace sfz namespace sfz
{ {
enum class Trigger { attack = 0, release, release_key, first, legato };
enum class LoopMode { no_loop = 0, one_shot, loop_continuous, loop_sustain };
enum class OffMode { fast = 0, normal, time };
enum class VelocityOverride { current = 0, previous };
enum class CrossfadeCurve { gain = 0, power };
enum class SelfMask { mask = 0, dontMask };
enum class OscillatorEnabled { Auto = -1, Off = 0, On = 1 }; enum class OscillatorEnabled { Auto = -1, Off = 0, On = 1 };
enum OpcodeFlags : int { enum OpcodeFlags : int {
@ -199,11 +199,11 @@ namespace Default
extern const OpcodeSpec<float> lofiDecim; extern const OpcodeSpec<float> lofiDecim;
extern const OpcodeSpec<float> rectify; extern const OpcodeSpec<float> rectify;
extern const OpcodeSpec<unsigned> stringsNumber; extern const OpcodeSpec<unsigned> stringsNumber;
extern const OpcodeSpec<SfzTrigger> trigger; extern const OpcodeSpec<Trigger> trigger;
extern const OpcodeSpec<SfzOffMode> offMode; extern const OpcodeSpec<OffMode> offMode;
extern const OpcodeSpec<SfzCrossfadeCurve> crossfadeCurve; extern const OpcodeSpec<CrossfadeCurve> crossfadeCurve;
extern const OpcodeSpec<SfzVelocityOverride> velocityOverride; extern const OpcodeSpec<VelocityOverride> velocityOverride;
extern const OpcodeSpec<SfzSelfMask> selfMask; extern const OpcodeSpec<SelfMask> selfMask;
extern const OpcodeSpec<FilterType> filter; extern const OpcodeSpec<FilterType> filter;
extern const OpcodeSpec<EqType> eq; extern const OpcodeSpec<EqType> eq;

View file

@ -28,7 +28,7 @@ struct RiffChunkInfo {
/** /**
@brief Loop mode, like SF_LOOP_* @brief Loop mode, like SF_LOOP_*
*/ */
enum LoopMode { enum FileLoopMode {
LoopNone, LoopNone,
LoopForward, LoopForward,
LoopBackward, LoopBackward,
@ -52,7 +52,7 @@ struct InstrumentInfo {
} loops[16]; } loops[16];
}; };
#else #else
enum LoopMode { enum FileLoopMode {
LoopNone = SF_LOOP_NONE, LoopNone = SF_LOOP_NONE,
LoopForward = SF_LOOP_FORWARD, LoopForward = SF_LOOP_FORWARD,
LoopBackward = SF_LOOP_BACKWARD, LoopBackward = SF_LOOP_BACKWARD,

View file

@ -16,7 +16,7 @@ namespace sfz {
* @brief Compute a crossfade in value with respect to a crossfade range (note, velocity, cc, ...) * @brief Compute a crossfade in value with respect to a crossfade range (note, velocity, cc, ...)
*/ */
template <class T, class U> template <class T, class U>
float crossfadeIn(const sfz::Range<T>& crossfadeRange, U value, SfzCrossfadeCurve curve) float crossfadeIn(const sfz::Range<T>& crossfadeRange, U value, CrossfadeCurve curve)
{ {
if (value < crossfadeRange.getStart()) if (value < crossfadeRange.getStart())
return 0.0f; return 0.0f;
@ -27,9 +27,9 @@ float crossfadeIn(const sfz::Range<T>& crossfadeRange, U value, SfzCrossfadeCurv
else if (value < crossfadeRange.getEnd()) { else if (value < crossfadeRange.getEnd()) {
const auto crossfadePosition = static_cast<float>(value - crossfadeRange.getStart()) / length; const auto crossfadePosition = static_cast<float>(value - crossfadeRange.getStart()) / length;
if (curve == SfzCrossfadeCurve::power) if (curve == CrossfadeCurve::power)
return sqrt(crossfadePosition); return sqrt(crossfadePosition);
if (curve == SfzCrossfadeCurve::gain) if (curve == CrossfadeCurve::gain)
return crossfadePosition; return crossfadePosition;
} }
@ -40,7 +40,7 @@ float crossfadeIn(const sfz::Range<T>& crossfadeRange, U value, SfzCrossfadeCurv
* @brief Compute a crossfade out value with respect to a crossfade range (note, velocity, cc, ...) * @brief Compute a crossfade out value with respect to a crossfade range (note, velocity, cc, ...)
*/ */
template <class T, class U> template <class T, class U>
float crossfadeOut(const sfz::Range<T>& crossfadeRange, U value, SfzCrossfadeCurve curve) float crossfadeOut(const sfz::Range<T>& crossfadeRange, U value, CrossfadeCurve curve)
{ {
if (value > crossfadeRange.getEnd()) if (value > crossfadeRange.getEnd())
return 0.0f; return 0.0f;
@ -51,9 +51,9 @@ float crossfadeOut(const sfz::Range<T>& crossfadeRange, U value, SfzCrossfadeCur
else if (value > crossfadeRange.getStart()) { else if (value > crossfadeRange.getStart()) {
const auto crossfadePosition = static_cast<float>(value - crossfadeRange.getStart()) / length; const auto crossfadePosition = static_cast<float>(value - crossfadeRange.getStart()) / length;
if (curve == SfzCrossfadeCurve::power) if (curve == CrossfadeCurve::power)
return std::sqrt(1 - crossfadePosition); return std::sqrt(1 - crossfadePosition);
if (curve == SfzCrossfadeCurve::gain) if (curve == CrossfadeCurve::gain)
return 1 - crossfadePosition; return 1 - crossfadePosition;
} }

View file

@ -305,14 +305,14 @@ absl::optional<OscillatorEnabled> Opcode::read(OpcodeSpec<OscillatorEnabled>) co
} }
template <> template <>
absl::optional<SfzTrigger> Opcode::read(OpcodeSpec<SfzTrigger>) const absl::optional<Trigger> Opcode::read(OpcodeSpec<Trigger>) const
{ {
switch (hash(value)) { switch (hash(value)) {
case hash("attack"): return SfzTrigger::attack; case hash("attack"): return Trigger::attack;
case hash("first"): return SfzTrigger::first; case hash("first"): return Trigger::first;
case hash("legato"): return SfzTrigger::legato; case hash("legato"): return Trigger::legato;
case hash("release"): return SfzTrigger::release; case hash("release"): return Trigger::release;
case hash("release_key"): return SfzTrigger::release_key; case hash("release_key"): return Trigger::release_key;
} }
DBG("Unknown trigger value: " << value); DBG("Unknown trigger value: " << value);
@ -320,11 +320,11 @@ absl::optional<SfzTrigger> Opcode::read(OpcodeSpec<SfzTrigger>) const
} }
template <> template <>
absl::optional<SfzCrossfadeCurve> Opcode::read(OpcodeSpec<SfzCrossfadeCurve>) const absl::optional<CrossfadeCurve> Opcode::read(OpcodeSpec<CrossfadeCurve>) const
{ {
switch (hash(value)) { switch (hash(value)) {
case hash("power"): return SfzCrossfadeCurve::power; case hash("power"): return CrossfadeCurve::power;
case hash("gain"): return SfzCrossfadeCurve::gain; case hash("gain"): return CrossfadeCurve::gain;
} }
DBG("Unknown crossfade power curve: " << value); DBG("Unknown crossfade power curve: " << value);
@ -332,12 +332,12 @@ absl::optional<SfzCrossfadeCurve> Opcode::read(OpcodeSpec<SfzCrossfadeCurve>) co
} }
template <> template <>
absl::optional<SfzOffMode> Opcode::read(OpcodeSpec<SfzOffMode>) const absl::optional<OffMode> Opcode::read(OpcodeSpec<OffMode>) const
{ {
switch (hash(value)) { switch (hash(value)) {
case hash("fast"): return SfzOffMode::fast; case hash("fast"): return OffMode::fast;
case hash("normal"): return SfzOffMode::normal; case hash("normal"): return OffMode::normal;
case hash("time"): return SfzOffMode::time; case hash("time"): return OffMode::time;
} }
DBG("Unknown off mode: " << value); DBG("Unknown off mode: " << value);
@ -391,11 +391,11 @@ absl::optional<EqType> Opcode::read(OpcodeSpec<EqType>) const
} }
template <> template <>
absl::optional<SfzVelocityOverride> Opcode::read(OpcodeSpec<SfzVelocityOverride>) const absl::optional<VelocityOverride> Opcode::read(OpcodeSpec<VelocityOverride>) const
{ {
switch (hash(value)) { switch (hash(value)) {
case hash("current"): return SfzVelocityOverride::current; case hash("current"): return VelocityOverride::current;
case hash("previous"): return SfzVelocityOverride::previous; case hash("previous"): return VelocityOverride::previous;
} }
DBG("Unknown velocity override: " << value); DBG("Unknown velocity override: " << value);
@ -403,12 +403,12 @@ absl::optional<SfzVelocityOverride> Opcode::read(OpcodeSpec<SfzVelocityOverride>
} }
template <> template <>
absl::optional<SfzSelfMask> Opcode::read(OpcodeSpec<SfzSelfMask>) const absl::optional<SelfMask> Opcode::read(OpcodeSpec<SelfMask>) const
{ {
switch (hash(value)) { switch (hash(value)) {
case hash("on"): case hash("on"):
case hash("mask"): return SfzSelfMask::mask; case hash("mask"): return SelfMask::mask;
case hash("off"): return SfzSelfMask::dontMask; case hash("off"): return SelfMask::dontMask;
} }
DBG("Unknown velocity override: " << value); DBG("Unknown velocity override: " << value);

View file

@ -130,16 +130,16 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
case hash("loop_mode"): // also loopmode case hash("loop_mode"): // also loopmode
switch (hash(opcode.value)) { switch (hash(opcode.value)) {
case hash("no_loop"): case hash("no_loop"):
loopMode = SfzLoopMode::no_loop; loopMode = LoopMode::no_loop;
break; break;
case hash("one_shot"): case hash("one_shot"):
loopMode = SfzLoopMode::one_shot; loopMode = LoopMode::one_shot;
break; break;
case hash("loop_continuous"): case hash("loop_continuous"):
loopMode = SfzLoopMode::loop_continuous; loopMode = LoopMode::loop_continuous;
break; break;
case hash("loop_sustain"): case hash("loop_sustain"):
loopMode = SfzLoopMode::loop_sustain; loopMode = LoopMode::loop_sustain;
break; break;
default: default:
DBG("Unkown loop mode:" << opcode.value); DBG("Unkown loop mode:" << opcode.value);
@ -207,7 +207,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
offMode = opcode.read(Default::offMode).value_or(offMode); offMode = opcode.read(Default::offMode).value_or(offMode);
break; break;
case hash("off_time"): case hash("off_time"):
offMode = SfzOffMode::time; offMode = OffMode::time;
offTime = opcode.read(Default::offTime).value_or(offTime); offTime = opcode.read(Default::offTime).value_or(offTime);
break; break;
case hash("polyphony"): case hash("polyphony"):
@ -220,10 +220,10 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
case hash("note_selfmask"): case hash("note_selfmask"):
switch (hash(opcode.value)) { switch (hash(opcode.value)) {
case hash("on"): case hash("on"):
selfMask = SfzSelfMask::mask; selfMask = SelfMask::mask;
break; break;
case hash("off"): case hash("off"):
selfMask = SfzSelfMask::dontMask; selfMask = SelfMask::dontMask;
break; break;
default: default:
DBG("Unkown self mask value:" << opcode.value); DBG("Unkown self mask value:" << opcode.value);
@ -1608,9 +1608,9 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue
const bool velOk = velocityRange.containsWithEnd(velocity); const bool velOk = velocityRange.containsWithEnd(velocity);
const bool randOk = randRange.contains(randValue) || (randValue == 1.0f && randRange.getEnd() == 1.0f); const bool randOk = randRange.contains(randValue) || (randValue == 1.0f && randRange.getEnd() == 1.0f);
const bool firstLegatoNote = (trigger == SfzTrigger::first && midiState.getActiveNotes() == 1); const bool firstLegatoNote = (trigger == Trigger::first && midiState.getActiveNotes() == 1);
const bool attackTrigger = (trigger == SfzTrigger::attack); const bool attackTrigger = (trigger == Trigger::attack);
const bool notFirstLegatoNote = (trigger == SfzTrigger::legato && midiState.getActiveNotes() > 1); const bool notFirstLegatoNote = (trigger == Trigger::legato && midiState.getActiveNotes() > 1);
return keyOk && velOk && randOk && (attackTrigger || firstLegatoNote || notFirstLegatoNote); return keyOk && velOk && randOk && (attackTrigger || firstLegatoNote || notFirstLegatoNote);
} }
@ -1636,10 +1636,10 @@ bool sfz::Region::registerNoteOff(int noteNumber, float velocity, float randValu
// Release logic // Release logic
if (trigger == SfzTrigger::release_key) if (trigger == Trigger::release_key)
return true; return true;
if (trigger == SfzTrigger::release) { if (trigger == Trigger::release) {
if (midiState.getCCValue(sustainCC) < sustainThreshold) if (midiState.getCCValue(sustainCC) < sustainThreshold)
return true; return true;
@ -1717,7 +1717,7 @@ float sfz::Region::getBaseVolumedB(int noteNumber) const noexcept
baseVolumedB += globalVolume; baseVolumedB += globalVolume;
baseVolumedB += masterVolume; baseVolumedB += masterVolume;
baseVolumedB += groupVolume; baseVolumedB += groupVolume;
if (trigger == SfzTrigger::release || trigger == SfzTrigger::release_key) if (trigger == Trigger::release || trigger == Trigger::release_key)
baseVolumedB -= rtDecay * midiState.getNoteDuration(noteNumber); baseVolumedB -= rtDecay * midiState.getNoteDuration(noteNumber);
return baseVolumedB; return baseVolumedB;
} }

View file

@ -61,7 +61,7 @@ struct Region {
* @return true * @return true
* @return false * @return false
*/ */
bool isRelease() const noexcept { return trigger == SfzTrigger::release || trigger == SfzTrigger::release_key; } bool isRelease() const noexcept { return trigger == Trigger::release || trigger == Trigger::release_key; }
/** /**
* @brief Is a generator (*sine or *silence mostly)? * @brief Is a generator (*sine or *silence mostly)?
* *
@ -97,7 +97,7 @@ struct Region {
* @return true * @return true
* @return false * @return false
*/ */
bool shouldLoop() const noexcept { return (loopMode == SfzLoopMode::loop_continuous || loopMode == SfzLoopMode::loop_sustain); } bool shouldLoop() const noexcept { return (loopMode == LoopMode::loop_continuous || loopMode == LoopMode::loop_sustain); }
/** /**
* @brief Given the current midi state, is the region switched on? * @brief Given the current midi state, is the region switched on?
* *
@ -326,7 +326,7 @@ struct Region {
CCMap<int64_t> offsetCC { Default::offsetMod.value }; CCMap<int64_t> offsetCC { Default::offsetMod.value };
uint32_t sampleEnd { Default::sampleEnd.value }; // end uint32_t sampleEnd { Default::sampleEnd.value }; // end
absl::optional<uint32_t> sampleCount {}; // count absl::optional<uint32_t> sampleCount {}; // count
absl::optional<SfzLoopMode> loopMode {}; // loopmode absl::optional<LoopMode> loopMode {}; // loopmode
Range<uint32_t> loopRange { Default::loopRange.bounds }; //loopstart and loopend Range<uint32_t> loopRange { Default::loopRange.bounds }; //loopstart and loopend
float loopCrossfade { Default::loopCrossfade.value }; // loop_crossfade float loopCrossfade { Default::loopCrossfade.value }; // loop_crossfade
@ -343,11 +343,11 @@ struct Region {
// Instrument settings: voice lifecycle // Instrument settings: voice lifecycle
uint32_t group { Default::group.value }; // group uint32_t group { Default::group.value }; // group
absl::optional<uint32_t> offBy {}; // off_by absl::optional<uint32_t> offBy {}; // off_by
SfzOffMode offMode { Default::offMode.value }; // off_mode OffMode offMode { Default::offMode.value }; // off_mode
float offTime { Default::offTime.value }; // off_mode float offTime { Default::offTime.value }; // off_mode
absl::optional<uint32_t> notePolyphony {}; // note_polyphony absl::optional<uint32_t> notePolyphony {}; // note_polyphony
uint32_t polyphony { config::maxVoices }; // polyphony uint32_t polyphony { config::maxVoices }; // polyphony
SfzSelfMask selfMask { Default::selfMask.value }; SelfMask selfMask { Default::selfMask.value };
bool rtDead { Default::rtDead.value }; bool rtDead { Default::rtDead.value };
// Region logic: key mapping // Region logic: key mapping
@ -364,7 +364,7 @@ struct Region {
absl::optional<uint8_t> downKeyswitch {}; // sw_down absl::optional<uint8_t> downKeyswitch {}; // sw_down
absl::optional<uint8_t> previousKeyswitch {}; // sw_previous absl::optional<uint8_t> previousKeyswitch {}; // sw_previous
absl::optional<uint8_t> defaultSwitch {}; absl::optional<uint8_t> defaultSwitch {};
SfzVelocityOverride velocityOverride { Default::velocityOverride.value }; // sw_vel VelocityOverride velocityOverride { Default::velocityOverride.value }; // sw_vel
bool checkSustain { Default::checkSustain.value }; // sustain_sw bool checkSustain { Default::checkSustain.value }; // sustain_sw
bool checkSostenuto { Default::checkSostenuto.value }; // sostenuto_sw bool checkSostenuto { Default::checkSostenuto.value }; // sostenuto_sw
uint16_t sustainCC { Default::sustainCC.value }; // sustain_cc uint16_t sustainCC { Default::sustainCC.value }; // sustain_cc
@ -378,7 +378,7 @@ struct Region {
uint8_t sequencePosition { Default::sequence.value }; // seq_position uint8_t sequencePosition { Default::sequence.value }; // seq_position
// Region logic: triggers // Region logic: triggers
SfzTrigger trigger { Default::trigger.value }; // trigger Trigger trigger { Default::trigger.value }; // trigger
CCMap<Range<float>> ccTriggers { Default::normalized.bounds }; // on_loccN on_hiccN CCMap<Range<float>> ccTriggers { Default::normalized.bounds }; // on_loccN on_hiccN
// Performance parameters: amplifier // Performance parameters: amplifier
@ -397,9 +397,9 @@ struct Region {
Range<uint8_t> crossfadeKeyOutRange { Default::crossfadeKeyOutRange }; Range<uint8_t> crossfadeKeyOutRange { Default::crossfadeKeyOutRange };
Range<float> crossfadeVelInRange { Default::crossfadeVelInRange }; Range<float> crossfadeVelInRange { Default::crossfadeVelInRange };
Range<float> crossfadeVelOutRange { Default::crossfadeVelOutRange }; Range<float> crossfadeVelOutRange { Default::crossfadeVelOutRange };
SfzCrossfadeCurve crossfadeKeyCurve { Default::crossfadeCurve.value }; CrossfadeCurve crossfadeKeyCurve { Default::crossfadeCurve.value };
SfzCrossfadeCurve crossfadeVelCurve { Default::crossfadeCurve.value }; CrossfadeCurve crossfadeVelCurve { Default::crossfadeCurve.value };
SfzCrossfadeCurve crossfadeCCCurve { Default::crossfadeCurve.value }; CrossfadeCurve crossfadeCCCurve { Default::crossfadeCurve.value };
CCMap<Range<float>> crossfadeCCInRange { Default::crossfadeCCInRange }; // xfin_loccN xfin_hiccN CCMap<Range<float>> crossfadeCCInRange { Default::crossfadeCCInRange }; // xfin_loccN xfin_hiccN
CCMap<Range<float>> crossfadeCCOutRange { Default::crossfadeCCOutRange }; // xfout_loccN xfout_hiccN CCMap<Range<float>> crossfadeCCOutRange { Default::crossfadeCCOutRange }; // xfout_loccN xfout_hiccN
float rtDecay { Default::rtDecay.value }; // rt_decay float rtDecay { Default::rtDecay.value }; // rt_decay

View file

@ -596,11 +596,11 @@ void Synth::Impl::finalizeSfzLoad()
region->loopRange.setEnd(fileInformation->loopEnd); region->loopRange.setEnd(fileInformation->loopEnd);
if (!region->loopMode) if (!region->loopMode)
region->loopMode = SfzLoopMode::loop_continuous; region->loopMode = LoopMode::loop_continuous;
} }
if (region->isRelease() && !region->loopMode) if (region->isRelease() && !region->loopMode)
region->loopMode = SfzLoopMode::one_shot; region->loopMode = LoopMode::one_shot;
if (region->loopRange.getEnd() == Default::loopRange.bounds.getEnd()) if (region->loopRange.getEnd() == Default::loopRange.bounds.getEnd())
region->loopRange.setEnd(region->sampleEnd); region->loopRange.setEnd(region->sampleEnd);
@ -656,7 +656,7 @@ void Synth::Impl::finalizeSfzLoad()
for (int cc = 0; cc < config::numCCs; cc++) { for (int cc = 0; cc < config::numCCs; cc++) {
if (region->ccTriggers.contains(cc) if (region->ccTriggers.contains(cc)
|| region->ccConditions.contains(cc) || region->ccConditions.contains(cc)
|| (cc == region->sustainCC && region->trigger == SfzTrigger::release)) || (cc == region->sustainCC && region->trigger == Trigger::release))
ccActivationLists_[cc].push_back(region); ccActivationLists_[cc].push_back(region);
} }
@ -1052,7 +1052,7 @@ void Synth::Impl::noteOffDispatch(int delay, int noteNumber, float velocity) noe
for (auto& region : noteActivationLists_[noteNumber]) { for (auto& region : noteActivationLists_[noteNumber]) {
if (region->registerNoteOff(noteNumber, velocity, randValue)) { if (region->registerNoteOff(noteNumber, velocity, randValue)) {
if (region->trigger == SfzTrigger::release && !region->rtDead && !voiceManager_.playingAttackVoice(region)) if (region->trigger == Trigger::release && !region->rtDead && !voiceManager_.playingAttackVoice(region))
continue; continue;
startVoice(region, delay, triggerEvent, ring); startVoice(region, delay, triggerEvent, ring);

View file

@ -167,16 +167,16 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
} }
switch (*region.loopMode) { switch (*region.loopMode) {
case SfzLoopMode::no_loop: case LoopMode::no_loop:
client.receive<'s'>(delay, path, "no_loop"); client.receive<'s'>(delay, path, "no_loop");
break; break;
case SfzLoopMode::loop_continuous: case LoopMode::loop_continuous:
client.receive<'s'>(delay, path, "loop_continuous"); client.receive<'s'>(delay, path, "loop_continuous");
break; break;
case SfzLoopMode::loop_sustain: case LoopMode::loop_sustain:
client.receive<'s'>(delay, path, "loop_sustain"); client.receive<'s'>(delay, path, "loop_sustain");
break; break;
case SfzLoopMode::one_shot: case LoopMode::one_shot:
client.receive<'s'>(delay, path, "one_shot"); client.receive<'s'>(delay, path, "one_shot");
break; break;
} }
@ -204,13 +204,13 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/off_mode", "") { MATCH("/region&/off_mode", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.offMode) { switch (region.offMode) {
case SfzOffMode::time: case OffMode::time:
client.receive<'s'>(delay, path, "time"); client.receive<'s'>(delay, path, "time");
break; break;
case SfzOffMode::normal: case OffMode::normal:
client.receive<'s'>(delay, path, "normal"); client.receive<'s'>(delay, path, "normal");
break; break;
case SfzOffMode::fast: case OffMode::fast:
client.receive<'s'>(delay, path, "fast"); client.receive<'s'>(delay, path, "fast");
break; break;
} }
@ -313,10 +313,10 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/sw_vel", "") { MATCH("/region&/sw_vel", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.velocityOverride) { switch (region.velocityOverride) {
case SfzVelocityOverride::current: case VelocityOverride::current:
client.receive<'s'>(delay, path, "current"); client.receive<'s'>(delay, path, "current");
break; break;
case SfzVelocityOverride::previous: case VelocityOverride::previous:
client.receive<'s'>(delay, path, "previous"); client.receive<'s'>(delay, path, "previous");
break; break;
} }
@ -359,19 +359,19 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/trigger", "") { MATCH("/region&/trigger", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.trigger) { switch (region.trigger) {
case SfzTrigger::attack: case Trigger::attack:
client.receive<'s'>(delay, path, "attack"); client.receive<'s'>(delay, path, "attack");
break; break;
case SfzTrigger::first: case Trigger::first:
client.receive<'s'>(delay, path, "first"); client.receive<'s'>(delay, path, "first");
break; break;
case SfzTrigger::release: case Trigger::release:
client.receive<'s'>(delay, path, "release"); client.receive<'s'>(delay, path, "release");
break; break;
case SfzTrigger::release_key: case Trigger::release_key:
client.receive<'s'>(delay, path, "release_key"); client.receive<'s'>(delay, path, "release_key");
break; break;
case SfzTrigger::legato: case Trigger::legato:
client.receive<'s'>(delay, path, "legato"); client.receive<'s'>(delay, path, "legato");
break; break;
} }
@ -696,10 +696,10 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/xf_keycurve", "") { MATCH("/region&/xf_keycurve", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.crossfadeKeyCurve) { switch (region.crossfadeKeyCurve) {
case SfzCrossfadeCurve::gain: case CrossfadeCurve::gain:
client.receive<'s'>(delay, path, "gain"); client.receive<'s'>(delay, path, "gain");
break; break;
case SfzCrossfadeCurve::power: case CrossfadeCurve::power:
client.receive<'s'>(delay, path, "power"); client.receive<'s'>(delay, path, "power");
break; break;
} }
@ -708,10 +708,10 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/xf_velcurve", "") { MATCH("/region&/xf_velcurve", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.crossfadeVelCurve) { switch (region.crossfadeVelCurve) {
case SfzCrossfadeCurve::gain: case CrossfadeCurve::gain:
client.receive<'s'>(delay, path, "gain"); client.receive<'s'>(delay, path, "gain");
break; break;
case SfzCrossfadeCurve::power: case CrossfadeCurve::power:
client.receive<'s'>(delay, path, "power"); client.receive<'s'>(delay, path, "power");
break; break;
} }
@ -720,10 +720,10 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/xf_cccurve", "") { MATCH("/region&/xf_cccurve", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch (region.crossfadeCCCurve) { switch (region.crossfadeCCCurve) {
case SfzCrossfadeCurve::gain: case CrossfadeCurve::gain:
client.receive<'s'>(delay, path, "gain"); client.receive<'s'>(delay, path, "gain");
break; break;
case SfzCrossfadeCurve::power: case CrossfadeCurve::power:
client.receive<'s'>(delay, path, "power"); client.receive<'s'>(delay, path, "power");
break; break;
} }
@ -945,10 +945,10 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
MATCH("/region&/note_selfmask", "") { MATCH("/region&/note_selfmask", "") {
GET_REGION_OR_BREAK(indices[0]) GET_REGION_OR_BREAK(indices[0])
switch(region.selfMask) { switch(region.selfMask) {
case SfzSelfMask::mask: case SelfMask::mask:
client.receive(delay, path, "T", nullptr); client.receive(delay, path, "T", nullptr);
break; break;
case SfzSelfMask::dontMask: case SelfMask::dontMask:
client.receive(delay, path, "F", nullptr); client.receive(delay, path, "F", nullptr);
break; break;
} }

View file

@ -464,9 +464,9 @@ void Voice::off(int delay, bool fast) noexcept
{ {
Impl& impl = *impl_; Impl& impl = *impl_;
if (!impl.region_->flexAmpEG) { if (!impl.region_->flexAmpEG) {
if (impl.region_->offMode == SfzOffMode::fast || fast) { if (impl.region_->offMode == OffMode::fast || fast) {
impl.egAmplitude_.setReleaseTime(Default::offTime.value); impl.egAmplitude_.setReleaseTime(Default::offTime.value);
} else if (impl.region_->offMode == SfzOffMode::time) { } else if (impl.region_->offMode == OffMode::time) {
impl.egAmplitude_.setReleaseTime(impl.region_->offTime); impl.egAmplitude_.setReleaseTime(impl.region_->offTime);
} }
} }
@ -492,7 +492,7 @@ void Voice::registerNoteOff(int delay, int noteNumber, float velocity) noexcept
if (impl.triggerEvent_.number == noteNumber && impl.triggerEvent_.type == TriggerEventType::NoteOn) { if (impl.triggerEvent_.number == noteNumber && impl.triggerEvent_.type == TriggerEventType::NoteOn) {
impl.noteIsOff_ = true; impl.noteIsOff_ = true;
if (impl.region_->loopMode == SfzLoopMode::one_shot) if (impl.region_->loopMode == LoopMode::one_shot)
return; return;
if (!impl.region_->checkSustain if (!impl.region_->checkSustain

View file

@ -198,7 +198,7 @@ void VoiceManager::checkNotePolyphony(const Region* region, int delay, const Tri
&& voiceTriggerEvent.type == triggerEvent.type) { && voiceTriggerEvent.type == triggerEvent.type) {
notePolyphonyCounter += 1; notePolyphonyCounter += 1;
switch (region->selfMask) { switch (region->selfMask) {
case SfzSelfMask::mask: case SelfMask::mask:
if (voiceTriggerEvent.value <= triggerEvent.value) { if (voiceTriggerEvent.value <= triggerEvent.value) {
if (!selfMaskCandidate if (!selfMaskCandidate
|| selfMaskCandidate->getTriggerEvent().value > voiceTriggerEvent.value) { || selfMaskCandidate->getTriggerEvent().value > voiceTriggerEvent.value) {
@ -206,7 +206,7 @@ void VoiceManager::checkNotePolyphony(const Region* region, int delay, const Tri
} }
} }
break; break;
case SfzSelfMask::dontMask: case SelfMask::dontMask:
if (!selfMaskCandidate || selfMaskCandidate->getAge() < voice->getAge()) if (!selfMaskCandidate || selfMaskCandidate->getAge() < voice->getAge())
selfMaskCandidate = voice; selfMaskCandidate = voice;
break; break;

View file

@ -38,7 +38,7 @@ void FlexEnvelopeSource::init(const ModKey& sourceKey, NumericId<Voice> voiceId,
FlexEnvelope* eg = voice->getFlexEG(egIndex); FlexEnvelope* eg = voice->getFlexEG(egIndex);
eg->configure(&region->flexEGs[egIndex]); eg->configure(&region->flexEGs[egIndex]);
bool freeRunning = ( bool freeRunning = (
(region->loopMode == SfzLoopMode::one_shot && region->isOscillator()) (region->loopMode == LoopMode::one_shot && region->isOscillator())
); );
if (freeRunning && region->flexAmpEG && egIndex == *region->flexAmpEG) if (freeRunning && region->flexAmpEG && egIndex == *region->flexAmpEG)
eg->setFreeRunning(true); eg->setFreeRunning(true);

View file

@ -51,7 +51,7 @@ TEST_CASE("[Files] Underscore opcodes (underscore_opcodes.sfz)")
Synth synth; Synth synth;
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/underscore_opcodes.sfz"); synth.loadSfzFile(fs::current_path() / "tests/TestFiles/Regions/underscore_opcodes.sfz");
REQUIRE(synth.getNumRegions() == 1); REQUIRE(synth.getNumRegions() == 1);
REQUIRE(synth.getRegionView(0)->loopMode == SfzLoopMode::loop_sustain); REQUIRE(synth.getRegionView(0)->loopMode == LoopMode::loop_sustain);
} }
TEST_CASE("[Files] (regions_bad.sfz)") TEST_CASE("[Files] (regions_bad.sfz)")
@ -505,11 +505,11 @@ TEST_CASE("[Files] Off modes")
synth.noteOn(0, 64, 63); synth.noteOn(0, 64, 63);
REQUIRE( synth.getNumActiveVoices() == 2 ); REQUIRE( synth.getNumActiveVoices() == 2 );
const auto* fastVoice = const auto* fastVoice =
synth.getVoiceView(0)->getRegion()->offMode == SfzOffMode::fast ? synth.getVoiceView(0)->getRegion()->offMode == OffMode::fast ?
synth.getVoiceView(0) : synth.getVoiceView(0) :
synth.getVoiceView(1) ; synth.getVoiceView(1) ;
const auto* normalVoice = const auto* normalVoice =
synth.getVoiceView(0)->getRegion()->offMode == SfzOffMode::fast ? synth.getVoiceView(0)->getRegion()->offMode == OffMode::fast ?
synth.getVoiceView(1) : synth.getVoiceView(1) :
synth.getVoiceView(0) ; synth.getVoiceView(0) ;
synth.noteOn(100, 63, 63); synth.noteOn(100, 63, 63);
@ -530,9 +530,9 @@ TEST_CASE("[Files] Looped regions taken from files and possibly overriden")
synth.setSampleRate(44100); synth.setSampleRate(44100);
synth.loadSfzFile(fs::current_path() / "tests/TestFiles/looped_regions.sfz"); synth.loadSfzFile(fs::current_path() / "tests/TestFiles/looped_regions.sfz");
REQUIRE( synth.getNumRegions() == 3 ); REQUIRE( synth.getNumRegions() == 3 );
REQUIRE( synth.getRegionView(0)->loopMode == SfzLoopMode::loop_continuous ); REQUIRE( synth.getRegionView(0)->loopMode == LoopMode::loop_continuous );
REQUIRE( synth.getRegionView(1)->loopMode == SfzLoopMode::no_loop ); REQUIRE( synth.getRegionView(1)->loopMode == LoopMode::no_loop );
REQUIRE( synth.getRegionView(2)->loopMode == SfzLoopMode::loop_continuous ); REQUIRE( synth.getRegionView(2)->loopMode == LoopMode::loop_continuous );
REQUIRE(synth.getRegionView(0)->loopRange == Range<uint32_t> { 77554, 186581 }); REQUIRE(synth.getRegionView(0)->loopRange == Range<uint32_t> { 77554, 186581 });
REQUIRE(synth.getRegionView(1)->loopRange == Range<uint32_t> { 77554, 186581 }); REQUIRE(synth.getRegionView(1)->loopRange == Range<uint32_t> { 77554, 186581 });
@ -546,7 +546,7 @@ TEST_CASE("[Files] Looped regions can start at 0")
<region> sample=wavetable_with_loop_at_endings.wav <region> sample=wavetable_with_loop_at_endings.wav
)"); )");
REQUIRE( synth.getNumRegions() == 1 ); REQUIRE( synth.getNumRegions() == 1 );
REQUIRE( synth.getRegionView(0)->loopMode == SfzLoopMode::loop_continuous ); REQUIRE( synth.getRegionView(0)->loopMode == LoopMode::loop_continuous );
REQUIRE( synth.getRegionView(0)->loopRange == Range<uint32_t> { 0, synth.getRegionView(0)->sampleEnd } ); REQUIRE( synth.getRegionView(0)->loopRange == Range<uint32_t> { 0, synth.getRegionView(0)->sampleEnd } );
} }
@ -563,13 +563,13 @@ TEST_CASE("[Synth] Release triggers automatically sets the loop mode")
<region> sample=kick.wav pitch_keycenter=69 trigger=release <region> sample=kick.wav pitch_keycenter=69 trigger=release
)"); )");
REQUIRE( synth.getNumRegions() == 7 ); REQUIRE( synth.getNumRegions() == 7 );
REQUIRE( synth.getRegionView(0)->loopMode == SfzLoopMode::loop_sustain ); REQUIRE( synth.getRegionView(0)->loopMode == LoopMode::loop_sustain );
REQUIRE( synth.getRegionView(1)->loopMode == SfzLoopMode::loop_sustain ); REQUIRE( synth.getRegionView(1)->loopMode == LoopMode::loop_sustain );
REQUIRE( synth.getRegionView(2)->loopMode == SfzLoopMode::loop_sustain ); REQUIRE( synth.getRegionView(2)->loopMode == LoopMode::loop_sustain );
REQUIRE( synth.getRegionView(3)->loopMode == SfzLoopMode::loop_sustain ); REQUIRE( synth.getRegionView(3)->loopMode == LoopMode::loop_sustain );
REQUIRE( synth.getRegionView(4)->loopMode == SfzLoopMode::loop_continuous ); REQUIRE( synth.getRegionView(4)->loopMode == LoopMode::loop_continuous );
REQUIRE( synth.getRegionView(5)->loopMode == SfzLoopMode::one_shot ); REQUIRE( synth.getRegionView(5)->loopMode == LoopMode::one_shot );
REQUIRE( synth.getRegionView(6)->loopMode == SfzLoopMode::one_shot ); REQUIRE( synth.getRegionView(6)->loopMode == LoopMode::one_shot );
} }
TEST_CASE("[Files] Case sentitiveness") TEST_CASE("[Files] Case sentitiveness")