void Update()
    {
        curTimer += Time.deltaTime;

        speakingNear.Clear();
        foreach (var speaker in shutUpWhenOtherSpeaking)
        {
            if (speaker.currentNotePattern != null &&
                Vector3.Distance(speaker.transform.position, transform.position) < shutUpWhenOtherSpeakingRadius)
            {
                speakingNear.Add(speaker);
            }
        }

        if (speakingNear.Count > 0)
        {
            curState = IdlePatternState.ShuttingUp;
            playNotes.StopPlaying();
            curTimer = 0f;
        }


        switch (curState)
        {
        case IdlePatternState.PlayingNotes:
            if (playNotes.currentPattern == null)
            {
                curState = IdlePatternState.PausedBetween;
                curTimer = 0f;
            }
            break;

        case IdlePatternState.PausedBetween:
            if (curTimer > pauseBetweenRepeats)
            {
                if (playNotes.currentPattern == null)
                {
                    playNotes.PlayPattern(pattern, volume);
                    curState = IdlePatternState.PlayingNotes;
                }
            }
            break;

        case IdlePatternState.ShuttingUp:
            if (speakingNear.Count == 0 && curTimer > pauseBeforeResume)
            {
                if (playNotes.currentPattern == null)
                {
                    playNotes.PlayPattern(pattern, volume);
                    curState = IdlePatternState.PlayingNotes;
                }
            }
            break;

        default:
            break;
        }
    }