Access to key label via OSC
This commit is contained in:
parent
6e8afb0ea0
commit
ca983090cc
3 changed files with 37 additions and 2 deletions
|
|
@ -249,7 +249,7 @@ void Synth::Impl::clear()
|
||||||
clearCCLabels();
|
clearCCLabels();
|
||||||
currentUsedCCs_.clear();
|
currentUsedCCs_.clear();
|
||||||
changedCCsThisCycle_.clear();
|
changedCCsThisCycle_.clear();
|
||||||
keyLabels_.clear();
|
clearKeyLabels();
|
||||||
keySlots_.clear();
|
keySlots_.clear();
|
||||||
swLastSlots_.clear();
|
swLastSlots_.clear();
|
||||||
clearKeyswitchLabels();
|
clearKeyswitchLabels();
|
||||||
|
|
@ -371,7 +371,7 @@ void Synth::Impl::handleControlOpcodes(const std::vector<Opcode>& members)
|
||||||
case hash("label_key&"):
|
case hash("label_key&"):
|
||||||
if (member.parameters.back() <= Default::key.bounds.getEnd()) {
|
if (member.parameters.back() <= Default::key.bounds.getEnd()) {
|
||||||
const auto noteNumber = static_cast<uint8_t>(member.parameters.back());
|
const auto noteNumber = static_cast<uint8_t>(member.parameters.back());
|
||||||
insertPairUniquely(keyLabels_, noteNumber, std::string(member.value));
|
setKeyLabel(noteNumber, member.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("default_path"):
|
case hash("default_path"):
|
||||||
|
|
@ -1905,6 +1905,24 @@ BitArray<config::numCCs> Synth::Impl::collectAllUsedCCs()
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string* Synth::Impl::getKeyLabel(int keyNumber)
|
||||||
|
{
|
||||||
|
auto it = keyLabelsMap_.find(keyNumber);
|
||||||
|
return (it == keyLabelsMap_.end()) ? nullptr : &keyLabels_[it->second].second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Synth::Impl::setKeyLabel(int keyNumber, std::string name)
|
||||||
|
{
|
||||||
|
auto it = keyLabelsMap_.find(keyNumber);
|
||||||
|
if (it != keyLabelsMap_.end())
|
||||||
|
keyLabels_[it->second].second = std::move(name);
|
||||||
|
else {
|
||||||
|
size_t index = keyLabels_.size();
|
||||||
|
keyLabels_.emplace_back(keyNumber, std::move(name));
|
||||||
|
keyLabelsMap_[keyNumber] = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::string* Synth::Impl::getCCLabel(int ccNumber)
|
const std::string* Synth::Impl::getCCLabel(int ccNumber)
|
||||||
{
|
{
|
||||||
auto it = ccLabelsMap_.find(ccNumber);
|
auto it = ccLabelsMap_.find(ccNumber);
|
||||||
|
|
@ -1941,6 +1959,12 @@ void Synth::Impl::setKeyswitchLabel(int swNumber, std::string name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Synth::Impl::clearKeyLabels()
|
||||||
|
{
|
||||||
|
keyLabels_.clear();
|
||||||
|
keyLabelsMap_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void Synth::Impl::clearCCLabels()
|
void Synth::Impl::clearCCLabels()
|
||||||
{
|
{
|
||||||
ccLabels_.clear();
|
ccLabels_.clear();
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,13 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
|
||||||
client.receive<'b'>(delay, path, &blob);
|
client.receive<'b'>(delay, path, &blob);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
MATCH("/key%d/label", "") {
|
||||||
|
if (indices[0] >= 128)
|
||||||
|
break;
|
||||||
|
const std::string* label = impl.getKeyLabel(indices[0]);
|
||||||
|
client.receive<'s'>(delay, path, label ? label->c_str() : "");
|
||||||
|
} break;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
MATCH("/sw/last/slots", "") {
|
MATCH("/sw/last/slots", "") {
|
||||||
|
|
|
||||||
|
|
@ -181,6 +181,9 @@ struct Synth::Impl final: public Parser::Listener {
|
||||||
|
|
||||||
BitArray<config::numCCs> collectAllUsedCCs();
|
BitArray<config::numCCs> collectAllUsedCCs();
|
||||||
|
|
||||||
|
const std::string* getKeyLabel(int keyNumber);
|
||||||
|
void setKeyLabel(int keyNumber, std::string name);
|
||||||
|
void clearKeyLabels();
|
||||||
const std::string* getCCLabel(int ccNumber);
|
const std::string* getCCLabel(int ccNumber);
|
||||||
void setCCLabel(int ccNumber, std::string name);
|
void setCCLabel(int ccNumber, std::string name);
|
||||||
void clearCCLabels();
|
void clearCCLabels();
|
||||||
|
|
@ -219,6 +222,7 @@ struct Synth::Impl final: public Parser::Listener {
|
||||||
std::vector<CCNamePair> ccLabels_;
|
std::vector<CCNamePair> ccLabels_;
|
||||||
std::map<int, size_t> ccLabelsMap_;
|
std::map<int, size_t> ccLabelsMap_;
|
||||||
std::vector<NoteNamePair> keyLabels_;
|
std::vector<NoteNamePair> keyLabels_;
|
||||||
|
std::map<int, size_t> keyLabelsMap_;
|
||||||
BitArray<128> keySlots_;
|
BitArray<128> keySlots_;
|
||||||
BitArray<128> swLastSlots_;
|
BitArray<128> swLastSlots_;
|
||||||
std::vector<NoteNamePair> keyswitchLabels_;
|
std::vector<NoteNamePair> keyswitchLabels_;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue