Editor/AIToolsMenu.cs
using System.Linq;
using Editor;
using Sandbox;

public static class AIToolsMenu
{
	[Menu( "Editor", "AI Tools/Generate sound" )]
    public static void Generate()
    {
		if (SoundSettings.Settings.ElevenLabsApiKey.Length < 1)
        {
            Dialog.AskConfirm(() => {}, "Set your ElevenLabs API key first in settings.", "Error", "Okay");
            return;
        }

        var inspectorObject = EditorUtility.InspectorObject as Asset;
        if (inspectorObject == null)
        {
            Dialog.AskConfirm(() => {}, "Open SoundEvent in Inspector first.", "Error", "Okay");
            return;
        }

        var resource = inspectorObject.LoadResource();
        if (resource == null)
        {
            Dialog.AskConfirm(() => {}, "Failed to load resource.", "Error", "Okay");
            return;
        }

        if (!(resource is SoundEvent))
        {
            Dialog.AskConfirm(() => {}, "Selected asset must be a SoundEvent.", "Error", "Okay");
            return;
        }

        var soundEvent = resource as SoundEvent;
        SoundAddons.Generate(soundEvent, (soundFile) => {
            soundEvent.Sounds.Add(soundFile);
			EditorUtility.InspectorObject = null;
            EditorUtility.InspectorObject = inspectorObject;
        });
    }

[Menu("Editor", "AI Tools/Split sound")]
    public static void Split()
    {
        var asset = EditorUtility.InspectorObject as Asset;
        var soundEvent = asset.LoadResource() as SoundEvent;

        var dialog = new Dialog();
        dialog.Window.Title = "Split Sound";
        dialog.Window.Size = new Vector2(800, 400);

        dialog.Layout = Layout.Column();
        var mainLayout = dialog.Layout.AddColumn();
        mainLayout.Margin = 16f;

        var spectogramWidget = new SpectogramWidget(null);
        mainLayout.Add(spectogramWidget, 1);

        var controlsLayout = mainLayout.AddRow();
        var splitButton = new Button.Primary("Split", "content_cut");
        controlsLayout.Add(splitButton);

        splitButton.Clicked = () =>
        {
            if (spectogramWidget.CurrentSound == null)
            {
                Log.Error("No sound loaded to split");
                return;
            }

            spectogramWidget.SplitCurrentSound((soundFile) => {
                soundEvent.Sounds.Add(soundFile);
				EditorUtility.InspectorObject = null;
				EditorUtility.InspectorObject = asset;
            });
        };

        dialog.Show();
    }
}