Пример #1
0
 public void StopMusic()
 {
     m_currentTransition = null;
     m_nextTransitions.Clear();
     m_musicState = MyMusicState.Stopped;
     if (m_musicCue != null)
     {
         try
         {
             m_musicCue.Stop();
         }
         catch (Exception e)
         {
             MyLog.Default.WriteLine(e);
             if (m_audioEngine == null || m_audioEngine.IsDisposed)
             {
                 MyLog.Default.WriteLine("Audio engine disposed!", LoggingOptions.AUDIO);
             }
         }
     }
 }
Пример #2
0
        private void UpdateMusic(int stepSizeinMS)
        {
            if (m_musicState == MyMusicState.Transition)
            {
                m_timeFromTransitionStart += stepSizeinMS;
                // if transition time elapsed, we stop actual playing cue and set music state to stopped
                if (m_timeFromTransitionStart >= TRANSITION_TIME)
                {
                    m_musicState = MyMusicState.Stopped;
                    if ((m_musicCue != null) && m_musicCue.IsPlaying)
                    {
                        m_musicCue.Stop(true);
                        m_musicCue = null;
                    }
                }
                // we decrease music volume (because transition effect)
                else if ((m_musicCue != null) && m_musicCue.IsPlaying)
                {
                    if ((m_musicAudioVoice.Volume > 0f) && m_musicOn)
                        m_musicAudioVoice.SetVolume((1f - (float)m_timeFromTransitionStart / TRANSITION_TIME) * m_volumeAtTransitionStart);
                }
            }

            if (m_musicState == MyMusicState.Stopped)
            {
                MyMusicTransition? nextTransition = GetNextTransition();
                // we save current transition as next transition, if we want apply transition with higher priority, so after new transition stop, then this old transition return back
                if ((m_currentTransition != null) && (m_nextTransitions.Count > 0) && (nextTransition != null) && (nextTransition.Value.Priority > m_currentTransition.Value.Priority))
                    m_nextTransitions[m_currentTransition.Value.Priority] = m_currentTransition.Value;

                m_currentTransition = nextTransition;
                // it there is current transition to play, we play it and set state to playing
                if (m_currentTransition != null)
                {
                    m_musicAudioVoice.SetVolume(m_volumeMusic);
                    PlayMusicByTransition(m_currentTransition.Value);
                    m_nextTransitions.Remove(m_currentTransition.Value.Priority);
                    m_musicState = MyMusicState.Playing;
                }
            }

            if (m_musicState == MyMusicState.Playing)
            {
                if ((m_musicCue == null) || !m_musicCue.IsPlaying)
                {
                    if (m_loopMusic && m_currentTransition != null)
                    {
                        // we play current transition in loop
                        Debug.Assert(m_currentTransition != null);
                        PlayMusicByTransition(m_currentTransition.Value);
                    }
                    else
                    {
                        // switches to another, random, track
                        m_currentTransition = null;
                        //MyStringId? newTransitionEnum = GetRandomTransitionEnum();
                        MyStringId? newTransitionEnum = MyStringId.GetOrCompute("Default");
                        if (newTransitionEnum.HasValue)
                            ApplyTransition(newTransitionEnum.Value, 0, null, false);
                    }
                }
            }
        }
Пример #3
0
 public void StopMusic()
 {
     m_currentTransition = null;
     m_nextTransitions.Clear();
     m_musicState = MyMusicState.Stopped;
     if (m_musicCue != null)
     {
         try
         {
             m_musicCue.Stop();
         }
         catch (Exception e)
         {
             MyLog.Default.WriteLine(e);
             if (m_audioEngine == null || m_audioEngine.IsDisposed)
             {
                 MyLog.Default.WriteLine("Audio engine disposed!", LoggingOptions.AUDIO);
             }
         }
     }
 }
Пример #4
0
        private void UpdateMusic(int stepSizeinMS)
        {
            if (m_musicState == MyMusicState.Transition)
            {
                m_timeFromTransitionStart += stepSizeinMS;
                // if transition time elapsed, we stop actual playing cue and set music state to stopped
                if (m_timeFromTransitionStart >= TRANSITION_TIME)
                {
                    m_musicState = MyMusicState.Stopped;
                    if ((m_musicCue != null) && m_musicCue.IsPlaying)
                    {
                        m_musicCue.Stop(true);
                        m_musicCue = null;
                    }
                }
                // we decrease music volume (because transition effect)
                else if ((m_musicCue != null) && m_musicCue.IsPlaying)
                {
                    if ((m_musicAudioVoice.Volume > 0f) && m_musicOn)
                    {
                        m_musicAudioVoice.SetVolume((1f - (float)m_timeFromTransitionStart / TRANSITION_TIME) * m_volumeAtTransitionStart);
                    }
                }
            }

            if (m_musicState == MyMusicState.Stopped)
            {
                MyMusicTransition?nextTransition = GetNextTransition();
                // we save current transition as next transition, if we want apply transition with higher priority, so after new transition stop, then this old transition return back
                if ((m_currentTransition != null) && (m_nextTransitions.Count > 0) && (nextTransition != null) && (nextTransition.Value.Priority > m_currentTransition.Value.Priority))
                {
                    m_nextTransitions[m_currentTransition.Value.Priority] = m_currentTransition.Value;
                }

                m_currentTransition = nextTransition;
                // it there is current transition to play, we play it and set state to playing
                if (m_currentTransition != null)
                {
                    m_musicAudioVoice.SetVolume(m_volumeMusic);
                    PlayMusicByTransition(m_currentTransition.Value);
                    m_nextTransitions.Remove(m_currentTransition.Value.Priority);
                    m_musicState = MyMusicState.Playing;
                }
            }

            if (m_musicState == MyMusicState.Playing)
            {
                if ((m_musicCue == null) || !m_musicCue.IsPlaying)
                {
                    if (m_loopMusic && m_currentTransition != null)
                    {
                        // we play current transition in loop
                        Debug.Assert(m_currentTransition != null);
                        PlayMusicByTransition(m_currentTransition.Value);
                    }
                    else
                    {
                        // switches to another, random, track
                        m_currentTransition = null;
                        MyStringId?newTransitionEnum = GetRandomTransitionEnum();
                        if (newTransitionEnum.HasValue)
                        {
                            ApplyTransition(newTransitionEnum.Value, 0, null, false);
                        }
                    }
                }
            }
        }
Пример #5
0
        private static void UpdateMusic()
        {
            if (m_musicState == MyMusicState.Transition)
            {
                m_timeFromTransitionStart += MyConstants.PHYSICS_STEP_SIZE_IN_MILLISECONDS;
                // if transition time elapsed, we stop actual playing cue and set music state to stopped
                if (m_timeFromTransitionStart >= TRANSITION_TIME)
                {
                    m_musicState = MyMusicState.Stopped;
                    if (m_musicCue != null && m_musicCue.Value.IsPlaying)
                    {
                        m_musicCue.Value.Stop(StopFlags.Immediate);
                        m_musicCue = null;
                    }
                }
                // we decrease music volume (because transition effect)
                else if (m_musicCue != null && m_musicCue.Value.IsPlaying)
                {
                    //temporary disabled, volume decreasing now works strange (terible noise)
                    if (m_volumeMusic > 0f && m_musicOn)
                    {
                        m_musicCategory.SetVolume((1f - (float)m_timeFromTransitionStart / TRANSITION_TIME) * m_volumeMusic);
                    }
                }
            }

            if (m_musicState == MyMusicState.Stopped)
            {
                MyMusicTransition? nextTransition = GetNextTransition();
                // we save current transition as next transition, if we want apply transition with higher priority, so after new transition stop, then this old transition return back
                if (m_currentTransition != null && m_nextTransitions.Count > 0 && nextTransition != null && nextTransition.Value.Priority > m_currentTransition.Value.Priority)
                {
                    m_nextTransitions[m_currentTransition.Value.Priority] = m_currentTransition.Value;
                }

                m_currentTransition = nextTransition;
                // it there is current transition to play, we play it and set state to playing
                if (m_currentTransition != null)
                {
                    PlayMusicByTransition(m_currentTransition.Value);
                    m_nextTransitions.Remove(m_currentTransition.Value.Priority);
                    m_musicState = MyMusicState.Playing;
                }
            }

            if (m_musicState == MyMusicState.Playing)
            {
                // we play current transition in loop
                //TODO: IsStopped makes peaks

                if (m_musicCue != null && (!m_musicCue.Value.IsValid || m_musicCue.Value.IsStopped))
                {
                    if (m_loopMusic)
                    {
                        Debug.Assert(m_currentTransition != null);
                        PlayMusicByTransition(m_currentTransition.Value);
                    }
                    else
                    {
                        m_loopMusic = true; //default
                        StopTransition(m_currentTransition.Value.Priority);
                    }
                }
            }
        }
Пример #6
0
 static void ClearMusicTransitions()
 {
     m_musicState = MyMusicState.Stopped;
     m_musicCue = null;
     //m_nextTransition = null;
     m_nextTransitions.Clear();
     m_currentTransition = null;
 }