public void DrawWaveFormMinAndMaxValues(AudioClip audioClip)
    {
        if (audioClip == null || audioClip.samples == 0)
        {
            return;
        }

        dynTexture.ClearTexture();

        Vector2[] minMaxValues = CalculateMinAndMaxValues(audioClip);
        DrawMinAndMaxValuesToTexture(minMaxValues);
    }
    private void UpdateIssueOverviewImage()
    {
        if (dynamicTexture == null)
        {
            return;
        }

        dynamicTexture.ClearTexture();
        foreach (SongIssue issue in issues)
        {
            DrawIssue(issue);
        }
        dynamicTexture.ApplyTexture();
    }
    private void UpdateNoteOverviewImage()
    {
        if (dynamicTexture == null)
        {
            return;
        }

        dynamicTexture.ClearTexture();
        foreach (Voice voice in songMeta.GetVoices())
        {
            Color color = songEditorSceneControl.GetColorForVoice(voice);
            DrawNotes(voice, color);
        }
        dynamicTexture.ApplyTexture();
    }
    private void UpdateMidiNoteLines()
    {
        dynamicTexture.ClearTexture();

        int minMidiNote = noteAreaControl.MinMidiNoteInCurrentViewport;
        int maxMidiNote = noteAreaControl.MaxMidiNoteInCurrentViewport;

        for (int midiNote = minMidiNote; midiNote <= maxMidiNote; midiNote++)
        {
            // Notes are drawn on lines and between lines alternatingly.
            bool hasLine = (midiNote % 2 == 0);
            if (hasLine)
            {
                Color color = (MidiUtils.GetRelativePitch(midiNote) == 0)
                    ? NoteAreaHorizontalRulerControl.highlightLineColor
                    : NoteAreaHorizontalRulerControl.normalLineColor;
                DrawHorizontalGridLine(midiNote, color);
            }
        }

        dynamicTexture.ApplyTexture();
    }