public static void RegenerateAudioSampleMask()
    {
        if (Selection.objects != null && Selection.objects.Any(obj => (obj is AudioSampleMask)))
        {
            var masks = Selection.objects
                        .Where(obj => obj is AudioSampleMask)
                        .Select(mask => (AudioSampleMask)mask);

            foreach (var mask in masks)
            {
                if (mask != null && mask.clip != null)
                {
                    mask.values = AudioSampler.LoadSamples(mask.clip, SAMPLE_STEP_SIZE);
                }
            }
        }
    }
    public static void CreateAudioSampleMask()
    {
        if (Selection.objects != null && Selection.objects.Any(obj => (obj is AudioClip)))
        {
            var clips = Selection.objects
                        .Where(obj => obj is AudioClip)
                        .Select(clip => (AudioClip)clip);

            foreach (var clip in clips)
            {
                AudioSampleMask newMask = ScriptableObject.CreateInstance <AudioSampleMask>();
                newMask.clip   = clip;
                newMask.values = AudioSampler.LoadSamples(clip, SAMPLE_STEP_SIZE);

                string path = AssetDatabase.GetAssetPath(clip).Split('.')[0];
                AssetDatabase.CreateAsset(newMask, path + "_Mask.asset");
            }
        }
    }