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
Next revision Both sides next revision
effects_customization [2018/06/14 10:29]
be.ing
effects_customization [2018/06/14 10:40]
be.ing
Line 25: Line 25:
   * **EffectsBackend**:​ enumerates available effect types and instantiates an EffectProcessor from an EffectManifest. Each category of effect, namely Mixxx'​s built-in effects and LV2 effect plugins, has its own EffectsBackend subclass. //​Refactoring required to instantiate EffectProcessors instead of old Effect class.//   * **EffectsBackend**:​ enumerates available effect types and instantiates an EffectProcessor from an EffectManifest. Each category of effect, namely Mixxx'​s built-in effects and LV2 effect plugins, has its own EffectsBackend subclass. //​Refactoring required to instantiate EffectProcessors instead of old Effect class.//
  
-Every specific effect like Echo or Flanger is implemented as a pair of an EngineEffectState ​subclass and an EffectProcessorImpl subclass: +Every specific effect like Echo or Flanger is implemented as a pair of an EffectProcessorState ​subclass and an EffectProcessorImpl subclass: 
-  * **EngineEffectState**: an abstract base class for the state of an instance of an effect for one combination of input and output channels. This state persists across cycles of the audio engine thread. This will be made by //renaming EffectState//​. +  * **EffectProcessorState**: an abstract base class for the state of an instance of an effect for one combination of input and output channels. This state persists across cycles of the audio engine thread. This will be made by //renaming EffectState//​. 
-  * **EffectProcessorImpl<​EngineEffectState>**: 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//​.   * **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//​.
Line 39: Line 39:
  
   * **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