Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/pluginterfaces/vst/ivstmidimapping2.h
T
2026-08-16 18:24:52 +07:00

183 lines
6.4 KiB
C++

//------------------------------------------------------------------------
// Flags : clang-format SMTGSequencer
// Project : VST SDK
//
// Category : Interfaces
// Filename : pluginterfaces/vst/ivstmidimapping2.h
// Created by : Steinberg, 10/2025
// Description : MIDI controller mapping (includes MIDI 2.0)
//
//-----------------------------------------------------------------------------
// This file is part of a Steinberg SDK. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this distribution
// and at www.steinberg.net/sdklicenses.
// No part of the SDK, including this file, may be copied, modified, propagated,
// or distributed except according to the terms contained in the LICENSE file.
//-----------------------------------------------------------------------------
#pragma once
#include "pluginterfaces/vst/ivstcomponent.h"
#include "pluginterfaces/vst/vsttypes.h"
//------------------------------------------------------------------------
#include "pluginterfaces/base/falignpush.h"
//------------------------------------------------------------------------
//------------------------------------------------------------------------
namespace Steinberg {
namespace Vst {
using MidiGroup = uint8;
using MidiChannel = uint8;
using BusIndex = int32;
//------------------------------------------------------------------------
/** Midi2Controller
*
* describes a MIDI 2.0 Registered or Assignable Controller
*
*/
struct Midi2Controller
{
uint8 bank : 7; // msb
TBool registered : 1; // true: registered, false: assignable
uint8 index : 7; // lsb
TBool reserved : 1;
};
//------------------------------------------------------------------------
struct Midi2ControllerParamIDAssignment
{
ParamID pId;
BusIndex busIndex;
MidiChannel channel;
Midi2Controller controller;
};
//------------------------------------------------------------------------
struct Midi2ControllerParamIDAssignmentList
{
uint32 count;
Midi2ControllerParamIDAssignment* map;
};
//------------------------------------------------------------------------
struct Midi1ControllerParamIDAssignment
{
ParamID pId;
BusIndex busIndex;
MidiChannel channel;
CtrlNumber controller;
};
//------------------------------------------------------------------------
struct Midi1ControllerParamIDAssignmentList
{
uint32 count;
Midi1ControllerParamIDAssignment* map;
};
//------------------------------------------------------------------------
/** MIDI Mapping interface: Vst::IMidiMapping2
\ingroup vstIPlug vst380
- [plug imp]
- [extends IEditController]
- [released: 3.8.0]
- [optional]
- [replaces Vst::IMidiMapping]
This interface replaces Vst::IMidiMapping to support the extended MIDI controllers in MIDI 2.0.
A MIDI 2.0 capable host first queries for the Vst::IMidiMapping2 interface and uses the old
Vst::IMidiMapping interface as a fallback.
A plug-in can use the Vst::IPlugInterfaceSupport to check if the host supports Vst::IMidiMapping2.
*/
class IMidiMapping2 : public FUnknown
{
public:
/** Gets the number of MIDI 2.0 controller to parameter assignments
*
* @param direction input/output direction
* @return number of MIDI 2.0 controller to parameter assignments
* \note [UI-thread & Connected] */
virtual uint32 PLUGIN_API getNumMidi2ControllerAssignments (BusDirections direction) = 0;
/** Gets MIDI 2.0 controller parameter assignments
*
* the list is preallocated by the host and must be filled by the plug-in
*
* @param direction input/output direction
* @param list list of assignments
* @return kResultTrue on success
* \note [UI-thread & Connected] */
virtual tresult PLUGIN_API getMidi2ControllerAssignments (
BusDirections direction, const Midi2ControllerParamIDAssignmentList& list) = 0;
/** Gets the number of MIDI 1.0 controller to parameter assignments
*
* @param direction input/output direction
* @return number of MIDI 1.0 controller to parameter assignments
* \note [UI-thread & Connected] */
virtual uint32 PLUGIN_API getNumMidi1ControllerAssignments (BusDirections direction) = 0;
/** Gets MIDI 1.0 controller parameter assignments
*
* the list is preallocated by the host and must be filled by the plug-in
*
* @param direction input/output direction
* @param list list of assignments
* @return kResultTrue on success
* \note [UI-thread & Connected] */
virtual tresult PLUGIN_API getMidi1ControllerAssignments (
BusDirections direction, const Midi1ControllerParamIDAssignmentList& list) = 0;
//------------------------------------------------------------------------
static const FUID iid;
};
DECLARE_CLASS_IID (IMidiMapping2, 0x6DE14B88, 0x03F94F09, 0xA2552F0F, 0x9326593E)
//------------------------------------------------------------------------
/** MIDI Learn interface: Vst::IMidiLearn2
\ingroup vstIPlug vst380
- [plug imp]
- [extends IEditController]
- [released: 3.8.0]
- [optional]
- [replaces Vst::IMidiLearn]
If this interface is implemented by the edit controller, the host will call this method whenever
there is live MIDI-CC input for the plug-in. This way, the plug-in can change its MIDI-CC parameter
mapping and notify the host using IComponentHandler::restartComponent with the
kMidiCCAssignmentChanged flag.
Use this if you want to implement custom MIDI-Learn functionality in your plug-in.
*/
class IMidiLearn2 : public FUnknown
{
public:
/** Called on live input MIDI 2.0-CC change associated to a given bus index and MIDI channel
* \note [UI-thread & (Initialized | Connected)] */
virtual tresult PLUGIN_API onLiveMidi2ControllerInput (BusIndex index, MidiChannel channel,
Midi2Controller midiCC) = 0;
/** Called on live input MIDI 1.0-CC change associated to a given bus index and MIDI channel
* \note [UI-thread & (Initialized | Connected)] */
virtual tresult PLUGIN_API onLiveMidi1ControllerInput (BusIndex index, MidiChannel channel,
CtrlNumber midiCC) = 0;
//------------------------------------------------------------------------
static const FUID iid;
};
DECLARE_CLASS_IID (IMidiLearn2, 0xF07E498A, 0x78864327, 0x8B431CED, 0xA3C553FC)
//------------------------------------------------------------------------
} // namespace Vst
} // namespace Steinberg
//------------------------------------------------------------------------
#include "pluginterfaces/base/falignpop.h"
//------------------------------------------------------------------------