diff options
| author | TSR Berry <20988865+TSRBerry@users.noreply.github.com> | 2023-04-08 01:22:00 +0200 |
|---|---|---|
| committer | Mary <thog@protonmail.com> | 2023-04-27 23:51:14 +0200 |
| commit | cee712105850ac3385cd0091a923438167433f9f (patch) | |
| tree | 4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /src/Ryujinx.Audio/Renderer/Parameter/Effect | |
| parent | cd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff) | |
Move solution and projects to src
Diffstat (limited to 'src/Ryujinx.Audio/Renderer/Parameter/Effect')
9 files changed, 791 insertions, 0 deletions
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/AuxiliaryBufferParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/AuxiliaryBufferParameter.cs new file mode 100644 index 00000000..36f28677 --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/AuxiliaryBufferParameter.cs @@ -0,0 +1,84 @@ +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.AuxiliaryBuffer"/> and <see cref="Common.EffectType.CaptureBuffer"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct AuxiliaryBufferParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/> to write data to <see cref="SendBufferInfoAddress"/>. + /// </summary> + public Array24<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/> to read data from <see cref="ReturnBufferInfoAddress"/>. + /// </summary> + public Array24<byte> Output; + + /// <summary> + /// The total channel count used. + /// </summary> + public uint ChannelCount; + + /// <summary> + /// The target sample rate. + /// </summary> + public uint SampleRate; + + /// <summary> + /// The buffer storage total size. + /// </summary> + public uint BufferStorageSize; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + /// <remarks>This is unused.</remarks> + public uint ChannelCountMax; + + /// <summary> + /// The address of the start of the region containing two <see cref="Dsp.State.AuxiliaryBufferHeader"/> followed by the data that will be written by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public ulong SendBufferInfoAddress; + + /// <summary> + /// The address of the start of the region containling data that will be written by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + /// <remarks>This is unused.</remarks> + public ulong SendBufferStorageAddress; + + /// <summary> + /// The address of the start of the region containing two <see cref="Dsp.State.AuxiliaryBufferHeader"/> followed by the data that will be read by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + /// <remarks>Unused with <see cref="Common.EffectType.CaptureBuffer"/>.</remarks> + public ulong ReturnBufferInfoAddress; + + /// <summary> + /// The address of the start of the region containling data that will be read by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + /// <remarks>This is unused.</remarks> + public ulong ReturnBufferStorageAddress; + + /// <summary> + /// Size of a sample of the mix buffer. + /// </summary> + /// <remarks>This is unused.</remarks> + public uint MixBufferSampleSize; + + /// <summary> + /// The total count of sample that can be stored. + /// </summary> + /// <remarks>This is unused.</remarks> + public uint TotalSampleCount; + + /// <summary> + /// The count of sample of the mix buffer. + /// </summary> + /// <remarks>This is unused.</remarks> + public uint MixBufferSampleCount; + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameter.cs new file mode 100644 index 00000000..73e0e9bb --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameter.cs @@ -0,0 +1,44 @@ +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.BiquadFilter"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BiquadFilterEffectParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// Biquad filter numerator (b0, b1, b2). + /// </summary> + public Array3<short> Numerator; + + /// <summary> + /// Biquad filter denominator (a1, a2). + /// </summary> + /// <remarks>a0 = 1</remarks> + public Array2<short> Denominator; + + /// <summary> + /// The total channel count used. + /// </summary> + public byte ChannelCount; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState Status; + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/BufferMixerParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/BufferMixerParameter.cs new file mode 100644 index 00000000..b03559eb --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/BufferMixerParameter.cs @@ -0,0 +1,32 @@ +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.BufferMix"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BufferMixParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array24<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array24<byte> Output; + + /// <summary> + /// The output volumes of the mixes. + /// </summary> + public Array24<float> Volumes; + + /// <summary> + /// The total count of mixes used. + /// </summary> + public uint MixesCount; + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs new file mode 100644 index 00000000..0be37608 --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs @@ -0,0 +1,115 @@ +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.Compressor"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct CompressorParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + public ushort ChannelCountMax; + + /// <summary> + /// The total channel count used. + /// </summary> + public ushort ChannelCount; + + /// <summary> + /// The target sample rate. + /// </summary> + /// <remarks>This is in kHz.</remarks> + public int SampleRate; + + /// <summary> + /// The threshold. + /// </summary> + public float Threshold; + + /// <summary> + /// The compressor ratio. + /// </summary> + public float Ratio; + + /// <summary> + /// The attack time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int AttackTime; + + /// <summary> + /// The release time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int ReleaseTime; + + /// <summary> + /// The input gain. + /// </summary> + public float InputGain; + + /// <summary> + /// The attack coefficient. + /// </summary> + public float AttackCoefficient; + + /// <summary> + /// The release coefficient. + /// </summary> + public float ReleaseCoefficient; + + /// <summary> + /// The output gain. + /// </summary> + public float OutputGain; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState Status; + + /// <summary> + /// Indicate if the makeup gain should be used. + /// </summary> + [MarshalAs(UnmanagedType.I1)] + public bool MakeupGainEnabled; + + /// <summary> + /// Reserved/padding. + /// </summary> + private Array2<byte> _reserved; + + /// <summary> + /// Check if the <see cref="ChannelCount"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCount"/> is valid.</returns> + public bool IsChannelCountValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCount); + } + + /// <summary> + /// Check if the <see cref="ChannelCountMax"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCountMax"/> is valid.</returns> + public bool IsChannelCountMaxValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCountMax); + } + } +} diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/DelayParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/DelayParameter.cs new file mode 100644 index 00000000..72332c17 --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/DelayParameter.cs @@ -0,0 +1,101 @@ +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.Delay"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct DelayParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + public ushort ChannelCountMax; + + /// <summary> + /// The total channel count used. + /// </summary> + public ushort ChannelCount; + + /// <summary> + /// The maximum delay time in milliseconds. + /// </summary> + public uint DelayTimeMax; + + /// <summary> + /// The delay time in milliseconds. + /// </summary> + public uint DelayTime; + + /// <summary> + /// The target sample rate. (Q15) + /// </summary> + public uint SampleRate; + + /// <summary> + /// The input gain. (Q15) + /// </summary> + public uint InGain; + + /// <summary> + /// The feedback gain. (Q15) + /// </summary> + public uint FeedbackGain; + + /// <summary> + /// The output gain. (Q15) + /// </summary> + public uint OutGain; + + /// <summary> + /// The dry gain. (Q15) + /// </summary> + public uint DryGain; + + /// <summary> + /// The channel spread of the <see cref="FeedbackGain"/>. (Q15) + /// </summary> + public uint ChannelSpread; + + /// <summary> + /// The low pass amount. (Q15) + /// </summary> + public uint LowPassAmount; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState Status; + + /// <summary> + /// Check if the <see cref="ChannelCount"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCount"/> is valid.</returns> + public bool IsChannelCountValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCount); + } + + /// <summary> + /// Check if the <see cref="ChannelCountMax"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCountMax"/> is valid.</returns> + public bool IsChannelCountMaxValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCountMax); + } + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterParameter.cs new file mode 100644 index 00000000..0bce94a2 --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterParameter.cs @@ -0,0 +1,138 @@ +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.Limiter"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct LimiterParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + public ushort ChannelCountMax; + + /// <summary> + /// The total channel count used. + /// </summary> + public ushort ChannelCount; + + /// <summary> + /// The target sample rate. + /// </summary> + /// <remarks>This is in kHz.</remarks> + public int SampleRate; + + /// <summary> + /// The look ahead max time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int LookAheadTimeMax; + + /// <summary> + /// The attack time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int AttackTime; + + /// <summary> + /// The release time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int ReleaseTime; + + /// <summary> + /// The look ahead time. + /// <remarks>This is in microseconds.</remarks> + /// </summary> + public int LookAheadTime; + + /// <summary> + /// The attack coefficient. + /// </summary> + public float AttackCoefficient; + + /// <summary> + /// The release coefficient. + /// </summary> + public float ReleaseCoefficient; + + /// <summary> + /// The threshold. + /// </summary> + public float Threshold; + + /// <summary> + /// The input gain. + /// </summary> + public float InputGain; + + /// <summary> + /// The output gain. + /// </summary> + public float OutputGain; + + /// <summary> + /// The minimum samples stored in the delay buffer. + /// </summary> + public int DelayBufferSampleCountMin; + + /// <summary> + /// The maximum samples stored in the delay buffer. + /// </summary> + public int DelayBufferSampleCountMax; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState Status; + + /// <summary> + /// Indicate if the limiter effect should output statistics. + /// </summary> + [MarshalAs(UnmanagedType.I1)] + public bool StatisticsEnabled; + + /// <summary> + /// Indicate to the DSP that the user did a statistics reset. + /// </summary> + [MarshalAs(UnmanagedType.I1)] + public bool StatisticsReset; + + /// <summary> + /// Reserved/padding. + /// </summary> + private byte _reserved; + + /// <summary> + /// Check if the <see cref="ChannelCount"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCount"/> is valid.</returns> + public bool IsChannelCountValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCount); + } + + /// <summary> + /// Check if the <see cref="ChannelCountMax"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCountMax"/> is valid.</returns> + public bool IsChannelCountMaxValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCountMax); + } + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterStatistics.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterStatistics.cs new file mode 100644 index 00000000..f353f18d --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/LimiterStatistics.cs @@ -0,0 +1,31 @@ +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// Effect result state for <seealso cref="Common.EffectType.Limiter"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct LimiterStatistics + { + /// <summary> + /// The max input sample value recorded by the limiter. + /// </summary> + public Array6<float> InputMax; + + /// <summary> + /// Compression gain min value. + /// </summary> + public Array6<float> CompressionGainMin; + + /// <summary> + /// Reset the statistics. + /// </summary> + public void Reset() + { + InputMax.AsSpan().Fill(0.0f); + CompressionGainMin.AsSpan().Fill(1.0f); + } + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/Reverb3dParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/Reverb3dParameter.cs new file mode 100644 index 00000000..c78ce595 --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/Reverb3dParameter.cs @@ -0,0 +1,127 @@ +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.Reverb3d"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct Reverb3dParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + public ushort ChannelCountMax; + + /// <summary> + /// The total channel count used. + /// </summary> + public ushort ChannelCount; + + /// <summary> + /// Reserved/unused. + /// </summary> + private uint _reserved; + + /// <summary> + /// The target sample rate. + /// </summary> + /// <remarks>This is in kHz.</remarks> + public uint SampleRate; + + /// <summary> + /// Gain of the room high-frequency effect. + /// </summary> + public float RoomHf; + + /// <summary> + /// Reference high frequency. + /// </summary> + public float HfReference; + + /// <summary> + /// Reverberation decay time at low frequencies. + /// </summary> + public float DecayTime; + + /// <summary> + /// Ratio of the decay time at high frequencies to the decay time at low frequencies. + /// </summary> + public float HfDecayRatio; + + /// <summary> + /// Gain of the room effect. + /// </summary> + public float RoomGain; + + /// <summary> + /// Gain of the early reflections relative to <see cref="RoomGain"/>. + /// </summary> + public float ReflectionsGain; + + /// <summary> + /// Gain of the late reverberation relative to <see cref="RoomGain"/>. + /// </summary> + public float ReverbGain; + + /// <summary> + /// Echo density in the late reverberation decay. + /// </summary> + public float Diffusion; + + /// <summary> + /// Modal density in the late reverberation decay. + /// </summary> + public float ReflectionDelay; + + /// <summary> + /// Time limit between the early reflections and the late reverberation relative to the time of the first reflection. + /// </summary> + public float ReverbDelayTime; + + /// <summary> + /// Modal density in the late reverberation decay. + /// </summary> + public float Density; + + /// <summary> + /// The dry gain. + /// </summary> + public float DryGain; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState ParameterStatus; + + /// <summary> + /// Check if the <see cref="ChannelCount"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCount"/> is valid.</returns> + public bool IsChannelCountValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCount); + } + + /// <summary> + /// Check if the <see cref="ChannelCountMax"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCountMax"/> is valid.</returns> + public bool IsChannelCountMaxValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCountMax); + } + } +}
\ No newline at end of file diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/ReverbParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/ReverbParameter.cs new file mode 100644 index 00000000..baf049fb --- /dev/null +++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/ReverbParameter.cs @@ -0,0 +1,119 @@ +using Ryujinx.Audio.Renderer.Common; +using Ryujinx.Audio.Renderer.Server.Effect; +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Parameter.Effect +{ + /// <summary> + /// <see cref="IEffectInParameter.SpecificData"/> for <see cref="Common.EffectType.Reverb"/>. + /// </summary> + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ReverbParameter + { + /// <summary> + /// The input channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Input; + + /// <summary> + /// The output channel indices that will be used by the <see cref="Dsp.AudioProcessor"/>. + /// </summary> + public Array6<byte> Output; + + /// <summary> + /// The maximum number of channels supported. + /// </summary> + public ushort ChannelCountMax; + + /// <summary> + /// The total channel count used. + /// </summary> + public ushort ChannelCount; + + /// <summary> + /// The target sample rate. (Q15) + /// </summary> + /// <remarks>This is in kHz.</remarks> + public int SampleRate; + + /// <summary> + /// The early mode to use. + /// </summary> + public ReverbEarlyMode EarlyMode; + + /// <summary> + /// The gain to apply to the result of the early reflection. (Q15) + /// </summary> + public int EarlyGain; + + /// <summary> + /// The pre-delay time in milliseconds. (Q15) + /// </summary> + public int PreDelayTime; + + /// <summary> + /// The late mode to use. + /// </summary> + public ReverbLateMode LateMode; + + /// <summary> + /// The gain to apply to the result of the late reflection. (Q15) + /// </summary> + public int LateGain; + + /// <summary> + /// The decay time. (Q15) + /// </summary> + public int DecayTime; + + /// <summary> + /// The high frequency decay ratio. (Q15) + /// </summary> + /// <remarks>If <see cref="HighFrequencyDecayRatio"/> >= 0.995f, it is considered disabled.</remarks> + public int HighFrequencyDecayRatio; + + /// <summary> + /// The coloration of the decay. (Q15) + /// </summary> + public int Coloration; + + /// <summary> + /// The reverb gain. (Q15) + /// </summary> + public int ReverbGain; + + /// <summary> + /// The output gain. (Q15) + /// </summary> + public int OutGain; + + /// <summary> + /// The dry gain. (Q15) + /// </summary> + public int DryGain; + + /// <summary> + /// The current usage status of the effect on the client side. + /// </summary> + public UsageState Status; + + /// <summary> + /// Check if the <see cref="ChannelCount"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCount"/> is valid.</returns> + public bool IsChannelCountValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCount); + } + + /// <summary> + /// Check if the <see cref="ChannelCountMax"/> is valid. + /// </summary> + /// <returns>Returns true if the <see cref="ChannelCountMax"/> is valid.</returns> + public bool IsChannelCountMaxValid() + { + return EffectInParameterVersion1.IsChannelCountValid(ChannelCountMax); + } + } +}
\ No newline at end of file |
