183 lines
6.4 KiB
C++
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"
|
|
//------------------------------------------------------------------------
|