User Tools

Site Tools


effects_customization

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
effects_customization [2018/06/14 10:36]
be.ing
effects_customization [2018/06/17 00:01]
be.ing
Line 4: Line 4:
  
 __Email:__ <​[email protected]>​ __Email:__ <​[email protected]>​
 +
 +//mentor: Be//
  
 ==== Abstract ==== ==== Abstract ====
Line 29: Line 31:
   * **EffectProcessorImpl<​EffectProcessorState>​**:​ a template abstract base class which contains the logic for managing the EngineEffectStates so the implementation of specific effects like Echo and Flanger do not need to be concerned with memory management. Each effect implements a subclass of this declaring its parameters with an EffectManifest and containing a processChannel function with its DSP logic. No change from the present implementation.   * **EffectProcessorImpl<​EffectProcessorState>​**:​ a template abstract base class which contains the logic for managing the EngineEffectStates so the implementation of specific effects like Echo and Flanger do not need to be concerned with memory management. Each effect implements a subclass of this declaring its parameters with an EffectManifest and containing a processChannel function with its DSP logic. No change from the present implementation.
  
-  * **EngineEffectSlot**: A place where an effect may be loaded that lives in the audio engine thread. It may contain an EffectProcessor ​or be empty. This class contains logic for smoothly toggling effects on and off without audible pops. This class will be made by //renaming EngineEffect//​.+  * **EngineEffect**: A wrapper around ​EffectProcessor ​with some common ​contains logic for smoothly toggling effects on and off without audible pops. No change from current implementation.
   * **EffectSlot**:​ holds the ControlObjects for interacting with skins and controllers in the GUI thread. Communicates state changes from the ControlObjects to EngineEffectSlot via the effect MessagePipe FIFO. Passes EffectProcessor instances to the EngineEffectSlot also via the MessagePipe FIFO. Decouples the set of potential effect parameters from the parameters exposed to skins and controllers so that users can hide and rearrange parameters as they prefer. This will be made by //combining the present Effect & EffectSlot classes//.   * **EffectSlot**:​ holds the ControlObjects for interacting with skins and controllers in the GUI thread. Communicates state changes from the ControlObjects to EngineEffectSlot via the effect MessagePipe FIFO. Passes EffectProcessor instances to the EngineEffectSlot also via the MessagePipe FIFO. Decouples the set of potential effect parameters from the parameters exposed to skins and controllers so that users can hide and rearrange parameters as they prefer. This will be made by //combining the present Effect & EffectSlot classes//.
   * **EffectPreset**:​ contains a snapshot of the state of an EffectSlot and serializes/​deserializes this to XML. This will be used both to create EffectRackPresets and implement [[https://​bugs.launchpad.net/​mixxx/​+bug/​1740504|custom per-effect defaults]]. This will be a //new class//.   * **EffectPreset**:​ contains a snapshot of the state of an EffectSlot and serializes/​deserializes this to XML. This will be used both to create EffectRackPresets and implement [[https://​bugs.launchpad.net/​mixxx/​+bug/​1740504|custom per-effect defaults]]. This will be a //new class//.
Line 39: Line 41:
  
   * **EffectsManager**:​ saves/loads XML files to a private QHash<​QString,​ EffectRackPreset>,​ where the QString index is the user-defined name for the preset.   * **EffectsManager**:​ saves/loads XML files to a private QHash<​QString,​ EffectRackPreset>,​ where the QString index is the user-defined name for the preset.
-  * **MessagePipe**:​ a FIFO for communicating state changes and objects from the main thread to the audio engine thread without blocking. EffectProcessors and EffectStates ​are allocated on the heap in the main thread and pointers to them are passed on the MessagePipe to the EngineEffectSlots.+  * **MessagePipe**:​ a FIFO for communicating state changes and objects from the main thread to the audio engine thread without blocking. EffectProcessors and EffectProcessorStates ​are allocated on the heap in the main thread and pointers to them are passed on the MessagePipe to the EngineEffectSlots.
   * **EngineEffectsManager**:​ provides an interface for the rest of the audio engine to the EngineEffectRacks/​EngineEffectSlots/​EffectProcessors. Receives messages from the MessagePipe and relays them to EngineEffectRacks.   * **EngineEffectsManager**:​ provides an interface for the rest of the audio engine to the EngineEffectRacks/​EngineEffectSlots/​EffectProcessors. Receives messages from the MessagePipe and relays them to EngineEffectRacks.
   * **WEffectRackPresetSelector**:​ subclass of QComboBox. On startup, gets a QList<​QString>​ from EffectsManager for the list of available EffectRackPresets,​ where the QString is the user-defined name for the preset. When the user selects an EffectRackPreset,​ WEffectChainPresetSelector tells EffectManager to load it, which triggers EffectsManager to send the EffectRackPreset to EffectRack. This will be a //new class//.   * **WEffectRackPresetSelector**:​ subclass of QComboBox. On startup, gets a QList<​QString>​ from EffectsManager for the list of available EffectRackPresets,​ where the QString is the user-defined name for the preset. When the user selects an EffectRackPreset,​ WEffectChainPresetSelector tells EffectManager to load it, which triggers EffectsManager to send the EffectRackPreset to EffectRack. This will be a //new class//.
effects_customization.txt ยท Last modified: 2018/08/12 20:59 by kshitij98