private void Init()
    {
        _mainCamera         = Helper.GetMainCamera();
        _hoverWindow        = GameObject.Find("HoverWindow");
        _clickMeHoverWindow = GameObject.Find("ClickMeHoverWindow");
        _hasInit            = true;
        _abjectAudioInputs  = GameObject.Find(Constants.AbjectAudioInputs).GetComponent <AbjectAudioInputs>();

        RawKeyInput.Start(workInBackround: true);
        RawKeyInput.OnKeyDown += HandleKeyDown;
    }
    public void Init(List <float> defaultFrequencies, int defaultPeaksNumber, System.Func <List <float>, int, object> resultAction, Instantiator instantiator)
    {
        _abjectAudioInputs = GameObject.Find(Constants.AbjectAudioInputs).GetComponent <AbjectAudioInputs>();
        _abjectAudioInputs.OnRecordingFrequencies = SetFrequencies;
        _resultAction       = resultAction;
        _instantiator       = instantiator;
        _peaksData          = new List <TMPro.TextMeshPro>();
        _selected           = new List <SpriteRenderer>();
        _currentFrequencies = new List <List <FrequencyCount> >();
        for (int i = 0; i < 5; ++i)
        {
            _currentFrequencies.Add(new List <FrequencyCount>()
            {
                new FrequencyCount(defaultFrequencies[i], 1)
            });
        }
        _isLocked = false;

        transform.Find("Peak0").GetComponent <ButtonBhv>().EndActionDelegate = () => { SetFrequencyPopup(0); };
        transform.Find("Peak0").transform.GetChild(1).GetComponent <ButtonBhv>().DoActionDelegate = () => { SetPeaksNumber(0); };
        _peaksData.Add(transform.Find("Peak0").transform.GetChild(0).GetComponent <TMPro.TextMeshPro>());
        _selected.Add(transform.Find("Peak0").transform.GetChild(1).GetComponent <SpriteRenderer>());

        transform.Find("Peak1").GetComponent <ButtonBhv>().EndActionDelegate = () => { SetFrequencyPopup(1); };
        transform.Find("Peak1").transform.GetChild(1).GetComponent <ButtonBhv>().DoActionDelegate = () => { SetPeaksNumber(1); };
        _peaksData.Add(transform.Find("Peak1").transform.GetChild(0).GetComponent <TMPro.TextMeshPro>());
        _selected.Add(transform.Find("Peak1").transform.GetChild(1).GetComponent <SpriteRenderer>());

        transform.Find("Peak2").GetComponent <ButtonBhv>().EndActionDelegate = () => { SetFrequencyPopup(2); };
        transform.Find("Peak2").transform.GetChild(1).GetComponent <ButtonBhv>().DoActionDelegate = () => { SetPeaksNumber(2); };
        _peaksData.Add(transform.Find("Peak2").transform.GetChild(0).GetComponent <TMPro.TextMeshPro>());
        _selected.Add(transform.Find("Peak2").transform.GetChild(1).GetComponent <SpriteRenderer>());

        transform.Find("Peak3").GetComponent <ButtonBhv>().EndActionDelegate = () => { SetFrequencyPopup(3); };
        transform.Find("Peak3").transform.GetChild(1).GetComponent <ButtonBhv>().DoActionDelegate = () => { SetPeaksNumber(3); };
        _peaksData.Add(transform.Find("Peak3").transform.GetChild(0).GetComponent <TMPro.TextMeshPro>());
        _selected.Add(transform.Find("Peak3").transform.GetChild(1).GetComponent <SpriteRenderer>());

        transform.Find("Peak4").GetComponent <ButtonBhv>().EndActionDelegate = () => { SetFrequencyPopup(4); };
        transform.Find("Peak4").transform.GetChild(1).GetComponent <ButtonBhv>().DoActionDelegate = () => { SetPeaksNumber(4); };
        _peaksData.Add(transform.Find("Peak4").transform.GetChild(0).GetComponent <TMPro.TextMeshPro>());
        _selected.Add(transform.Find("Peak4").transform.GetChild(1).GetComponent <SpriteRenderer>());

        _midBracket = transform.Find("MidBracket");
        _botBracket = transform.Find("BotBracket");

        transform.Find("Refresh").GetComponent <ButtonBhv>().EndActionDelegate = Refresh;
        _lockedBhv = transform.Find("Lock").GetComponent <CheckBoxBhv>();
        _lockedBhv.GetComponent <ButtonBhv>().EndActionDelegate = () => { Lock(); };

        var buttonPositive = transform.Find("ButtonPositive");

        buttonPositive.GetComponent <ButtonBhv>().EndActionDelegate = PositiveDelegate;

        var buttonNegative = transform.Find("ButtonNegative");

        buttonNegative.GetComponent <ButtonBhv>().EndActionDelegate = NegativeDelegate;

        SetFrequencies(defaultFrequencies);
        SetPeaksNumber(defaultPeaksNumber - 1);
    }