Fully implement INoteExpressionCOntroller

This commit is contained in:
Robbert van der Helm
2021-01-02 18:40:34 +01:00
parent 26c04cf246
commit a8a0e325fe
4 changed files with 160 additions and 76 deletions
+61 -56
View File
@@ -62,62 +62,67 @@ struct WantsConfiguration {
* encodes the information we request or the operation we want to perform. A * encodes the information we request or the operation we want to perform. A
* request of type `ControlRequest(T)` should send back a `T::Response`. * request of type `ControlRequest(T)` should send back a `T::Response`.
*/ */
using ControlRequest = std::variant<Vst3PlugViewProxy::Destruct, using ControlRequest =
Vst3PluginProxy::Construct, std::variant<Vst3PlugViewProxy::Destruct,
Vst3PluginProxy::Destruct, Vst3PluginProxy::Construct,
Vst3PluginProxy::SetState, Vst3PluginProxy::Destruct,
Vst3PluginProxy::GetState, Vst3PluginProxy::SetState,
YaConnectionPoint::Connect, Vst3PluginProxy::GetState,
YaConnectionPoint::Disconnect, YaConnectionPoint::Connect,
YaConnectionPoint::Notify, YaConnectionPoint::Disconnect,
YaEditController::SetComponentState, YaConnectionPoint::Notify,
YaEditController::GetParameterCount, YaEditController::SetComponentState,
YaEditController::GetParameterInfo, YaEditController::GetParameterCount,
YaEditController::GetParamStringByValue, YaEditController::GetParameterInfo,
YaEditController::GetParamValueByString, YaEditController::GetParamStringByValue,
YaEditController::NormalizedParamToPlain, YaEditController::GetParamValueByString,
YaEditController::PlainParamToNormalized, YaEditController::NormalizedParamToPlain,
YaEditController::GetParamNormalized, YaEditController::PlainParamToNormalized,
YaEditController::SetParamNormalized, YaEditController::GetParamNormalized,
YaEditController::SetComponentHandler, YaEditController::SetParamNormalized,
YaEditController::CreateView, YaEditController::SetComponentHandler,
YaEditController2::SetKnobMode, YaEditController::CreateView,
YaEditController2::OpenHelp, YaEditController2::SetKnobMode,
YaEditController2::OpenAboutBox, YaEditController2::OpenHelp,
YaPlugView::IsPlatformTypeSupported, YaEditController2::OpenAboutBox,
YaPlugView::Attached, YaNoteExpressionController::GetNoteExpressionCount,
YaPlugView::Removed, YaNoteExpressionController::GetNoteExpressionInfo,
YaPlugView::OnWheel, YaNoteExpressionController::GetNoteExpressionStringByValue,
YaPlugView::OnKeyDown, YaNoteExpressionController::GetNoteExpressionValueByString,
YaPlugView::OnKeyUp, YaPlugView::IsPlatformTypeSupported,
YaPlugView::GetSize, YaPlugView::Attached,
YaPlugView::OnSize, YaPlugView::Removed,
YaPlugView::OnFocus, YaPlugView::OnWheel,
YaPlugView::SetFrame, YaPlugView::OnKeyDown,
YaPlugView::CanResize, YaPlugView::OnKeyUp,
YaPlugView::CheckSizeConstraint, YaPlugView::GetSize,
YaPluginBase::Initialize, YaPlugView::OnSize,
YaPluginBase::Terminate, YaPlugView::OnFocus,
YaPluginFactory::Construct, YaPlugView::SetFrame,
YaPluginFactory::SetHostContext, YaPlugView::CanResize,
YaProgramListData::ProgramDataSupported, YaPlugView::CheckSizeConstraint,
YaProgramListData::GetProgramData, YaPluginBase::Initialize,
YaProgramListData::SetProgramData, YaPluginBase::Terminate,
YaUnitData::UnitDataSupported, YaPluginFactory::Construct,
YaUnitData::GetUnitData, YaPluginFactory::SetHostContext,
YaUnitData::SetUnitData, YaProgramListData::ProgramDataSupported,
YaUnitInfo::GetUnitCount, YaProgramListData::GetProgramData,
YaUnitInfo::GetUnitInfo, YaProgramListData::SetProgramData,
YaUnitInfo::GetProgramListCount, YaUnitData::UnitDataSupported,
YaUnitInfo::GetProgramListInfo, YaUnitData::GetUnitData,
YaUnitInfo::GetProgramName, YaUnitData::SetUnitData,
YaUnitInfo::GetProgramInfo, YaUnitInfo::GetUnitCount,
YaUnitInfo::HasProgramPitchNames, YaUnitInfo::GetUnitInfo,
YaUnitInfo::GetProgramPitchName, YaUnitInfo::GetProgramListCount,
YaUnitInfo::GetSelectedUnit, YaUnitInfo::GetProgramListInfo,
YaUnitInfo::SelectUnit, YaUnitInfo::GetProgramName,
YaUnitInfo::GetUnitByBus, YaUnitInfo::GetProgramInfo,
YaUnitInfo::SetUnitProgramData>; YaUnitInfo::HasProgramPitchNames,
YaUnitInfo::GetProgramPitchName,
YaUnitInfo::GetSelectedUnit,
YaUnitInfo::SelectUnit,
YaUnitInfo::GetUnitByBus,
YaUnitInfo::SetUnitProgramData>;
template <typename S> template <typename S>
void serialize(S& s, ControlRequest& payload) { void serialize(S& s, ControlRequest& payload) {
@@ -117,7 +117,7 @@ class YaNoteExpressionController
int32 bus_index; int32 bus_index;
int16 channel; int16 channel;
int16 note_expression_index; int32 note_expression_index;
template <typename S> template <typename S>
void serialize(S& s) { void serialize(S& s) {
+38 -18
View File
@@ -415,10 +415,11 @@ tresult PLUGIN_API Vst3PluginProxyImpl::openAboutBox(TBool onlyCheck) {
int32 PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionCount(int32 busIndex, int32 PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionCount(int32 busIndex,
int16 channel) { int16 channel) {
// TODO: Implement return bridge.send_message(
bridge.logger.log( YaNoteExpressionController::GetNoteExpressionCount{
"TODO: Implement INoteExpressionCOntroller::getNoteExpressionCount()"); .instance_id = instance_id(),
return Steinberg::kNotImplemented; .bus_index = busIndex,
.channel = channel});
} }
tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionInfo( tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionInfo(
@@ -426,10 +427,16 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionInfo(
int16 channel, int16 channel,
int32 noteExpressionIndex, int32 noteExpressionIndex,
Steinberg::Vst::NoteExpressionTypeInfo& info /*out*/) { Steinberg::Vst::NoteExpressionTypeInfo& info /*out*/) {
// TODO: Implement const GetNoteExpressionInfoResponse response =
bridge.logger.log( bridge.send_message(YaNoteExpressionController::GetNoteExpressionInfo{
"TODO: Implement INoteExpressionCOntroller::getNoteExpressionInfo()"); .instance_id = instance_id(),
return Steinberg::kNotImplemented; .bus_index = busIndex,
.channel = channel,
.note_expression_index = noteExpressionIndex});
info = response.info;
return response.result;
} }
tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionStringByValue( tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionStringByValue(
@@ -438,11 +445,18 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionStringByValue(
Steinberg::Vst::NoteExpressionTypeID id, Steinberg::Vst::NoteExpressionTypeID id,
Steinberg::Vst::NoteExpressionValue valueNormalized /*in*/, Steinberg::Vst::NoteExpressionValue valueNormalized /*in*/,
Steinberg::Vst::String128 string /*out*/) { Steinberg::Vst::String128 string /*out*/) {
// TODO: Implement const GetNoteExpressionStringByValueResponse response = bridge.send_message(
bridge.logger.log( YaNoteExpressionController::GetNoteExpressionStringByValue{
"TODO: Implement " .instance_id = instance_id(),
"INoteExpressionCOntroller::getNoteExpressionStringByValue()"); .bus_index = busIndex,
return Steinberg::kNotImplemented; .channel = channel,
.id = id,
.value_normalized = valueNormalized});
std::copy(response.string.begin(), response.string.end(), string);
string[response.string.size()] = 0;
return response.result;
} }
tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionValueByString( tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionValueByString(
@@ -451,11 +465,17 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionValueByString(
Steinberg::Vst::NoteExpressionTypeID id, Steinberg::Vst::NoteExpressionTypeID id,
const Steinberg::Vst::TChar* string /*in*/, const Steinberg::Vst::TChar* string /*in*/,
Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/) { Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/) {
// TODO: Implement const GetNoteExpressionValueByStringResponse response = bridge.send_message(
bridge.logger.log( YaNoteExpressionController::GetNoteExpressionValueByString{
"TODO: Implement " .instance_id = instance_id(),
"INoteExpressionCOntroller::getNoteExpressionValueByString()"); .bus_index = busIndex,
return Steinberg::kNotImplemented; .channel = channel,
.id = id,
.string = string});
valueNormalized = response.value_normalized;
return response.result;
} }
tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) { tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) {
+60 -1
View File
@@ -370,6 +370,65 @@ void Vst3Bridge::run() {
return object_instances[request.instance_id] return object_instances[request.instance_id]
.edit_controller_2->openAboutBox(request.only_check); .edit_controller_2->openAboutBox(request.only_check);
}, },
[&](const YaNoteExpressionController::GetNoteExpressionCount&
request)
-> YaNoteExpressionController::GetNoteExpressionCount::
Response {
return object_instances[request.instance_id]
.note_expression_controller->getNoteExpressionCount(
request.bus_index, request.channel);
},
[&](const YaNoteExpressionController::GetNoteExpressionInfo&
request)
-> YaNoteExpressionController::GetNoteExpressionInfo::Response {
Steinberg::Vst::NoteExpressionTypeInfo info{};
const tresult result =
object_instances[request.instance_id]
.note_expression_controller->getNoteExpressionInfo(
request.bus_index, request.channel,
request.note_expression_index, info);
return YaNoteExpressionController::
GetNoteExpressionInfoResponse{.result = result,
.info = std::move(info)};
},
[&](const YaNoteExpressionController::
GetNoteExpressionStringByValue& request)
-> YaNoteExpressionController::GetNoteExpressionStringByValue::
Response {
Steinberg::Vst::String128 string{0};
const tresult result =
object_instances[request.instance_id]
.note_expression_controller
->getNoteExpressionStringByValue(
request.bus_index, request.channel,
request.id, request.value_normalized,
string);
return YaNoteExpressionController::
GetNoteExpressionStringByValueResponse{
.result = result,
.string = tchar_pointer_to_u16string(string)};
},
[&](const YaNoteExpressionController::
GetNoteExpressionValueByString& request)
-> YaNoteExpressionController::GetNoteExpressionValueByString::
Response {
Steinberg::Vst::NoteExpressionValue value_normalized;
const tresult result =
object_instances[request.instance_id]
.note_expression_controller
->getNoteExpressionValueByString(
request.bus_index, request.channel,
request.id,
u16string_to_tchar_pointer(request.string),
value_normalized);
return YaNoteExpressionController::
GetNoteExpressionValueByStringResponse{
.result = result,
.value_normalized = value_normalized};
},
[&](const YaPlugView::IsPlatformTypeSupported& request) [&](const YaPlugView::IsPlatformTypeSupported& request)
-> YaPlugView::IsPlatformTypeSupported::Response { -> YaPlugView::IsPlatformTypeSupported::Response {
// The host will of course want to pass an X11 window ID for the // The host will of course want to pass an X11 window ID for the
@@ -831,7 +890,7 @@ size_t Vst3Bridge::register_object_instance(
}, },
[&](const YaComponent::GetControllerClassId& request) [&](const YaComponent::GetControllerClassId& request)
-> YaComponent::GetControllerClassId::Response { -> YaComponent::GetControllerClassId::Response {
Steinberg::TUID cid; Steinberg::TUID cid{0};
const tresult result = const tresult result =
object_instances[request.instance_id] object_instances[request.instance_id]
.component->getControllerClassId(cid); .component->getControllerClassId(cid);