//public NullReferenceException PlayClip

    public TypedAudioClip BindClipToAudioSource(TypedAudioClip clip)
    {
        switch (clip.Type)
        {
        case ClipType.Music:
            if (musicSource == null)
            {
                musicSource = gameObject.AddComponent <AudioSource>();
            }
            clip.Source = musicSource;
            break;

        case ClipType.Ambience:
            if (ambienceSource == null)
            {
                ambienceSource = gameObject.AddComponent <AudioSource>();
            }
            clip.Source = ambienceSource;
            break;

        case ClipType.Effect:
            clip = SetUpAudioSource(clip);
            break;

        case ClipType.Undefined:
            clip = SetUpAudioSource(clip);
            break;

        default:
            Debug.Log("Unregistered AudioClip encountered");
            break;
        }

        return(clip);
    }
    /// <summary>
    /// Creates a TypedAudioClip and adds it to the typedAudioClips collection.
    /// Note: The method allows you to omit type and name, but you should always provide these parameters if you want to play the clip
    /// </summary>
    /// <param name="clip"></param>
    /// <param name="type"></param>
    /// <param name="name">Must be unique to guarantee playability</param>
    /// <returns></returns>
    public int AddAudioClip(AudioClip clip, ClipType type = ClipType.Undefined, string name = "GiveMeAName")
    {
        TypedAudioClip c = new TypedAudioClip(clip, type, name);

        typedAudioClips.Add(c);
        return(typedAudioClips.IndexOf(c));
    }
    TypedAudioClip SetUpAudioSource(TypedAudioClip clip)
    {
        if (clip.Source == null)
        {
            clip.Source = gameObject.AddComponent <AudioSource>();
        }
        clip.Source.clip        = clip.Clip;
        clip.Source.volume      = clip.volume;
        clip.Source.mute        = clip.mute;
        clip.Source.playOnAwake = clip.PlayOnAwake;
        clip.Source.loop        = clip.Loop;

        return(clip);
    }