15IPlugWAM::IPlugWAM(
const InstanceInfo& info,
const Config& config)
19 int nInputs = MaxNChannels(ERoute::kInput), nOutputs = MaxNChannels(ERoute::kOutput);
21 SetChannelConnections(ERoute::kInput, 0, nInputs,
true);
22 SetChannelConnections(ERoute::kOutput, 0, nOutputs,
true);
25const char* IPlugWAM::init(uint32_t bufsize, uint32_t sr,
void* pDesc)
30 SetBlockSize(bufsize);
32 DBGMSG(
"%i %i\n", sr, bufsize);
36 json.AppendFormatted(8192,
"\"audio\": { \"inputs\": [{ \"id\":0, \"channels\":%i }], \"outputs\": [{ \"id\":0, \"channels\":%i }] },\n",
MaxNChannels(ERoute::kInput),
MaxNChannels(ERoute::kOutput));
37 json.AppendFormatted(8192,
"\"parameters\": [\n");
39 for (
int idx = 0; idx < NParams(); idx++)
41 IParam* pParam = GetParam(idx);
45 json.AppendFormatted(8192,
",\n");
47 json.AppendFormatted(8192,
"\n");
55 postMessage(
"StartIdleTimer",
nullptr,
nullptr);
60void IPlugWAM::onProcess(WAM::AudioBus* pAudio,
void* pData)
65 SetChannelConnections(ERoute::kOutput, 0,
MaxNChannels(ERoute::kOutput),
true);
66 AttachBuffers(ERoute::kInput, 0,
NChannelsConnected(ERoute::kInput), pAudio->inputs, blockSize);
67 AttachBuffers(ERoute::kOutput, 0,
NChannelsConnected(ERoute::kOutput), pAudio->outputs, blockSize);
70 ProcessBuffers((
float) 0.0f, blockSize);
74void IPlugWAM::OnEditorIdleTick()
76 while(mParamChangeFromProcessor.ElementsAvailable())
79 mParamChangeFromProcessor.Pop(p);
80 SendParameterValueFromDelegate(p.idx, p.value,
false);
83 while (mMidiMsgsFromProcessor.ElementsAvailable())
86 mMidiMsgsFromProcessor.Pop(msg);
87 SendMidiMsgFromDelegate(msg);
94void IPlugWAM::onMessage(
char* verb,
char* res,
double data)
96 if(strcmp(verb,
"TICK") == 0)
100 else if(strcmp(verb,
"SMMFUI") == 0)
103 char* pChar = strtok(res,
":");
105 while (pChar !=
nullptr) {
106 data[i++] = atoi(pChar);
107 pChar = strtok(
nullptr,
":");
110 IMidiMsg msg = {0, data[0], data[1], data[2]};
113 else if(strcmp(verb,
"SAMFUI") == 0)
115 int data[2] = {-1, -1};
116 char* pChar = strtok(res,
":");
118 while (pChar !=
nullptr) {
119 data[i++] = atoi(pChar);
120 pChar = strtok(
nullptr,
":");
123 OnMessage(data[0], data[1],
sizeof(
double),
reinterpret_cast<void*
>(&data));
128void IPlugWAM::onMessage(
char* verb,
char* res,
char* str)
133void IPlugWAM::onMessage(
char* verb,
char* res,
void* pData, uint32_t size)
135 if(strcmp(verb,
"SAMFUI") == 0)
142 pos = stream.Get(&msgTag, pos);
143 pos = stream.Get(&ctrlTag, pos);
144 pos = stream.Get(&dataSize, pos);
146 OnMessage(msgTag, ctrlTag, dataSize, stream.GetData() + (
sizeof(
int) * 3));
148 else if(strcmp(verb,
"SSMFUI") == 0)
154 DBGMSG(
"onMessageA not handled\n");
158void IPlugWAM::onMidi(
byte status,
byte data1,
byte data2)
161 IMidiMsg msg = {0, status, data1, data2};
166 dataStr.SetFormatted(16,
"%i:%i:%i", msg.mStatus, msg.mData1, msg.mData2);
170 postMessage(
"SMMFD", dataStr.Get(),
"");
173void IPlugWAM::onParam(uint32_t idparam,
double value)
179void IPlugWAM::onSysex(
byte* pData, uint32_t size)
181 ISysEx sysex = {0 , pData, (int) size };
185 dataStr.SetFormatted(16,
"%i", size);
189 postMessage(
"SSMFD", dataStr.Get(),
"");
192void IPlugWAM::SendControlValueFromDelegate(
int ctrlTag,
double normalizedValue)
197 propStr.SetFormatted(16,
"%i", ctrlTag);
198 dataStr.SetFormatted(16,
"%f", normalizedValue);
201 postMessage(
"SCVFD", propStr.Get(), dataStr.Get());
204void IPlugWAM::SendControlMsgFromDelegate(
int ctrlTag,
int msgTag,
int dataSize,
const void* pData)
207 propStr.SetFormatted(16,
"%i:%i", ctrlTag, msgTag);
210 postMessage(
"SCMFD", propStr.Get(), pData, (uint32_t) dataSize);
213void IPlugWAM::SendParameterValueFromDelegate(
int paramIdx,
double value,
bool normalized)
217 propStr.SetFormatted(16,
"%i", paramIdx);
218 dataStr.SetFormatted(16,
"%f", value);
221 postMessage(
"SPVFD", propStr.Get(), dataStr.Get());
224void IPlugWAM::SendArbitraryMsgFromDelegate(
int msgTag,
int dataSize,
const void* pData)
227 propStr.SetFormatted(16,
"%i", msgTag);
230 postMessage(
"SAMFD", propStr.Get(), pData, (uint32_t) dataSize);
Manages a non-owned block of memory, for receiving arbitrary message byte streams.
void GetJSON(WDL_String &json, int idx) const
Get a JSON description of the parameter.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
virtual void OnIdle()
Override this method to get an "idle"" call on the main thread.
void SetParameterValue(int paramIdx, double normalizedValue)
SetParameterValue is called from the UI in the middle of a parameter change gesture (possibly via del...
The base class for IPlug Audio Processing.
virtual void ProcessMidiMsg(const IMidiMsg &msg)
Override this method to handle incoming MIDI messages.
bool IsInstrument() const
int NChannelsConnected(ERoute direction) const
virtual void ProcessSysEx(const ISysEx &msg)
Override this method to handle incoming MIDI System Exclusive (SysEx) messages.
int MaxNChannels(ERoute direction) const
virtual void OnReset()
Override this method in your plug-in class to do something prior to playback etc.
Encapsulates a MIDI message and provides helper functions.
A struct for dealing with SysEx messages.
In certain cases we need to queue parameter changes for transferral between threads.