/[svn]/linuxsampler/trunk/src/engines/common/InstrumentScriptVM.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/common/InstrumentScriptVM.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3296 by schoenebeck, Wed Jun 28 09:45:56 2017 UTC revision 3690 by schoenebeck, Fri Jan 3 10:18:21 2020 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (c) 2014-2017 Christian Schoenebeck   * Copyright (c) 2014-2020 Christian Schoenebeck
3   *   *
4   * http://www.linuxsampler.org   * http://www.linuxsampler.org
5   *   *
# Line 51  enum InstrScriptIDType_T { Line 51  enum InstrScriptIDType_T {
51      /**      /**
52       * Used to mark IDs (in script scope) to actually be a MIDI event ID.       * Used to mark IDs (in script scope) to actually be a MIDI event ID.
53       */       */
54      INSTR_SCRIPT_EVENT_ID_FLAG = INSTR_SCRIPT_ID_TYPE_FLAG(0),      INSTR_SCRIPT_EVENT_ID_FLAG = INSTR_SCRIPT_ID_TYPE_FLAG(0LL),
55    
56      /**      /**
57       * Used to mark IDs (in script scope) to actually be a note ID.       * Used to mark IDs (in script scope) to actually be a note ID.
58       */       */
59      INSTR_SCRIPT_NOTE_ID_FLAG = INSTR_SCRIPT_ID_TYPE_FLAG(1),      INSTR_SCRIPT_NOTE_ID_FLAG = INSTR_SCRIPT_ID_TYPE_FLAG(1LL),
60  };  };
61    
62  #define INSTR_SCRIPT_EVENT_GROUPS 28  #define INSTR_SCRIPT_EVENT_GROUPS 28
# Line 118  namespace LinuxSampler { Line 118  namespace LinuxSampler {
118          /**          /**
119           * Construct a ScriptID object with an ID from script scope.           * Construct a ScriptID object with an ID from script scope.
120           */           */
121          ScriptID(uint id) : m_id(id) {}          ScriptID(vmint id) : m_id(id) {}
122    
123          /**          /**
124           * Returns a ScriptID object constructed with an event ID from engine           * Returns a ScriptID object constructed with an event ID from engine
# Line 180  namespace LinuxSampler { Line 180  namespace LinuxSampler {
180           * Integer cast operator, which returns an ID number of this ScripID           * Integer cast operator, which returns an ID number of this ScripID
181           * object intended for script scope.           * object intended for script scope.
182           */           */
183          inline operator uint() const {          inline operator vmint() const {
184              return m_id;              return m_id;
185          }          }
186    
187      private:      private:
188          uint m_id;          vmint m_id;
189      };      };
190    
191      /** @brief List of Event IDs.      /** @brief List of Event IDs.
# Line 193  namespace LinuxSampler { Line 193  namespace LinuxSampler {
193       * Used for built-in script functions:       * Used for built-in script functions:
194       *     by_marks(), set_event_mark(), delete_event_mark()       *     by_marks(), set_event_mark(), delete_event_mark()
195       */       */
196      class EventGroup : protected ConstCapacityArray<int> {      class EventGroup : protected ConstCapacityArray<vmint> {
197      public:      public:
198          EventGroup() : ConstCapacityArray<int>(CONFIG_MAX_EVENTS_PER_FRAGMENT), m_script(NULL) {}          EventGroup() : ConstCapacityArray<vmint>(CONFIG_MAX_EVENTS_PER_FRAGMENT), m_script(NULL) {}
199          void insert(int eventID);          void insert(vmint eventID);
200          void erase(int eventID);          void erase(vmint eventID);
201          void setScript(InstrumentScript* pScript) { m_script = pScript; }          void setScript(InstrumentScript* pScript) { m_script = pScript; }
202          inline int size() const { return ConstCapacityArray<int>::size(); }          inline size_t size() const { return ConstCapacityArray<vmint>::size(); }
203          inline void clear() { ConstCapacityArray<int>::clear(); }          inline void clear() { ConstCapacityArray<vmint>::clear(); }
204          inline int& operator[](uint index) { return ConstCapacityArray<int>::operator[](index); }          inline vmint& operator[](ssize_t index) { return ConstCapacityArray<vmint>::operator[](index); }
205          inline const int& operator[](uint index) const { return ConstCapacityArray<int>::operator[](index); }          inline const vmint& operator[](ssize_t index) const { return ConstCapacityArray<vmint>::operator[](index); }
206      protected:      protected:
207          InstrumentScript* m_script;          InstrumentScript* m_script;
208      };      };
# Line 226  namespace LinuxSampler { Line 226  namespace LinuxSampler {
226          VMEventHandler*       handlerNote; ///< VM representation of script's MIDI note on callback or NULL if current script did not define such an event handler.          VMEventHandler*       handlerNote; ///< VM representation of script's MIDI note on callback or NULL if current script did not define such an event handler.
227          VMEventHandler*       handlerRelease; ///< VM representation of script's MIDI note off callback or NULL if current script did not define such an event handler.          VMEventHandler*       handlerRelease; ///< VM representation of script's MIDI note off callback or NULL if current script did not define such an event handler.
228          VMEventHandler*       handlerController; ///< VM representation of script's MIDI controller callback or NULL if current script did not define such an event handler.          VMEventHandler*       handlerController; ///< VM representation of script's MIDI controller callback or NULL if current script did not define such an event handler.
229            VMEventHandler*       handlerRpn; ///< VM representation of script's MIDI RPN event callback or NULL if current script did not define such an event handler.
230            VMEventHandler*       handlerNrpn; ///< VM representation of script's MIDI NRPN event callback or NULL if current script did not define such an event handler.
231          Pool<ScriptEvent>*    pEvents; ///< Pool of all available script execution instances. ScriptEvents available to be allocated from the Pool are currently unused / not executiong, whereas the ScriptEvents allocated on the list are currently suspended / have not finished execution yet (@see pKeyEvents).          Pool<ScriptEvent>*    pEvents; ///< Pool of all available script execution instances. ScriptEvents available to be allocated from the Pool are currently unused / not executiong, whereas the ScriptEvents allocated on the list are currently suspended / have not finished execution yet (@see pKeyEvents).
232          RTList<ScriptEvent>*  pKeyEvents[128]; ///< Stores previously finished executed "note on" script events for the respective active note/key as long as the key/note is active. This is however only done if there is a "note" script event handler and a "release" script event handler defined in the script and both handlers use (reference) polyphonic variables. If that is not the case, then this list is not used at all. So the purpose of pKeyEvents is only to implement preserving/passing polyphonic variable data from "on note .. end on" script block to the respective "on release .. end on" script block.          RTList<ScriptEvent>*  pKeyEvents[128]; ///< Stores previously finished executed "note on" script events for the respective active note/key as long as the key/note is active. This is however only done if there is a "note" script event handler and a "release" script event handler defined in the script and both handlers use (reference) polyphonic variables. If that is not the case, then this list is not used at all. So the purpose of pKeyEvents is only to implement preserving/passing polyphonic variable data from "on note .. end on" script block to the respective "on release .. end on" script block.
233          RTAVLTree<ScriptEvent> suspendedEvents; ///< Contains pointers to all suspended events, sorted by time when those script events are to be resumed next.          RTAVLTree<ScriptEvent> suspendedEvents; ///< Contains pointers to all suspended events, sorted by time when those script events are to be resumed next.
# Line 257  namespace LinuxSampler { Line 259  namespace LinuxSampler {
259          InstrumentScriptVM();          InstrumentScriptVM();
260          VMExecStatus_t exec(VMParserContext* parserCtx, ScriptEvent* event);          VMExecStatus_t exec(VMParserContext* parserCtx, ScriptEvent* event);
261          VMFunction* functionByName(const String& name) OVERRIDE;          VMFunction* functionByName(const String& name) OVERRIDE;
262          std::map<String,VMIntRelPtr*> builtInIntVariables() OVERRIDE;          std::map<String,VMIntPtr*> builtInIntVariables() OVERRIDE;
263          std::map<String,VMInt8Array*> builtInIntArrayVariables() OVERRIDE;          std::map<String,VMInt8Array*> builtInIntArrayVariables() OVERRIDE;
264          std::map<String,int> builtInConstIntVariables() OVERRIDE;          std::map<String,vmint> builtInConstIntVariables() OVERRIDE;
265          std::map<String,VMDynVar*> builtInDynamicVariables() OVERRIDE;          std::map<String,VMDynVar*> builtInDynamicVariables() OVERRIDE;
266      protected:      protected:
267          ScriptEvent* m_event; ///< The event currently executed by exec().          ScriptEvent* m_event; ///< The event currently executed by exec().
# Line 271  namespace LinuxSampler { Line 273  namespace LinuxSampler {
273          VMInt8RelPtr m_EVENT_NOTE;          VMInt8RelPtr m_EVENT_NOTE;
274          VMInt8RelPtr m_EVENT_VELOCITY;          VMInt8RelPtr m_EVENT_VELOCITY;
275          VMInt8Array  m_KEY_DOWN;          VMInt8Array  m_KEY_DOWN;
276            VMInt16RelPtr m_RPN_ADDRESS; // used for both RPN and NRPN events
277            VMInt16RelPtr m_RPN_VALUE;   // used for both RPN and NRPN events
278          //VMIntArray m_POLY_AT; //TODO: ...          //VMIntArray m_POLY_AT; //TODO: ...
279          //int m_POLY_AT_NUM; //TODO: ...          //int m_POLY_AT_NUM; //TODO: ...
280          VMIntRelPtr  m_NI_CALLBACK_TYPE;          VMInt32RelPtr m_NI_CALLBACK_TYPE;
281          VMIntRelPtr  m_NKSP_IGNORE_WAIT;          VMInt8RelPtr m_NKSP_IGNORE_WAIT;
282          VMIntRelPtr  m_NKSP_CALLBACK_PARENT_ID;          VMIntRelPtr  m_NKSP_CALLBACK_PARENT_ID;
283    
284          // built-in script functions          // built-in script functions
# Line 291  namespace LinuxSampler { Line 295  namespace LinuxSampler {
295          InstrumentScriptVMFunction_change_tune m_fnChangeTune;          InstrumentScriptVMFunction_change_tune m_fnChangeTune;
296          InstrumentScriptVMFunction_change_tune_time m_fnChangeTuneTime;          InstrumentScriptVMFunction_change_tune_time m_fnChangeTuneTime;
297          InstrumentScriptVMFunction_change_pan m_fnChangePan;          InstrumentScriptVMFunction_change_pan m_fnChangePan;
298            InstrumentScriptVMFunction_change_pan_time m_fnChangePanTime;
299            InstrumentScriptVMFunction_change_pan_curve m_fnChangePanCurve;
300          InstrumentScriptVMFunction_change_cutoff m_fnChangeCutoff;          InstrumentScriptVMFunction_change_cutoff m_fnChangeCutoff;
301          InstrumentScriptVMFunction_change_reso m_fnChangeReso;          InstrumentScriptVMFunction_change_reso m_fnChangeReso;
302          InstrumentScriptVMFunction_change_attack m_fnChangeAttack;          InstrumentScriptVMFunction_change_attack m_fnChangeAttack;
303          InstrumentScriptVMFunction_change_decay m_fnChangeDecay;          InstrumentScriptVMFunction_change_decay m_fnChangeDecay;
304            InstrumentScriptVMFunction_change_sustain m_fnChangeSustain;
305          InstrumentScriptVMFunction_change_release m_fnChangeRelease;          InstrumentScriptVMFunction_change_release m_fnChangeRelease;
306            InstrumentScriptVMFunction_change_cutoff_attack m_fnChangeCutoffAttack;
307            InstrumentScriptVMFunction_change_cutoff_decay m_fnChangeCutoffDecay;
308            InstrumentScriptVMFunction_change_cutoff_sustain m_fnChangeCutoffSustain;
309            InstrumentScriptVMFunction_change_cutoff_release m_fnChangeCutoffRelease;
310          InstrumentScriptVMFunction_change_amp_lfo_depth m_fnChangeAmpLFODepth;          InstrumentScriptVMFunction_change_amp_lfo_depth m_fnChangeAmpLFODepth;
311          InstrumentScriptVMFunction_change_amp_lfo_freq m_fnChangeAmpLFOFreq;          InstrumentScriptVMFunction_change_amp_lfo_freq m_fnChangeAmpLFOFreq;
312            InstrumentScriptVMFunction_change_cutoff_lfo_depth m_fnChangeCutoffLFODepth;
313            InstrumentScriptVMFunction_change_cutoff_lfo_freq m_fnChangeCutoffLFOFreq;
314          InstrumentScriptVMFunction_change_pitch_lfo_depth m_fnChangePitchLFODepth;          InstrumentScriptVMFunction_change_pitch_lfo_depth m_fnChangePitchLFODepth;
315          InstrumentScriptVMFunction_change_pitch_lfo_freq m_fnChangePitchLFOFreq;          InstrumentScriptVMFunction_change_pitch_lfo_freq m_fnChangePitchLFOFreq;
316          InstrumentScriptVMFunction_change_note m_fnChangeNote;          InstrumentScriptVMFunction_change_note m_fnChangeNote;
# Line 333  namespace LinuxSampler { Line 346  namespace LinuxSampler {
346          friend class InstrumentScriptVMFunction_change_tune;          friend class InstrumentScriptVMFunction_change_tune;
347          friend class InstrumentScriptVMFunction_change_tune_time;          friend class InstrumentScriptVMFunction_change_tune_time;
348          friend class InstrumentScriptVMFunction_change_pan;          friend class InstrumentScriptVMFunction_change_pan;
349            friend class InstrumentScriptVMFunction_change_pan_time;
350            friend class InstrumentScriptVMFunction_change_pan_curve;
351          friend class InstrumentScriptVMFunction_change_cutoff;          friend class InstrumentScriptVMFunction_change_cutoff;
352          friend class InstrumentScriptVMFunction_change_reso;          friend class InstrumentScriptVMFunction_change_reso;
353          friend class InstrumentScriptVMFunction_change_attack;          friend class InstrumentScriptVMFunction_change_attack;
354          friend class InstrumentScriptVMFunction_change_decay;          friend class InstrumentScriptVMFunction_change_decay;
355          friend class InstrumentScriptVMFunction_change_release;          friend class InstrumentScriptVMFunction_change_release;
356            friend class InstrumentScriptVMFunction_change_sustain;
357            friend class InstrumentScriptVMFunction_change_cutoff_attack;
358            friend class InstrumentScriptVMFunction_change_cutoff_decay;
359            friend class InstrumentScriptVMFunction_change_cutoff_release;
360            friend class InstrumentScriptVMFunction_change_cutoff_sustain;
361          friend class VMChangeSynthParamFunction;          friend class VMChangeSynthParamFunction;
362          friend class InstrumentScriptVMFunction_change_amp_lfo_depth;          friend class InstrumentScriptVMFunction_change_amp_lfo_depth;
363          friend class InstrumentScriptVMFunction_change_amp_lfo_freq;          friend class InstrumentScriptVMFunction_change_amp_lfo_freq;
364            friend class InstrumentScriptVMFunction_change_cutoff_lfo_depth;
365            friend class InstrumentScriptVMFunction_change_cutoff_lfo_freq;
366          friend class InstrumentScriptVMFunction_change_pitch_lfo_depth;          friend class InstrumentScriptVMFunction_change_pitch_lfo_depth;
367          friend class InstrumentScriptVMFunction_change_pitch_lfo_freq;          friend class InstrumentScriptVMFunction_change_pitch_lfo_freq;
368          friend class VMChangeFadeCurveFunction;          friend class VMChangeFadeCurveFunction;

Legend:
Removed from v.3296  
changed lines
  Added in v.3690

  ViewVC Help
Powered by ViewVC