public static FixResult FindLengthOfClick(
            AudioData audioData,
            int initPosition,
            int maxLength,
            int positionOfLastProcessedSample)
        {
            var bestResult = new FixResult
            {
                Success = false
            };

            var position    = initPosition;
            var minPosition = GetMinPosition(
                position,
                positionOfLastProcessedSample,
                10);

            while (position > minPosition)
            {
                var backup = BackupPredictionErrAverage(
                    audioData,
                    position,
                    audioData.AudioProcessingSettings.HistoryLengthSamples + maxLength);

                var result = TryToFix(audioData,
                                      position,
                                      maxLength,
                                      initPosition - position);

                if (result.BetterThan(bestResult))
                {
                    bestResult = result;
                }

                audioData.CurrentChannelRestoreInitState(position, maxLength + 16);
                RestorePredictionErrAverage(
                    audioData,
                    position,
                    audioData.AudioProcessingSettings.HistoryLengthSamples + maxLength,
                    backup);

                position--;
            }

            return(bestResult);
        }