public void FadeIn(BGMTrack track)
    {
        if (track == BGMTrack.Overworld)
        {
            BGM.clip = Overworld;
            BGM.Play();
            StartCoroutine(coFadeIn());
        }

        if (track == BGMTrack.Underworld)
        {
            BGM.clip = Underworld;
            BGM.Play();
            StartCoroutine(coFadeIn());
        }

        if (track == BGMTrack.Chase)
        {
            BGM.clip = Chase;
            BGM.Play();
            StartCoroutine(coFadeIn());
        }

        if (track == BGMTrack.Ending)
        {
            BGM.clip = Ending;
            BGM.Play();
            StartCoroutine(coFadeIn());
        }
    }
 public void PlayBGM(BGMTrack t)
 {
     StopBGM();
     m_current.clip = m_tracks[(int)t];
     m_current.volume = m_volume;
     m_current.Play();
     m_currentTrack = t;
 }
    public void PlayTrack(BGMTrack track)
    {
        if (track == BGMTrack.Overworld)
            StartCoroutine(coFadeOut(Overworld));

        if (track == BGMTrack.Underworld)
            StartCoroutine(coFadeOut(Underworld));

        if (track == BGMTrack.Chase)
            StartCoroutine(coFadeOut(Chase));

        if (track == BGMTrack.Ending)
            StartCoroutine(coFadeOut(Ending));
    }
 public void FadeinBGM(BGMTrack t, float fadeSec = 1.0f)
 {
     if( m_currentTrack != t ) {
         StartCoroutine(_FadeIn(t,fadeSec));
     }
 }
 public void CrossFade(BGMTrack t, float fadeSec = 1.0f)
 {
     StartCoroutine(_CrossFade(t, fadeSec));
 }
    private IEnumerator _FadeIn(BGMTrack t, float fadeSec)
    {
        if( m_current == null ) {
            m_current = m_sources[0];
        }
        AudioSource src = m_current;

        src.clip = m_tracks[(int)t];
        src.volume = 0.0f;
        src.Play ();

        float tStart = Time.time;

        while( Time.time - tStart < fadeSec ) {
            float rate = (Time.time - tStart) / fadeSec;
            src.volume = m_volume * rate;
            yield return new WaitForEndOfFrame();
        }
        m_current.volume = m_volume;
        m_currentTrack = t;
    }
    private IEnumerator _CrossFade(BGMTrack t, float fadeSec)
    {
        AudioSource fadeout = m_current;
        AudioSource fadein = (m_current == m_sources[0])? m_sources[1]:m_sources[0];

        fadein.clip = m_tracks[(int)t];
        fadein.volume = 0.0f;
        fadein.Play ();

        float initialVolume = fadeout.volume;
        float tStart = Time.time;

        while( Time.time - tStart < fadeSec ) {
            float rate = (Time.time - tStart) / fadeSec;
            fadein.volume = m_volume * rate;
            fadeout.volume = initialVolume * (1.0f - rate);
            yield return new WaitForEndOfFrame();
        }
        m_current = fadein;
        m_current.volume = m_volume;
        m_currentTrack = t;

        fadeout.Pause();
    }