From 5fdb3d822c13689cfbc184490518de547c7aea59 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sun, 19 Feb 2012 19:46:22 +0100 Subject: [PATCH 1/3] Play Background Music in a List --- Vocaluxe/Base/CBackgroundMusic.cs | 52 +++++++++++++++++++++++++------ Vocaluxe/Menu/CGraphics.cs | 1 + 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index bfea2893..aa5eef5c 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -4,6 +4,7 @@ using System.Text; using System.IO; using Vocaluxe.Base; +using System.Diagnostics; namespace Vocaluxe.Base { @@ -11,6 +12,10 @@ namespace Vocaluxe.Base { private static CHelper Helper = new CHelper(); private static List _BackgroundMusicStreams = new List(); + private static int _CurrentMusicStream; + private static int _CurrentStreamListIndex = 0; + private static bool _Fading; + private static Stopwatch _FadeTimer = new Stopwatch(); public static void init() { @@ -24,33 +29,62 @@ namespace Vocaluxe.Base { _BackgroundMusicStreams.Add(CSound.Load(file)); } + _CurrentMusicStream = _BackgroundMusicStreams[0]; } public static void Play() { if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON) { - foreach (int i in _BackgroundMusicStreams) + if(_BackgroundMusicStreams.Count == 1) { - CSound.Fade(i, CConfig.BackgroundMusicVolume, CConfig.FadeTime); - CSound.Play(i, true); + CSound.Fade(_BackgroundMusicStreams[0], CConfig.BackgroundMusicVolume, CConfig.FadeTime); + CSound.Play(_BackgroundMusicStreams[0], true); + } + else if (_BackgroundMusicStreams.Count > 1) + { + CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CConfig.FadeTime); + CSound.Play(_CurrentMusicStream); } } } public static void Stop() { - foreach (int i in _BackgroundMusicStreams) - { - CSound.FadeAndStop(i, CConfig.BackgroundMusicVolume, CConfig.FadeTime); - } + CSound.FadeAndStop(_BackgroundMusicStreams[_CurrentStreamListIndex], CConfig.BackgroundMusicVolume, CConfig.FadeTime); } public static void Pause() { - foreach (int i in _BackgroundMusicStreams) + CSound.Pause(_BackgroundMusicStreams[_CurrentStreamListIndex]); + } + + public static void Update() + { + if (_BackgroundMusicStreams.Count > 1) { - CSound.Pause(i); + float timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); + if (_FadeTimer.ElapsedMilliseconds >= CConfig.FadeTime * 1000) + { + _Fading = false; + _FadeTimer.Reset(); + } + if ((timeToPlay <= CConfig.FadeTime) && !_Fading) + { + _FadeTimer.Start(); + CSound.Fade(_CurrentMusicStream, 0, CConfig.FadeTime); + _CurrentStreamListIndex++; + if (_CurrentStreamListIndex + 1 > _BackgroundMusicStreams.Count) + { + _CurrentStreamListIndex = 0; + _CurrentMusicStream = _BackgroundMusicStreams[_CurrentStreamListIndex]; + } + else + _CurrentMusicStream = _BackgroundMusicStreams[_CurrentStreamListIndex]; + CSound.SetPosition(_CurrentStreamListIndex, 0); + Play(); + _Fading = true; + } } } } diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index e08c7cd7..cc05de5b 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -292,6 +292,7 @@ namespace Vocaluxe.Menu Keys.CopyEvents(); CSound.Update(); + CBackgroundMusic.Update(); if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && ActualScreen != EScreens.ScreenSing) CSongs.LoadCover(30L); From 67e0d72424b1287ab6691d520bee581923413f6b Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sun, 19 Feb 2012 19:57:50 +0100 Subject: [PATCH 2/3] Fixed error with no Files in BackgroundMusic folder --- Vocaluxe/Base/CBackgroundMusic.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index aa5eef5c..d599c8e4 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,8 +28,8 @@ namespace Vocaluxe.Base foreach (string file in files) { _BackgroundMusicStreams.Add(CSound.Load(file)); + _CurrentMusicStream = _BackgroundMusicStreams[0]; } - _CurrentMusicStream = _BackgroundMusicStreams[0]; } public static void Play() @@ -51,12 +51,14 @@ namespace Vocaluxe.Base public static void Stop() { - CSound.FadeAndStop(_BackgroundMusicStreams[_CurrentStreamListIndex], CConfig.BackgroundMusicVolume, CConfig.FadeTime); + if(_BackgroundMusicStreams.Count > 0) + CSound.FadeAndStop(_BackgroundMusicStreams[_CurrentStreamListIndex], CConfig.BackgroundMusicVolume, CConfig.FadeTime); } public static void Pause() { - CSound.Pause(_BackgroundMusicStreams[_CurrentStreamListIndex]); + if (_BackgroundMusicStreams.Count > 0) + CSound.Pause(_BackgroundMusicStreams[_CurrentStreamListIndex]); } public static void Update() From f706a35d309e49dc40654037e712618dfe1f6b18 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sun, 19 Feb 2012 20:04:46 +0100 Subject: [PATCH 3/3] Small fix --- Vocaluxe/Base/CBackgroundMusic.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index d599c8e4..1bd01a18 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,8 +28,10 @@ namespace Vocaluxe.Base foreach (string file in files) { _BackgroundMusicStreams.Add(CSound.Load(file)); - _CurrentMusicStream = _BackgroundMusicStreams[0]; } + + if(_BackgroundMusicStreams.Count > 0) + _CurrentMusicStream = _BackgroundMusicStreams[0]; } public static void Play()