125 |
pEvents = new Pool<ScriptEvent>(CONFIG_MAX_EVENTS_PER_FRAGMENT); |
pEvents = new Pool<ScriptEvent>(CONFIG_MAX_EVENTS_PER_FRAGMENT); |
126 |
for (int i = 0; i < 128; ++i) |
for (int i = 0; i < 128; ++i) |
127 |
pKeyEvents[i] = new RTList<ScriptEvent>(pEvents); |
pKeyEvents[i] = new RTList<ScriptEvent>(pEvents); |
128 |
|
// reset RTAVLNode's tree node member variables after nodes are allocated |
129 |
|
// (since we can't use a constructor right now, we do that initialization here) |
130 |
|
while (!pEvents->poolIsEmpty()) { |
131 |
|
RTList<ScriptEvent>::Iterator it = pEvents->allocAppend(); |
132 |
|
it->reset(); |
133 |
|
} |
134 |
|
pEvents->clear(); |
135 |
} |
} |
136 |
|
|
137 |
// create new VM execution contexts for new script |
// create new VM execution contexts for new script |
229 |
m_event(NULL), m_fnPlayNote(this), m_fnSetController(this), |
m_event(NULL), m_fnPlayNote(this), m_fnSetController(this), |
230 |
m_fnIgnoreEvent(this), m_fnIgnoreController(this), m_fnNoteOff(this), |
m_fnIgnoreEvent(this), m_fnIgnoreController(this), m_fnNoteOff(this), |
231 |
m_fnSetEventMark(this), m_fnDeleteEventMark(this), m_fnByMarks(this), |
m_fnSetEventMark(this), m_fnDeleteEventMark(this), m_fnByMarks(this), |
232 |
m_fnChangeVol(this), m_fnChangeTune(this), m_fnChangePan(this) |
m_fnChangeVol(this), m_fnChangeTune(this), m_fnChangePan(this), |
233 |
|
m_fnChangeCutoff(this), m_fnChangeReso(this), m_fnChangeAttack(this), |
234 |
|
m_fnChangeDecay(this), m_fnChangeRelease(this), m_fnEventStatus(this), |
235 |
|
m_fnWait2(this), m_fnStopWait(this), |
236 |
|
m_varEngineUptime(this), m_varCallbackID(this) |
237 |
{ |
{ |
238 |
m_CC.size = _MEMBER_SIZEOF(AbstractEngineChannel, ControllerTable); |
m_CC.size = _MEMBER_SIZEOF(AbstractEngineChannel, ControllerTable); |
239 |
m_CC_NUM = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.CC.Controller); |
m_CC_NUM = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.CC.Controller); |
240 |
m_EVENT_ID = DECLARE_VMINT(m_event, class ScriptEvent, id); |
m_EVENT_ID = DECLARE_VMINT_READONLY(m_event, class ScriptEvent, id); |
241 |
m_EVENT_NOTE = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.Note.Key); |
m_EVENT_NOTE = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.Note.Key); |
242 |
m_EVENT_VELOCITY = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.Note.Velocity); |
m_EVENT_VELOCITY = DECLARE_VMINT(m_event, class ScriptEvent, cause.Param.Note.Velocity); |
243 |
m_KEY_DOWN.size = 128; |
m_KEY_DOWN.size = 128; |
244 |
|
m_NI_CALLBACK_TYPE = DECLARE_VMINT_READONLY(m_event, class ScriptEvent, handlerType); |
245 |
|
m_NKSP_IGNORE_WAIT = DECLARE_VMINT(m_event, class ScriptEvent, ignoreAllWaitCalls); |
246 |
} |
} |
247 |
|
|
248 |
VMExecStatus_t InstrumentScriptVM::exec(VMParserContext* parserCtx, ScriptEvent* event) { |
VMExecStatus_t InstrumentScriptVM::exec(VMParserContext* parserCtx, ScriptEvent* event) { |
289 |
} |
} |
290 |
|
|
291 |
std::map<String,VMIntRelPtr*> InstrumentScriptVM::builtInIntVariables() { |
std::map<String,VMIntRelPtr*> InstrumentScriptVM::builtInIntVariables() { |
292 |
// first get buil-in integer variables of derived VM class |
// first get built-in integer variables of derived VM class |
293 |
std::map<String,VMIntRelPtr*> m = ScriptVM::builtInIntVariables(); |
std::map<String,VMIntRelPtr*> m = ScriptVM::builtInIntVariables(); |
294 |
|
|
295 |
// now add own built-in variables |
// now add own built-in variables |
298 |
m["$EVENT_NOTE"] = &m_EVENT_NOTE; |
m["$EVENT_NOTE"] = &m_EVENT_NOTE; |
299 |
m["$EVENT_VELOCITY"] = &m_EVENT_VELOCITY; |
m["$EVENT_VELOCITY"] = &m_EVENT_VELOCITY; |
300 |
// m["$POLY_AT_NUM"] = &m_POLY_AT_NUM; |
// m["$POLY_AT_NUM"] = &m_POLY_AT_NUM; |
301 |
|
m["$NI_CALLBACK_TYPE"] = &m_NI_CALLBACK_TYPE; |
302 |
|
m["$NKSP_IGNORE_WAIT"] = &m_NKSP_IGNORE_WAIT; |
303 |
|
|
304 |
return m; |
return m; |
305 |
} |
} |
306 |
|
|
307 |
std::map<String,VMInt8Array*> InstrumentScriptVM::builtInIntArrayVariables() { |
std::map<String,VMInt8Array*> InstrumentScriptVM::builtInIntArrayVariables() { |
308 |
// first get buil-in integer array variables of derived VM class |
// first get built-in integer array variables of derived VM class |
309 |
std::map<String,VMInt8Array*> m = ScriptVM::builtInIntArrayVariables(); |
std::map<String,VMInt8Array*> m = ScriptVM::builtInIntArrayVariables(); |
310 |
|
|
311 |
// now add own built-in variables |
// now add own built-in variables |
317 |
} |
} |
318 |
|
|
319 |
std::map<String,int> InstrumentScriptVM::builtInConstIntVariables() { |
std::map<String,int> InstrumentScriptVM::builtInConstIntVariables() { |
320 |
// first get buil-in integer variables of derived VM class |
// first get built-in integer variables of derived VM class |
321 |
std::map<String,int> m = ScriptVM::builtInConstIntVariables(); |
std::map<String,int> m = ScriptVM::builtInConstIntVariables(); |
322 |
|
|
323 |
|
m["$EVENT_STATUS_INACTIVE"] = EVENT_STATUS_INACTIVE; |
324 |
|
m["$EVENT_STATUS_NOTE_QUEUE"] = EVENT_STATUS_NOTE_QUEUE; |
325 |
m["$VCC_MONO_AT"] = CTRL_TABLE_IDX_AFTERTOUCH; |
m["$VCC_MONO_AT"] = CTRL_TABLE_IDX_AFTERTOUCH; |
326 |
m["$VCC_PITCH_BEND"] = CTRL_TABLE_IDX_PITCHBEND; |
m["$VCC_PITCH_BEND"] = CTRL_TABLE_IDX_PITCHBEND; |
327 |
for (int i = 0; i < INSTR_SCRIPT_EVENT_GROUPS; ++i) { |
for (int i = 0; i < INSTR_SCRIPT_EVENT_GROUPS; ++i) { |
331 |
return m; |
return m; |
332 |
} |
} |
333 |
|
|
334 |
|
std::map<String,VMDynVar*> InstrumentScriptVM::builtInDynamicVariables() { |
335 |
|
// first get built-in dynamic variables of derived VM class |
336 |
|
std::map<String,VMDynVar*> m = ScriptVM::builtInDynamicVariables(); |
337 |
|
|
338 |
|
m["$ENGINE_UPTIME"] = &m_varEngineUptime; |
339 |
|
m["$NI_CALLBACK_ID"] = &m_varCallbackID; |
340 |
|
|
341 |
|
return m; |
342 |
|
} |
343 |
|
|
344 |
VMFunction* InstrumentScriptVM::functionByName(const String& name) { |
VMFunction* InstrumentScriptVM::functionByName(const String& name) { |
345 |
// built-in script functions of this class |
// built-in script functions of this class |
346 |
if (name == "play_note") return &m_fnPlayNote; |
if (name == "play_note") return &m_fnPlayNote; |
354 |
else if (name == "change_vol") return &m_fnChangeVol; |
else if (name == "change_vol") return &m_fnChangeVol; |
355 |
else if (name == "change_tune") return &m_fnChangeTune; |
else if (name == "change_tune") return &m_fnChangeTune; |
356 |
else if (name == "change_pan") return &m_fnChangePan; |
else if (name == "change_pan") return &m_fnChangePan; |
357 |
|
else if (name == "change_cutoff") return &m_fnChangeCutoff; |
358 |
|
else if (name == "change_reso") return &m_fnChangeReso; |
359 |
|
else if (name == "change_attack") return &m_fnChangeAttack; |
360 |
|
else if (name == "change_decay") return &m_fnChangeDecay; |
361 |
|
else if (name == "change_release") return &m_fnChangeRelease; |
362 |
|
else if (name == "event_status") return &m_fnEventStatus; |
363 |
|
else if (name == "wait") return &m_fnWait2; // override wait() core implementation |
364 |
|
else if (name == "stop_wait") return &m_fnStopWait; |
365 |
|
|
366 |
// built-in script functions of derived VM class |
// built-in script functions of derived VM class |
367 |
return ScriptVM::functionByName(name); |
return ScriptVM::functionByName(name); |