Use the existing OpcodeScope and ass the "<master>" level
This commit is contained in:
parent
89093b1826
commit
7559dfdd7b
3 changed files with 8 additions and 6 deletions
|
|
@ -47,6 +47,8 @@ enum OpcodeScope {
|
||||||
kOpcodeScopeGlobal,
|
kOpcodeScopeGlobal,
|
||||||
//! control scope
|
//! control scope
|
||||||
kOpcodeScopeControl,
|
kOpcodeScopeControl,
|
||||||
|
//! Master scope
|
||||||
|
kOpcodeScopeMaster,
|
||||||
//! group scope
|
//! group scope
|
||||||
kOpcodeScopeGroup,
|
kOpcodeScopeGroup,
|
||||||
//! region scope
|
//! region scope
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ void sfz::Synth::onParseFullBlock(const std::string& header, const std::vector<O
|
||||||
case hash("global"):
|
case hash("global"):
|
||||||
globalOpcodes = members;
|
globalOpcodes = members;
|
||||||
currentSet = sets.front().get();
|
currentSet = sets.front().get();
|
||||||
lastHeader = Header::Global;
|
lastHeader = OpcodeScope::kOpcodeScopeGlobal;
|
||||||
groupOpcodes.clear();
|
groupOpcodes.clear();
|
||||||
masterOpcodes.clear();
|
masterOpcodes.clear();
|
||||||
handleGlobalOpcodes(members);
|
handleGlobalOpcodes(members);
|
||||||
|
|
@ -87,17 +87,17 @@ void sfz::Synth::onParseFullBlock(const std::string& header, const std::vector<O
|
||||||
masterOpcodes = members;
|
masterOpcodes = members;
|
||||||
newRegionSet(sets.front().get());
|
newRegionSet(sets.front().get());
|
||||||
groupOpcodes.clear();
|
groupOpcodes.clear();
|
||||||
lastHeader = Header::Master;
|
lastHeader = OpcodeScope::kOpcodeScopeMaster;
|
||||||
handleMasterOpcodes(members);
|
handleMasterOpcodes(members);
|
||||||
numMasters++;
|
numMasters++;
|
||||||
break;
|
break;
|
||||||
case hash("group"):
|
case hash("group"):
|
||||||
groupOpcodes = members;
|
groupOpcodes = members;
|
||||||
if (lastHeader == Header::Group)
|
if (lastHeader == OpcodeScope::kOpcodeScopeGroup)
|
||||||
newRegionSet(currentSet->getParent());
|
newRegionSet(currentSet->getParent());
|
||||||
else
|
else
|
||||||
newRegionSet(currentSet);
|
newRegionSet(currentSet);
|
||||||
lastHeader = Header::Group;
|
lastHeader = OpcodeScope::kOpcodeScopeGroup;
|
||||||
handleGroupOpcodes(members, masterOpcodes);
|
handleGroupOpcodes(members, masterOpcodes);
|
||||||
numGroups++;
|
numGroups++;
|
||||||
break;
|
break;
|
||||||
|
|
@ -175,6 +175,7 @@ void sfz::Synth::clear()
|
||||||
for (auto& list : ccActivationLists)
|
for (auto& list : ccActivationLists)
|
||||||
list.clear();
|
list.clear();
|
||||||
|
|
||||||
|
lastHeader = OpcodeScope::kOpcodeScopeGlobal;
|
||||||
sets.clear();
|
sets.clear();
|
||||||
sets.emplace_back(new RegionSet);
|
sets.emplace_back(new RegionSet);
|
||||||
currentSet = sets.front().get();
|
currentSet = sets.front().get();
|
||||||
|
|
|
||||||
|
|
@ -707,9 +707,8 @@ private:
|
||||||
std::vector<RegionPtr> regions;
|
std::vector<RegionPtr> regions;
|
||||||
std::vector<VoicePtr> voices;
|
std::vector<VoicePtr> voices;
|
||||||
// These are more general "groups" than sfz and encapsulates the full hierarchy
|
// These are more general "groups" than sfz and encapsulates the full hierarchy
|
||||||
enum class Header { Global, Master, Group };
|
|
||||||
RegionSet* currentSet;
|
RegionSet* currentSet;
|
||||||
Header lastHeader { Header::Global };
|
OpcodeScope lastHeader { OpcodeScope::kOpcodeScopeGlobal };
|
||||||
std::vector<RegionSetPtr> sets;
|
std::vector<RegionSetPtr> sets;
|
||||||
// These are the `group=` groups where you can off voices
|
// These are the `group=` groups where you can off voices
|
||||||
std::vector<PolyphonyGroup> polyphonyGroups;
|
std::vector<PolyphonyGroup> polyphonyGroups;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue