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); } } } }
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); } } } }
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); } } } } }
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); } } } }
static void ClearMusicTransitions() { m_musicState = MyMusicState.Stopped; m_musicCue = null; //m_nextTransition = null; m_nextTransitions.Clear(); m_currentTransition = null; }