in pedalboard/juce_overrides/juce_PatchedVST3PluginFormat.cpp [3376:3445]
void syncProgramNames() {
programNames.clear();
if (processor == nullptr || editController == nullptr)
return;
Vst::UnitID programUnitID;
Vst::ParameterInfo paramInfo{};
{
int idx, num = editController->getParameterCount();
for (idx = 0; idx < num; ++idx)
if (editController->getParameterInfo(idx, paramInfo) == kResultOk &&
(paramInfo.flags &
Steinberg::Vst::ParameterInfo::kIsProgramChange) != 0)
break;
if (idx >= num)
return;
programParameterID = paramInfo.id;
programUnitID = paramInfo.unitId;
}
if (unitInfo != nullptr) {
Vst::UnitInfo uInfo{};
const int unitCount = unitInfo->getUnitCount();
for (int idx = 0; idx < unitCount; ++idx) {
if (unitInfo->getUnitInfo(idx, uInfo) == kResultOk &&
uInfo.id == programUnitID) {
const int programListCount = unitInfo->getProgramListCount();
for (int j = 0; j < programListCount; ++j) {
Vst::ProgramListInfo programListInfo{};
if (unitInfo->getProgramListInfo(j, programListInfo) == kResultOk &&
programListInfo.id == uInfo.programListId) {
Vst::String128 name;
for (int k = 0; k < programListInfo.programCount; ++k)
if (unitInfo->getProgramName(programListInfo.id, k, name) ==
kResultOk)
programNames.add(toString(name));
return;
}
}
break;
}
}
}
if (editController != nullptr && paramInfo.stepCount > 0) {
auto numPrograms = paramInfo.stepCount + 1;
for (int i = 0; i < numPrograms; ++i) {
auto valueNormalized =
static_cast<Vst::ParamValue>(i) /
static_cast<Vst::ParamValue>(paramInfo.stepCount);
Vst::String128 programName;
if (editController->getParamStringByValue(paramInfo.id, valueNormalized,
programName) == kResultOk)
programNames.add(toString(programName));
}
}
}