diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs
index 837cd713..cef1f480 100644
--- a/Vocaluxe/Base/CGraphics.cs
+++ b/Vocaluxe/Base/CGraphics.cs
@@ -60,6 +60,11 @@ namespace Vocaluxe.Base
get { return _CurrentScreen; }
}
+ public static EScreens NextScreen
+ {
+ get { return _NextScreen; }
+ }
+
#region public methods
public static void Init()
{
diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs
index 00650e9a..f97120ee 100644
--- a/Vocaluxe/Base/CMain.cs
+++ b/Vocaluxe/Base/CMain.cs
@@ -77,6 +77,11 @@ namespace Vocaluxe.Base
return CConfig.BackgroundMusicVolume;
}
+ public EOffOn GetBackgroundMusicStatus()
+ {
+ return CConfig.BackgroundMusic;
+ }
+
public int GetPreviewMusicVolume()
{
return CConfig.PreviewMusicVolume;
@@ -436,6 +441,11 @@ namespace Vocaluxe.Base
{
return CGraphics.GlobalAlpha;
}
+
+ public EScreens GetNextScreen()
+ {
+ return CGraphics.NextScreen;
+ }
}
class CBlog : ILog
@@ -979,9 +989,9 @@ namespace Vocaluxe.Base
CPreviewPlayer.Stop();
}
- public void Pause()
+ public void TogglePause()
{
- CPreviewPlayer.Pause();
+ CPreviewPlayer.TogglePause();
}
public CTexture GetCover()
diff --git a/Vocaluxe/Base/CPreviewPlayer.cs b/Vocaluxe/Base/CPreviewPlayer.cs
index 3422b248..2daf7e1d 100644
--- a/Vocaluxe/Base/CPreviewPlayer.cs
+++ b/Vocaluxe/Base/CPreviewPlayer.cs
@@ -51,7 +51,7 @@ namespace Vocaluxe.Base
_Player.Play();
}
- public static void Pause()
+ public static void TogglePause()
{
_Player.TogglePause();
}
diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs
index 945e6731..07eaa297 100644
--- a/Vocaluxe/Screens/CScreenNames.cs
+++ b/Vocaluxe/Screens/CScreenNames.cs
@@ -566,6 +566,9 @@ namespace Vocaluxe.Screens
{
base.OnClose();
CRecord.Stop();
+
+ if (CGraphics.NextScreen != EScreens.ScreenSong && CPreviewPlayer.IsPlaying)
+ CPreviewPlayer.TogglePause();
}
public override bool Draw()
diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs
index db70f56e..1b1c133f 100644
--- a/Vocaluxe/Screens/CScreenScore.cs
+++ b/Vocaluxe/Screens/CScreenScore.cs
@@ -123,6 +123,9 @@ namespace Vocaluxe.Screens
public override void OnShow()
{
+ if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON)
+ CPreviewPlayer.TogglePause();
+
base.OnShow();
//-1 --> Show average
_Round = CGame.NumRounds > 1 ? -1 : 0;
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index d9a44b1a..0a0cb301 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -537,8 +537,6 @@ namespace Vocaluxe.Screens
_CloseSong();
if (_Webcam)
CWebcam.Stop();
- CBackgroundMusic.Disabled = false;
- CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume);
}
private void _CloseSong()
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index b70017d5..ffc83c4e 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -716,9 +716,14 @@ namespace Vocaluxe.Screens
public override void OnClose()
{
base.OnClose();
- CBackgroundMusic.Disabled = false;
- CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume);
+
_SongMenu.OnHide();
+
+ if (CGraphics.NextScreen != EScreens.ScreenNames || CConfig.BackgroundMusic == EOffOn.TR_CONFIG_OFF)
+ {
+ CBackgroundMusic.Disabled = false;
+ CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume);
+ }
}
private void _HandlePartySongSelection(int songNr)
diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs
index a18b6811..2158cf62 100644
--- a/VocaluxeLib/IBasic.cs
+++ b/VocaluxeLib/IBasic.cs
@@ -35,6 +35,8 @@ namespace VocaluxeLib
void SetBackgroundMusicVolume(int newVolume);
int GetBackgroundMusicVolume();
+ EOffOn GetBackgroundMusicStatus();
+
int GetPreviewMusicVolume();
EOffOn GetVideosToBackground();
@@ -150,6 +152,8 @@ namespace VocaluxeLib
void FadeTo(EScreens nextScreen);
float GetGlobalAlpha();
+
+ EScreens GetNextScreen();
}
public interface ILog
@@ -321,7 +325,7 @@ namespace VocaluxeLib
void Play(float start = -1);
void Load(CSong song, float start = 0f);
void Stop();
- void Pause();
+ void TogglePause();
CTexture GetCover();
CTexture GetVideoTexture();
bool IsPlaying();
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
index 079c0cb6..82974e48 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
@@ -376,10 +376,11 @@ namespace VocaluxeLib.Menu.SongMenu
}
public virtual void OnShow() {}
-
+
public virtual void OnHide()
{
- _ResetPreview();
+ if(CBase.Graphics.GetNextScreen() != EScreens.ScreenNames || CBase.Config.GetBackgroundMusicStatus() == EOffOn.TR_CONFIG_OFF)
+ _ResetPreview();
}
public abstract bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options);
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
index f1449689..68e142e2 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
@@ -110,7 +110,11 @@ namespace VocaluxeLib.Menu.SongMenu
set
{
if (value == base._PreviewNr)
+ {
+ if (!CBase.PreviewPlayer.IsPlaying())
+ CBase.PreviewPlayer.Play();
return;
+ }
base._PreviewNr = value;
_UpdatePreview();
}
diff --git a/VocaluxeLib/Utils/Player/CSongPlayer.cs b/VocaluxeLib/Utils/Player/CSongPlayer.cs
index 8238e35e..8f1f2a5d 100644
--- a/VocaluxeLib/Utils/Player/CSongPlayer.cs
+++ b/VocaluxeLib/Utils/Player/CSongPlayer.cs
@@ -159,11 +159,15 @@ namespace VocaluxeLib.Utils.Player
public new void TogglePause()
{
base.TogglePause();
- if (_Video != -1)
+ if (!IsPlaying && _Video != -1)
{
CBase.Video.Pause(_Video);
CBase.Video.Skip(_Video, CBase.Sound.GetPosition(_StreamID) + _FadeTime, _Song.VideoGap);
}
+ else if(_Video != -1)
+ {
+ CBase.Video.Resume(_Video);
+ }
}
public new void Update()
diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj
index 04e04f51..a367e8e1 100644
--- a/VocaluxeLib/VocaluxeLib.csproj
+++ b/VocaluxeLib/VocaluxeLib.csproj
@@ -135,7 +135,6 @@
-