Keep path and description updated separately
This commit is contained in:
parent
5fbb499d9b
commit
0d8deb1fb9
4 changed files with 34 additions and 5 deletions
|
|
@ -23,6 +23,7 @@ tresult PLUGIN_API SfizzVstControllerNoUi::initialize(FUnknown* context)
|
||||||
oscUpdate_ = Steinberg::owned(new OSCUpdate);
|
oscUpdate_ = Steinberg::owned(new OSCUpdate);
|
||||||
noteUpdate_ = Steinberg::owned(new NoteUpdate);
|
noteUpdate_ = Steinberg::owned(new NoteUpdate);
|
||||||
sfzUpdate_ = Steinberg::owned(new SfzUpdate);
|
sfzUpdate_ = Steinberg::owned(new SfzUpdate);
|
||||||
|
sfzDescriptionUpdate_ = Steinberg::owned(new SfzDescriptionUpdate);
|
||||||
scalaUpdate_ = Steinberg::owned(new ScalaUpdate);
|
scalaUpdate_ = Steinberg::owned(new ScalaUpdate);
|
||||||
processorStateUpdate_ = Steinberg::owned(new ProcessorStateUpdate);
|
processorStateUpdate_ = Steinberg::owned(new ProcessorStateUpdate);
|
||||||
playStateUpdate_ = Steinberg::owned(new PlayStateUpdate);
|
playStateUpdate_ = Steinberg::owned(new PlayStateUpdate);
|
||||||
|
|
@ -211,6 +212,8 @@ tresult PLUGIN_API SfizzVstControllerNoUi::setComponentState(IBStream* stream)
|
||||||
setParam(kPidTuningFrequency, s.tuningFrequency);
|
setParam(kPidTuningFrequency, s.tuningFrequency);
|
||||||
setParam(kPidStretchedTuning, s.stretchedTuning);
|
setParam(kPidStretchedTuning, s.stretchedTuning);
|
||||||
|
|
||||||
|
sfzUpdate_->setPath(s.sfzFile);
|
||||||
|
sfzUpdate_->deferUpdate();
|
||||||
scalaUpdate_->setPath(s.scalaFile);
|
scalaUpdate_->setPath(s.scalaFile);
|
||||||
scalaUpdate_->deferUpdate();
|
scalaUpdate_->deferUpdate();
|
||||||
|
|
||||||
|
|
@ -254,8 +257,10 @@ tresult SfizzVstControllerNoUi::notify(Vst::IMessage* message)
|
||||||
processorStateUpdate_->access([sfzFile](SfizzVstState& state) {
|
processorStateUpdate_->access([sfzFile](SfizzVstState& state) {
|
||||||
state.sfzFile = std::string(sfzFile);
|
state.sfzFile = std::string(sfzFile);
|
||||||
});
|
});
|
||||||
sfzUpdate_->setPath(std::string(sfzFile), std::string(sfzDescriptionBlob));
|
sfzUpdate_->setPath(std::string(sfzFile));
|
||||||
sfzUpdate_->deferUpdate();
|
sfzUpdate_->deferUpdate();
|
||||||
|
sfzDescriptionUpdate_->setDescription(std::string(sfzDescriptionBlob));
|
||||||
|
sfzDescriptionUpdate_->deferUpdate();
|
||||||
}
|
}
|
||||||
else if (!strcmp(id, "LoadedScala")) {
|
else if (!strcmp(id, "LoadedScala")) {
|
||||||
absl::string_view scalaFile;
|
absl::string_view scalaFile;
|
||||||
|
|
@ -325,6 +330,7 @@ IPlugView* PLUGIN_API SfizzVstController::createView(FIDString _name)
|
||||||
|
|
||||||
std::vector<FObject*> continuousUpdates;
|
std::vector<FObject*> continuousUpdates;
|
||||||
continuousUpdates.push_back(sfzUpdate_);
|
continuousUpdates.push_back(sfzUpdate_);
|
||||||
|
continuousUpdates.push_back(sfzDescriptionUpdate_);
|
||||||
continuousUpdates.push_back(scalaUpdate_);
|
continuousUpdates.push_back(scalaUpdate_);
|
||||||
continuousUpdates.push_back(playStateUpdate_);
|
continuousUpdates.push_back(playStateUpdate_);
|
||||||
for (uint32 i = 0, n = parameters.getParameterCount(); i < n; ++i)
|
for (uint32 i = 0, n = parameters.getParameterCount(); i < n; ++i)
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ protected:
|
||||||
Steinberg::IPtr<OSCUpdate> oscUpdate_;
|
Steinberg::IPtr<OSCUpdate> oscUpdate_;
|
||||||
Steinberg::IPtr<NoteUpdate> noteUpdate_;
|
Steinberg::IPtr<NoteUpdate> noteUpdate_;
|
||||||
Steinberg::IPtr<SfzUpdate> sfzUpdate_;
|
Steinberg::IPtr<SfzUpdate> sfzUpdate_;
|
||||||
|
Steinberg::IPtr<SfzDescriptionUpdate> sfzDescriptionUpdate_;
|
||||||
Steinberg::IPtr<ScalaUpdate> scalaUpdate_;
|
Steinberg::IPtr<ScalaUpdate> scalaUpdate_;
|
||||||
Steinberg::IPtr<ProcessorStateUpdate> processorStateUpdate_;
|
Steinberg::IPtr<ProcessorStateUpdate> processorStateUpdate_;
|
||||||
Steinberg::IPtr<PlayStateUpdate> playStateUpdate_;
|
Steinberg::IPtr<PlayStateUpdate> playStateUpdate_;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
#include "SfizzFileScan.h"
|
#include "SfizzFileScan.h"
|
||||||
#include "editor/Editor.h"
|
#include "editor/Editor.h"
|
||||||
#include "editor/EditIds.h"
|
#include "editor/EditIds.h"
|
||||||
|
#include "plugin/InstrumentDescription.h"
|
||||||
#include "IdleUpdateHandler.h"
|
#include "IdleUpdateHandler.h"
|
||||||
#if !defined(__APPLE__) && !defined(_WIN32)
|
#if !defined(__APPLE__) && !defined(_WIN32)
|
||||||
#include "X11RunLoop.h"
|
#include "X11RunLoop.h"
|
||||||
|
|
@ -193,6 +194,11 @@ void PLUGIN_API SfizzVstEditor::update(FUnknown* changedUnknown, int32 message)
|
||||||
uiReceiveValue(EditId::SfzFile, path);
|
uiReceiveValue(EditId::SfzFile, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SfzDescriptionUpdate* update = FCast<SfzDescriptionUpdate>(changedUnknown)) {
|
||||||
|
const InstrumentDescription desc = parseDescriptionBlob(update->getDescription());
|
||||||
|
// TODO(jpc) instrument description
|
||||||
|
}
|
||||||
|
|
||||||
if (ScalaUpdate* update = FCast<ScalaUpdate>(changedUnknown)) {
|
if (ScalaUpdate* update = FCast<ScalaUpdate>(changedUnknown)) {
|
||||||
const std::string path = update->getPath();
|
const std::string path = update->getPath();
|
||||||
uiReceiveValue(EditId::ScalaFile, path);
|
uiReceiveValue(EditId::ScalaFile, path);
|
||||||
|
|
|
||||||
|
|
@ -71,11 +71,10 @@ private:
|
||||||
*/
|
*/
|
||||||
class SfzUpdate : public Steinberg::FObject {
|
class SfzUpdate : public Steinberg::FObject {
|
||||||
public:
|
public:
|
||||||
void setPath(std::string newPath, std::string newDescription)
|
void setPath(std::string newPath)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
path_ = std::move(newPath);
|
path_ = std::move(newPath);
|
||||||
description_ = std::move(newDescription);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getPath() const
|
std::string getPath() const
|
||||||
|
|
@ -84,16 +83,33 @@ public:
|
||||||
return path_;
|
return path_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OBJ_METHODS(SfzUpdate, FObject)
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string path_;
|
||||||
|
mutable std::mutex mutex_;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update which notifies a change of SFZ description.
|
||||||
|
*/
|
||||||
|
class SfzDescriptionUpdate : public Steinberg::FObject {
|
||||||
|
public:
|
||||||
|
void setDescription(std::string newDescription)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
description_ = std::move(newDescription);
|
||||||
|
}
|
||||||
|
|
||||||
std::string getDescription() const
|
std::string getDescription() const
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
return description_;
|
return description_;
|
||||||
}
|
}
|
||||||
|
|
||||||
OBJ_METHODS(SfzUpdate, FObject)
|
OBJ_METHODS(SfzDescriptionUpdate, FObject)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string path_;
|
|
||||||
std::string description_;
|
std::string description_;
|
||||||
mutable std::mutex mutex_;
|
mutable std::mutex mutex_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue