Skip to content

Commit

Permalink
add channel aftertouch param to VST3 IPlug
Browse files Browse the repository at this point in the history
  • Loading branch information
pressplay-music committed Jan 11, 2019
1 parent 16a0485 commit 27475cf
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
7 changes: 7 additions & 0 deletions WDL/IPlug/IPlugStructs.cpp
Expand Up @@ -28,6 +28,13 @@ void IMidiMsg::MakePitchWheelMsg(double value, int channel)
mData1 = i&0x7F;
}

void IMidiMsg::MakeChannelAftertouchMsg(double value, int channel)
{
Clear();
mStatus = channel | (kChannelAftertouch << 4);
mData1 = static_cast<BYTE>(value * 127.0);
}

void IMidiMsg::MakeControlChangeMsg(EControlChangeMsg idx, double value, int channel)
{
Clear();
Expand Down
1 change: 1 addition & 0 deletions WDL/IPlug/IPlugStructs.h
Expand Up @@ -385,6 +385,7 @@ struct IMidiMsg
void MakeNoteOnMsg(int noteNumber, int velocity, int offset, int channel=0);
void MakeNoteOffMsg(int noteNumber, int offset, int channel=0);
void MakePitchWheelMsg(double value, int channel=0); // Value in [-1, 1], converts to [0, 16384) where 8192 = no pitch change.
void MakeChannelAftertouchMsg(double value, int channel=0);
void MakeControlChangeMsg(EControlChangeMsg idx, double value, int channel=0); // Value in [0, 1].
int Channel(); // returns [0, 15] for midi channels 1 ... 16

Expand Down
44 changes: 43 additions & 1 deletion WDL/IPlug/IPlugVST3.cpp
Expand Up @@ -8,6 +8,7 @@
#include "pluginterfaces/base/ibstream.h"
#include "pluginterfaces/vst/ivstparameterchanges.h"
#include "pluginterfaces/vst/ivstevents.h"
#include "pluginterfaces/vst/ivstmidicontrollers.h"

using namespace Steinberg;
using namespace Vst;
Expand Down Expand Up @@ -145,6 +146,33 @@ IPlugVST3::~IPlugVST3() {}
#pragma mark -
#pragma mark AudioEffect overrides

Steinberg::tresult PLUGIN_API IPlugVST3::getMidiControllerAssignment(Steinberg::int32 busIndex, Steinberg::int16 channel,
Steinberg::Vst::CtrlNumber midiControllerNumber, Steinberg::Vst::ParamID& id) {

if (busIndex == 0) {
id = -1;
switch (midiControllerNumber) {

case Steinberg::Vst::kAfterTouch:
id = kAftertouchParam;
break;

// other midi cc mappings here...

default:
break;
}

if (id == -1) {
id = 0;
return kResultFalse;
}
else {
return kResultTrue;
}
}
}

tresult PLUGIN_API IPlugVST3::initialize (FUnknown* context)
{
TRACE;
Expand Down Expand Up @@ -200,6 +228,12 @@ tresult PLUGIN_API IPlugVST3::initialize (FUnknown* context)
{
addEventInput (STR16("MIDI Input"), 1);
//addEventOutput(STR16("MIDI Output"), 1);

Parameter * param;
param = new RangeParameter(USTRING("MIDI Aftertouch"), kAftertouchParam, USTRING(""),
0.0, 1.0, 0.0, 0, ParameterInfo::kIsReadOnly);
param->setPrecision(1);
parameters.addParameter(param);
}

if (NPresets())
Expand Down Expand Up @@ -381,7 +415,6 @@ tresult PLUGIN_API IPlugVST3::process(ProcessData& data)
if (paramQueue->getPoint(numPoints - 1, offsetSamples, value) == kResultTrue)
{
int idx = paramQueue->getParameterId();

switch (idx)
{
case kBypassParam:
Expand All @@ -398,6 +431,15 @@ tresult PLUGIN_API IPlugVST3::process(ProcessData& data)
case kPresetParam:
RestorePreset(FromNormalizedParam(value, 0, NPresets(), 1.));
break;

case kAftertouchParam:
{
IMidiMsg msg;
msg.MakeChannelAftertouchMsg(value);
ProcessMidiMsg(&msg);
break;
}

//TODO pitch bend, modwheel etc
default:
if (idx >= 0 && idx < NParams())
Expand Down
8 changes: 7 additions & 1 deletion WDL/IPlug/IPlugVST3.h
Expand Up @@ -20,6 +20,7 @@ class IPlugVST3View;
class IPlugVST3 : public IPlugBase
, public Steinberg::Vst::IUnitInfo
, public Steinberg::Vst::SingleComponentEffect
, public Steinberg::Vst::IMidiMapping
{
public:
IPlugVST3(IPlugInstanceInfo instanceInfo,
Expand Down Expand Up @@ -78,6 +79,10 @@ class IPlugVST3 : public IPlugBase
virtual Steinberg::tresult PLUGIN_API getUnitByBus(Steinberg::Vst::MediaType type, Steinberg::Vst::BusDirection dir, Steinberg::int32 busIndex, Steinberg::int32 channel, Steinberg::Vst::UnitID& unitId) {return Steinberg::kNotImplemented;}
virtual Steinberg::tresult PLUGIN_API setUnitProgramData(Steinberg::int32 listOrUnitId, Steinberg::int32 programIndex, Steinberg::IBStream* data) {return Steinberg::kNotImplemented;}

virtual Steinberg::tresult PLUGIN_API getMidiControllerAssignment(Steinberg::int32 busIndex, Steinberg::int16 channel,
Steinberg::Vst::CtrlNumber midiControllerNumber, Steinberg::Vst::ParamID& id);


//IPlugBase
virtual void BeginInformHostOfParamChange(int idx);
virtual void InformHostOfParamChange(int idx, double normalizedValue);
Expand Down Expand Up @@ -109,12 +114,13 @@ class IPlugVST3 : public IPlugBase
// kExpressionParam = 'expr',
// kPitchBendParam = 'pitb',
// kSustainParam = 'sust',
// kAftertouchParam = 'aftt',
kAftertouchParam = 'aftt'
};

OBJ_METHODS (IPlugVST3, SingleComponentEffect)
DEFINE_INTERFACES
DEF_INTERFACE (IUnitInfo)
DEF_INTERFACE(IMidiMapping)
END_DEFINE_INTERFACES (SingleComponentEffect)
REFCOUNT_METHODS(SingleComponentEffect)

Expand Down

0 comments on commit 27475cf

Please sign in to comment.