Exemplo n.º 1
0
        /// <summary>
        /// Generate a new <see cref="LimiterCommandVersion2"/>.
        /// </summary>
        /// <param name="bufferOffset">The target buffer offset.</param>
        /// <param name="parameter">The limiter parameter.</param>
        /// <param name="state">The limiter state.</param>
        /// <param name="effectResultState">The DSP effect result state.</param>
        /// <param name="isEnabled">Set to true if the effect should be active.</param>
        /// <param name="workBuffer">The work buffer to use for processing.</param>
        /// <param name="nodeId">The node id associated to this command.</param>
        public void GenerateLimiterEffectVersion2(uint bufferOffset, LimiterParameter parameter, Memory <LimiterState> state, Memory <EffectResultState> effectResultState, bool isEnabled, ulong workBuffer, int nodeId)
        {
            if (parameter.IsChannelCountValid())
            {
                LimiterCommandVersion2 command = new LimiterCommandVersion2(bufferOffset, parameter, state, effectResultState, isEnabled, workBuffer, nodeId);

                command.EstimatedProcessingTime = _commandProcessingTimeEstimator.Estimate(command);

                AddCommand(command);
            }
        }
Exemplo n.º 2
0
        public LimiterState(ref LimiterParameter parameter, ulong workBuffer)
        {
            DectectorAverage            = new float[parameter.ChannelCount];
            CompressionGain             = new float[parameter.ChannelCount];
            DelayedSampleBuffer         = new float[parameter.ChannelCount * parameter.DelayBufferSampleCountMax];
            DelayedSampleBufferPosition = new int[parameter.ChannelCount];

            DectectorAverage.AsSpan().Fill(0.0f);
            CompressionGain.AsSpan().Fill(1.0f);
            DelayedSampleBufferPosition.AsSpan().Fill(0);

            UpdateParameter(ref parameter);
        }
Exemplo n.º 3
0
        public LimiterCommandVersion1(uint bufferOffset, LimiterParameter parameter, Memory <LimiterState> state, bool isEnabled, ulong workBuffer, int nodeId)
        {
            Enabled    = true;
            NodeId     = nodeId;
            _parameter = parameter;
            State      = state;
            WorkBuffer = workBuffer;

            IsEffectEnabled = isEnabled;

            InputBufferIndices  = new ushort[Constants.VoiceChannelCountMax];
            OutputBufferIndices = new ushort[Constants.VoiceChannelCountMax];

            for (int i = 0; i < Parameter.ChannelCount; i++)
            {
                InputBufferIndices[i]  = (ushort)(bufferOffset + Parameter.Input[i]);
                OutputBufferIndices[i] = (ushort)(bufferOffset + Parameter.Output[i]);
            }
        }
Exemplo n.º 4
0
 public void UpdateParameter(ref LimiterParameter parameter)
 {
 }
Exemplo n.º 5
0
        private uint EstimateLimiterCommandCommon(LimiterParameter parameter, bool enabled)
        {
            Debug.Assert(_sampleCount == 160 || _sampleCount == 240);

            if (_sampleCount == 160)
            {
                if (enabled)
                {
                    switch (parameter.ChannelCount)
                    {
                    case 1:
                        return((uint)21392.0f);

                    case 2:
                        return((uint)26829.0f);

                    case 4:
                        return((uint)32405.0f);

                    case 6:
                        return((uint)52219.0f);

                    default:
                        throw new NotImplementedException($"{parameter.ChannelCount}");
                    }
                }
                else
                {
                    switch (parameter.ChannelCount)
                    {
                    case 1:
                        return((uint)897.0f);

                    case 2:
                        return((uint)931.55f);

                    case 4:
                        return((uint)975.39f);

                    case 6:
                        return((uint)1016.8f);

                    default:
                        throw new NotImplementedException($"{parameter.ChannelCount}");
                    }
                }
            }

            if (enabled)
            {
                switch (parameter.ChannelCount)
                {
                case 1:
                    return((uint)30556.0f);

                case 2:
                    return((uint)39011.0f);

                case 4:
                    return((uint)48270.0f);

                case 6:
                    return((uint)76712.0f);

                default:
                    throw new NotImplementedException($"{parameter.ChannelCount}");
                }
            }
            else
            {
                switch (parameter.ChannelCount)
                {
                case 1:
                    return((uint)874.43f);

                case 2:
                    return((uint)921.55f);

                case 4:
                    return((uint)945.26f);

                case 6:
                    return((uint)992.26f);

                default:
                    throw new NotImplementedException($"{parameter.ChannelCount}");
                }
            }
        }