1212
1313namespace NPlug ;
1414
15+ /// <summary>
16+ /// The <see cref="AudioProcessor{TAudioProcessorModel}"/> model that will be shared between
17+ /// the controller and processor. Provides a definition of units, parameters and program lists.
18+ /// </summary>
1519public abstract class AudioProcessorModel : AudioUnit , IDisposable
1620{
1721 private readonly List < AudioUnit > _allUnits ;
@@ -31,19 +35,9 @@ protected AudioProcessorModel(string unitName, AudioProgramList? programList = n
3135 _unitIdToIndex = new Dictionary < AudioUnitId , int > ( ) ;
3236 _allProgramLists = new List < AudioProgramList > ( ) ;
3337 _programListIdToIndex = new Dictionary < AudioProgramListId , int > ( ) ;
34-
35- ByPassParameter = new AudioBoolParameter ( "ByPass" , flags : AudioParameterFlags . IsBypass | AudioParameterFlags . CanAutomate ) ;
36- AddParameter ( ByPassParameter ) ;
3738 }
3839
39- public AudioBoolParameter ByPassParameter { get ; }
40-
41- public void Initialize ( )
42- {
43- if ( IsInitialized ) throw new InvalidOperationException ( "This unit is already initialized" ) ;
44- RegisterUnit ( this ) ;
45- InitializeBuffer ( ) ;
46- }
40+ public AudioBoolParameter ? ByPassParameter { get ; private set ; }
4741
4842 public int ParameterCount => _allParameters . Count ;
4943
@@ -72,7 +66,32 @@ public void Initialize()
7266 /// Event when a program is changed for a unit.
7367 /// </summary>
7468 public event Action < AudioUnit > ? SelectedProgramChanged ;
75-
69+
70+ /// <summary>
71+ /// Add a default by-pass parameter (e.g for effects).
72+ /// </summary>
73+ /// <param name="name">The name of the parameter. Default is "ByPass".</param>
74+ public void AddByPassParameter ( string name = "ByPass" )
75+ {
76+ // Don't add a bypass parameter if it was already added.
77+ if ( ByPassParameter is null )
78+ {
79+ ByPassParameter = new AudioBoolParameter ( name , flags : AudioParameterFlags . IsBypass | AudioParameterFlags . CanAutomate ) ;
80+ AddParameter ( ByPassParameter ) ;
81+ }
82+ }
83+
84+ /// <summary>
85+ /// Initialize this model.
86+ /// </summary>
87+ /// <exception cref="InvalidOperationException">If the model has been already initialized.</exception>
88+ public void Initialize ( )
89+ {
90+ if ( IsInitialized ) throw new InvalidOperationException ( "This unit is already initialized" ) ;
91+ RegisterUnit ( this ) ;
92+ InitializeBuffer ( ) ;
93+ }
94+
7695 public bool TryGetParameterById ( AudioParameterId id , [ NotNullWhen ( true ) ] out AudioParameter ? parameter )
7796 {
7897 parameter = null ;
0 commit comments