Skip to content

Commit 98e249d

Browse files
committed
Make ByPass not mandatory for the model
1 parent 8317a14 commit 98e249d

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

src/NPlug.HelloWorldPlugin/HelloWorldProcessor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public class HelloWorldModel : AudioProcessorModel
5757
{
5858
public HelloWorldModel() : base("HelloWorld")
5959
{
60+
AddByPassParameter();
61+
6062
SubUnit1 = AddUnit(new AudioUnit("SubUnit1"));
6163
SubUnit11 = SubUnit1.AddUnit(new AudioUnit("SubUnit1.1"));
6264
SubUnit2 = AddUnit(new AudioUnit("SubUnit2"));

src/NPlug/AudioProcessor.Processing.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ public abstract partial class AudioProcessor<TAudioProcessorModel>
1010
{
1111
public bool IsProcessing { get; private set; }
1212

13-
public bool IsByPass => Model.ByPassParameter.Value;
14-
15-
13+
public bool ShouldByPass => Model.ByPassParameter?.Value ?? false;
14+
1615
protected virtual void PreProcess(in AudioProcessData data)
1716
{
1817
}
@@ -38,14 +37,12 @@ protected virtual void Process(in AudioProcessData data)
3837

3938
protected virtual void ProcessCore(in AudioProcessData data)
4039
{
41-
4240
}
4341

4442
protected virtual void ProcessRecalculate(in AudioProcessData data)
4543
{
4644
}
47-
48-
45+
4946
protected virtual bool ProcessParameterChanges(in AudioProcessData data)
5047
{
5148
var parameterChanges = data.Input.ParameterChanges;
@@ -88,7 +85,7 @@ protected virtual void ProcessEvent(in AudioEvent audioEvent)
8885

8986
protected virtual bool ProcessByPass(in AudioProcessData data)
9087
{
91-
if (!IsByPass || data.SampleCount == 0) return false;
88+
if (!ShouldByPass || data.SampleCount == 0) return false;
9289

9390
ref readonly var setupData = ref ProcessSetupData;
9491
var inputCount = data.Input.BufferCount;
@@ -157,7 +154,6 @@ protected virtual void PostProcessCheckSilence(in AudioProcessData data)
157154
}
158155
}
159156

160-
161157
bool IAudioProcessor.SetupProcessing(in AudioProcessSetupData processSetupData)
162158
{
163159
if (IsSampleSizeSupported(processSetupData.SampleSize))

src/NPlug/AudioProcessorModel.cs

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
namespace 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>
1519
public 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

Comments
 (0)