VST 3 Interfaces: IMidiLearn Class Reference
Author: Steinberg

VST 3 Interfaces VST 3.8 SDK for developing VST plug-in

Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | List of all members
IMidiLearn Class Referenceabstract

MIDI Learn interface: Vst::IMidiLearn. More...

`#include <ivstmidilearn.h>`

Inheritance diagram for IMidiLearn:

## Public Member Functions
virtual tresult | onLiveMIDIControllerInput (int32 busIndex, int16 channel, CtrlNumber midiCC)=0
| Called on live input MIDI-CC change associated to a given bus index and MIDI channel.
Public Member Functions inherited from FUnknown
virtual tresult | queryInterface (const TUID _iid, void **obj)=0
virtual uint32 | addRef ()=0
virtual uint32 | release ()=0

## Static Public Attributes
static const FUID | iid
Static Public Attributes inherited from FUnknown
static const FUID | iid

## Detailed Description

MIDI Learn interface: Vst::IMidiLearn.

- [plug imp]
- [extends IEditController]
- [released: 3.6.12]
- [optional]

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 the IComponentHandler::restartComponent with the kMidiCCAssignmentChanged flag. Use this if you want to implement custom MIDI-Learn functionality in your plug-in.

//------------------------------------------------
// in MyController class declaration
class MyController : public Vst::EditController, public Vst::IMidiLearn
{
// ...
//--- IMidiLearn ---------------------------------
tresult PLUGIN_API onLiveMIDIControllerInput (int32 busIndex, int16 channel,
CtrlNumber midiCC) SMTG_OVERRIDE;
// ...
OBJ_METHODS (MyController, Vst::EditController)
DEFINE_INTERFACES
// ...
DEF_INTERFACE (Vst::IMidiLearn)
END_DEFINE_INTERFACES (Vst::EditController)
//...
}
//------------------------------------------------
// in mycontroller.cpp
#include "pluginterfaces/vst/ivstmidilearn.h
namespace Steinberg {
namespace Vst {
DEF_CLASS_IID (IMidiLearn)
}
}
//------------------------------------------------------------------------
tresult PLUGIN_API MyController::onLiveMIDIControllerInput (int32 busIndex,
int16 channel, CtrlNumber midiCC)
{
// if we are not in doMIDILearn (triggered by a UI button for example)
// or wrong channel then return
if (!doMIDILearn || busIndex != 0 || channel != 0 || midiLearnParamID == InvalidParamID)
return kResultFalse;
// adapt our internal MIDICC -> parameterID mapping
midiCCMapping[midiCC] = midiLearnParamID;
// new mapping then inform the host that our MIDI assignment has changed
if (auto componentHandler = getComponentHandler ())
{
componentHandler->restartComponent (kMidiCCAssignmentChanged);
}
return kResultTrue;
}
Steinberg::Vst::EditController
Steinberg::Vst::IMidiLearn
MIDI Learn interface: Vst::IMidiLearn.
Definition ivstmidilearn.h:90
Steinberg::Vst::IMidiLearn::onLiveMIDIControllerInput
virtual tresult onLiveMIDIControllerInput(int32 busIndex, int16 channel, CtrlNumber midiCC)=0
Called on live input MIDI-CC change associated to a given bus index and MIDI channel.
SMTG_OVERRIDE
#define SMTG_OVERRIDE
Steinberg::tresult
int32 tresult
Steinberg::int16
int16_t int16
Steinberg::int32
int32_t int32
Steinberg::Vst::CtrlNumber
int16 CtrlNumber
MIDI controller number (see ControllerNumbers for allowed values)
Definition vsttypes.h:96
Steinberg::Vst::kMidiCCAssignmentChanged
@ kMidiCCAssignmentChanged
MIDI Controllers and/or Program Changes Assignments have changed The plug-in informs the host that it...
Definition ivsteditcontroller.h:155
Steinberg::kResultTrue
kResultTrue

## Member Function Documentation

## ◆ onLiveMIDIControllerInput()

virtual tresult onLiveMIDIControllerInput | ( | int32 | busIndex,
|  | int16 | channel,
|  | CtrlNumber | midiCC )
| pure virtual

Called on live input MIDI-CC change associated to a given bus index and MIDI channel.

Note
  [UI-thread & (Initialized | Connected)]

## Member Data Documentation

## ◆ iid

const FUID iid
| static

Empty

Copyright © Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.