Add a proxy class for INoteExpressionController

This commit is contained in:
Robbert van der Helm
2021-01-01 21:37:38 +01:00
parent 34f8d3b1d2
commit c6276d03a1
4 changed files with 141 additions and 17 deletions
+2
View File
@@ -98,6 +98,7 @@ vst3_plugin_sources = [
'src/common/serialization/vst3/plugin/connection-point.cpp', 'src/common/serialization/vst3/plugin/connection-point.cpp',
'src/common/serialization/vst3/plugin/edit-controller.cpp', 'src/common/serialization/vst3/plugin/edit-controller.cpp',
'src/common/serialization/vst3/plugin/edit-controller-2.cpp', 'src/common/serialization/vst3/plugin/edit-controller-2.cpp',
'src/common/serialization/vst3/plugin/note-expression-controller.cpp',
'src/common/serialization/vst3/plugin/plugin-base.cpp', 'src/common/serialization/vst3/plugin/plugin-base.cpp',
'src/common/serialization/vst3/plugin/program-list-data.cpp', 'src/common/serialization/vst3/plugin/program-list-data.cpp',
'src/common/serialization/vst3/plugin/unit-data.cpp', 'src/common/serialization/vst3/plugin/unit-data.cpp',
@@ -158,6 +159,7 @@ if with_vst3
'src/common/serialization/vst3/plugin/connection-point.cpp', 'src/common/serialization/vst3/plugin/connection-point.cpp',
'src/common/serialization/vst3/plugin/edit-controller.cpp', 'src/common/serialization/vst3/plugin/edit-controller.cpp',
'src/common/serialization/vst3/plugin/edit-controller-2.cpp', 'src/common/serialization/vst3/plugin/edit-controller-2.cpp',
'src/common/serialization/vst3/plugin/note-expression-controller.cpp',
'src/common/serialization/vst3/plugin/plugin-base.cpp', 'src/common/serialization/vst3/plugin/plugin-base.cpp',
'src/common/serialization/vst3/plugin/program-list-data.cpp', 'src/common/serialization/vst3/plugin/program-list-data.cpp',
'src/common/serialization/vst3/plugin/unit-data.cpp', 'src/common/serialization/vst3/plugin/unit-data.cpp',
+20 -17
View File
@@ -6,28 +6,31 @@ for more information on how the serialization works.
The following interfaces are not yet implemented: The following interfaces are not yet implemented:
- Every interface introduced after VST 3.0.0 - Every interface introduced after VST 3.0.0 with the exceptons of
`IEditController2` and `INoteExpressionController` which has already been
implemented
- The [Presonus extensions](https://presonussoftware.com/en_US/developer), - The [Presonus extensions](https://presonussoftware.com/en_US/developer),
although most of these things seem to overlap with newer VST3 interfaces although most of these things seem to overlap with newer VST3 interfaces
VST3 plugin interfaces are implemented as follows: VST3 plugin interfaces are implemented as follows:
| yabridge class | Included in | Interfaces | | yabridge class | Included in | Interfaces |
| -------------------------- | ------------------- | ------------------------------------------------------ | | ---------------------------- | ------------------- | ------------------------------------------------------ |
| `YaPluginFactory` | | `IPluginFactory`, `IPluginFactory2`, `IPluginFactory3` | | `YaPluginFactory` | | `IPluginFactory`, `IPluginFactory2`, `IPluginFactory3` |
| `Vst3ConnectionPointProxy` | | `IConnectionPoint` through `YaConnectionPoint` | | `Vst3ConnectionPointProxy` | | `IConnectionPoint` through `YaConnectionPoint` |
| `Vst3PlugViewProxy` | | All of the below: | | `Vst3PlugViewProxy` | | All of the below: |
| `YaPlugView` | `Vst3PlugViewProxy` | `IPlugView` | | `YaPlugView` | `Vst3PlugViewProxy` | `IPlugView` |
| `Vst3PluginProxy` | | All of the below: | | `Vst3PluginProxy` | | All of the below: |
| `YaAudioProcessor` | `Vst3PluginProxy` | `IAudioProcessor` | | `YaAudioProcessor` | `Vst3PluginProxy` | `IAudioProcessor` |
| `YaComponent` | `Vst3PluginProxy` | `IComponent` | | `YaComponent` | `Vst3PluginProxy` | `IComponent` |
| `YaConnectionPoint` | `Vst3PluginProxy` | `IConnectionPoint` | | `YaConnectionPoint` | `Vst3PluginProxy` | `IConnectionPoint` |
| `YaEditController` | `Vst3PluginProxy` | `IEditController` | | `YaEditController` | `Vst3PluginProxy` | `IEditController` |
| `YaEditController2` | `Vst3PluginProxy` | `IEditController2` | | `YaEditController2` | `Vst3PluginProxy` | `IEditController2` |
| `YaPluginBase` | `Vst3PluginProxy` | `IPluginBase` | | `YaNoteExpressionController` | `Vst3PluginProxy` | `INoteExpressionController` |
| `YaProgramListData` | `Vst3PluginProxy` | `IProgramListData` | | `YaPluginBase` | `Vst3PluginProxy` | `IPluginBase` |
| `YaUnitData` | `Vst3PluginProxy` | `IUnitData` | | `YaProgramListData` | `Vst3PluginProxy` | `IProgramListData` |
| `YaUnitInfo` | `Vst3PluginProxy` | `IUnitInfo` | | `YaUnitData` | `Vst3PluginProxy` | `IUnitData` |
| `YaUnitInfo` | `Vst3PluginProxy` | `IUnitInfo` |
VST3 host interfaces are implemented as follows: VST3 host interfaces are implemented as follows:
@@ -0,0 +1,29 @@
// yabridge: a Wine VST bridge
// Copyright (C) 2020-2021 Robbert van der Helm
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#include "note-expression-controller.h"
YaNoteExpressionController::ConstructArgs::ConstructArgs() {}
YaNoteExpressionController::ConstructArgs::ConstructArgs(
Steinberg::IPtr<Steinberg::FUnknown> object)
: supported(
Steinberg::FUnknownPtr<Steinberg::Vst::INoteExpressionController>(
object)) {}
YaNoteExpressionController::YaNoteExpressionController(
const ConstructArgs&& args)
: arguments(std::move(args)) {}
@@ -0,0 +1,90 @@
// yabridge: a Wine VST bridge
// Copyright (C) 2020-2021 Robbert van der Helm
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#include <pluginterfaces/vst/ivstnoteexpression.h>
#include "../../common.h"
#include "../base.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
/**
* Wraps around `INoteExpressionController` for serialization purposes. This is
* instantiated as part of `Vst3PluginProxy`.
*/
class YaNoteExpressionController
: public Steinberg::Vst::INoteExpressionController {
public:
/**
* These are the arguments for creating a `YaNoteExpressionController`.
*/
struct ConstructArgs {
ConstructArgs();
/**
* Check whether an existing implementation implements
* `INoteExpressionController` and read arguments from it.
*/
ConstructArgs(Steinberg::IPtr<Steinberg::FUnknown> object);
/**
* Whether the object supported this interface.
*/
bool supported;
template <typename S>
void serialize(S& s) {
s.value1b(supported);
}
};
/**
* Instantiate this instance with arguments read from another interface
* implementation.
*/
YaNoteExpressionController(const ConstructArgs&& args);
inline bool supported() const { return arguments.supported; }
virtual int32 PLUGIN_API getNoteExpressionCount(int32 busIndex,
int16 channel) override = 0;
virtual tresult PLUGIN_API getNoteExpressionInfo(
int32 busIndex,
int16 channel,
int32 noteExpressionIndex,
Steinberg::Vst::NoteExpressionTypeInfo& info /*out*/) override = 0;
virtual tresult PLUGIN_API getNoteExpressionStringByValue(
int32 busIndex,
int16 channel,
Steinberg::Vst::NoteExpressionTypeID id,
Steinberg::Vst::NoteExpressionValue valueNormalized /*in*/,
Steinberg::Vst::String128 string /*out*/) override = 0;
virtual tresult PLUGIN_API getNoteExpressionValueByString(
int32 busIndex,
int16 channel,
Steinberg::Vst::NoteExpressionTypeID id,
const Steinberg::Vst::TChar* string /*in*/,
Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/)
override = 0;
protected:
ConstructArgs arguments;
};
#pragma GCC diagnostic pop