Use the existing OpcodeScope and ass the "<master>" level

This commit is contained in:
Paul Ferrand 2020-06-15 22:28:09 +02:00
parent 89093b1826
commit 7559dfdd7b
3 changed files with 8 additions and 6 deletions

View file

@ -47,6 +47,8 @@ enum OpcodeScope {
kOpcodeScopeGlobal,
//! control scope
kOpcodeScopeControl,
//! Master scope
kOpcodeScopeMaster,
//! group scope
kOpcodeScopeGroup,
//! region scope

View file

@ -74,7 +74,7 @@ void sfz::Synth::onParseFullBlock(const std::string& header, const std::vector<O
case hash("global"):
globalOpcodes = members;
currentSet = sets.front().get();
lastHeader = Header::Global;
lastHeader = OpcodeScope::kOpcodeScopeGlobal;
groupOpcodes.clear();
masterOpcodes.clear();
handleGlobalOpcodes(members);
@ -87,17 +87,17 @@ void sfz::Synth::onParseFullBlock(const std::string& header, const std::vector<O
masterOpcodes = members;
newRegionSet(sets.front().get());
groupOpcodes.clear();
lastHeader = Header::Master;
lastHeader = OpcodeScope::kOpcodeScopeMaster;
handleMasterOpcodes(members);
numMasters++;
break;
case hash("group"):
groupOpcodes = members;
if (lastHeader == Header::Group)
if (lastHeader == OpcodeScope::kOpcodeScopeGroup)
newRegionSet(currentSet->getParent());
else
newRegionSet(currentSet);
lastHeader = Header::Group;
lastHeader = OpcodeScope::kOpcodeScopeGroup;
handleGroupOpcodes(members, masterOpcodes);
numGroups++;
break;
@ -175,6 +175,7 @@ void sfz::Synth::clear()
for (auto& list : ccActivationLists)
list.clear();
lastHeader = OpcodeScope::kOpcodeScopeGlobal;
sets.clear();
sets.emplace_back(new RegionSet);
currentSet = sets.front().get();

View file

@ -707,9 +707,8 @@ private:
std::vector<RegionPtr> regions;
std::vector<VoicePtr> voices;
// These are more general "groups" than sfz and encapsulates the full hierarchy
enum class Header { Global, Master, Group };
RegionSet* currentSet;
Header lastHeader { Header::Global };
OpcodeScope lastHeader { OpcodeScope::kOpcodeScopeGlobal };
std::vector<RegionSetPtr> sets;
// These are the `group=` groups where you can off voices
std::vector<PolyphonyGroup> polyphonyGroups;