mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-16 21:50:11 +02:00
Fully implement INoteExpressionCOntroller
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user