diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 19d3b198..d595bee2 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -293,24 +293,33 @@ namespace Vocaluxe.Base if (!IsPlayingPreview) { Pause(); - _CurPlayer = _PreviewPlayer; CSound.SetGlobalVolume(CConfig.PreviewMusicVolume); } _PreviewPlayer.Load(song); - float length = _PreviewPlayer.Length; - if (length < 1) - length = 30; // If length is unknow or invalid assume a length of 30s + //Change song position only if song is changed or near to end + if (_CurPlayer.SongID != _PreviewPlayer.SongID && _CurPlayer.Position + 30 < _CurPlayer.Length) + { + float length = _PreviewPlayer.Length; + if (length < 1) + length = 30; // If length is unknow or invalid assume a length of 30s - if (start < 0) - start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime; - if (start > length - 5f) - start = Math.Max(0f, Math.Min(length / 4f, length - 5f)); - if (start >= 0.5f) - start -= 0.5f; + if (start < 0) + start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime; + if (start > length - 5f) + start = Math.Max(0f, Math.Min(length / 4f, length - 5f)); + if (start >= 0.5f) + start -= 0.5f; - _PreviewPlayer.Position = start; + _PreviewPlayer.Position = start; + } + else + { + _PreviewPlayer.Position = _CurPlayer.Position; + } + + _CurPlayer = _PreviewPlayer; Play(); } @@ -321,6 +330,11 @@ namespace Vocaluxe.Base return; Stop(); _CurPlayer = _BGPlayer; + if (_MusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC) + { + _CurPlayer.Load(CSongs.GetSong(_PreviewPlayer.SongID)); + _CurPlayer.Position = _PreviewPlayer.Position; + } CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); } diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index 1cc4fa0a..ca1f9323 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -289,7 +289,10 @@ namespace VocaluxeLib.Menu.SongMenu public virtual void OnHide() { - if (CBase.Graphics.GetNextScreenType() != EScreen.Names || CBase.Config.GetBackgroundMusicStatus() == EBackgroundMusicOffOn.TR_CONFIG_OFF) + EScreen check = CBase.Graphics.GetNextScreenType(); + if (CBase.Graphics.GetNextScreenType() == EScreen.Sing) + _ResetPreview(false); + else if (CBase.Graphics.GetNextScreenType() != EScreen.Names || CBase.Config.GetBackgroundMusicStatus() == EBackgroundMusicOffOn.TR_CONFIG_OFF) _ResetPreview(); }