diff --git a/Output/BackgroundMusic/background track license.txt b/Output/BackgroundMusic/background track license.txt
new file mode 100644
index 00000000..2395341c
--- /dev/null
+++ b/Output/BackgroundMusic/background track license.txt
@@ -0,0 +1,10 @@
+This work is licensed under the Creative Commons license by-sa 3.0.
+(http://creativecommons.org/licenses/by-sa/3.0/)
+
+Author:
+DJad (http://www.jamendo.com/de/artist/DJad)
+
+Distributed by:
+Site: jamendo.com
+File: DJad - Walking Alone.mp3
+URL: http://www.jamendo.com/de/track/543970
diff --git a/Output/BackgroundMusic/background track.mp3 b/Output/BackgroundMusic/background track.mp3
new file mode 100644
index 00000000..f32135fc
Binary files /dev/null and b/Output/BackgroundMusic/background track.mp3 differ
diff --git a/Output/Languages/Deutsch.xml b/Output/Languages/Deutsch.xml
index 0fc27904..f6990785 100644
--- a/Output/Languages/Deutsch.xml
+++ b/Output/Languages/Deutsch.xml
@@ -148,6 +148,9 @@
Kategorieren anzeigen
Schwierigkeit
Timer-Modus
+
+ Hintergrundmusik
+ Hintergrundmusiklautstärke
Aufnahmeeinstellungen
Soundkarte
diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml
index 11ca103c..21a7b39f 100644
--- a/Output/Languages/English.xml
+++ b/Output/Languages/English.xml
@@ -148,6 +148,9 @@
Tabs
Game Difficulty
Timer-Mode
+
+ Backgroundmusic
+ Backgroundmusic Volume
Record Options
Device
diff --git a/Output/Languages/French.xml b/Output/Languages/French.xml
index 169aa556..287f3966 100644
--- a/Output/Languages/French.xml
+++ b/Output/Languages/French.xml
@@ -148,6 +148,9 @@
Dossiers
Difficulté du Jeu
Mode du Minuteur
+
+ TODO: Backgroundmusic
+ TODO: Backgroundmusic Volume
Options d'Enregistrement
Appareil
diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
index 5f01cd24..31cafddc 100644
--- a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
+++ b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
@@ -62,5 +62,245 @@
+
+
+ 75
+ 105
+
+ 0,00
+
+ 32
+
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Left
+
+
+
+ Normal
+
+ TR_SCREENOSOUND_BACKGROUNDMUSIC
+
+
+
+
+
+
+ 75
+ 165
+
+ 0,00
+
+ 32
+
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Left
+
+
+
+ Normal
+
+ TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME
+
+
+
+
+
+
+ Button
+
+ Button
+
+ 145
+ 600
+ 0,00
+ 150
+ 50
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 32
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Normal
+
+ TR_BUTTON_BACK
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 500
+ 100
+ 0,00
+ 700
+ 50
+
+ 505
+ 105
+ 0,00
+ 40
+ 40
+
+ 1170
+ 105
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 32,00
+
+ 205,33
+
+ Normal
+
+ Bold
+
+ 3
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 500
+ 160
+ 0,00
+ 700
+ 50
+
+ 505
+ 165
+ 0,00
+ 40
+ 40
+
+ 1170
+ 165
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 32,00
+
+ 205,33
+
+ Normal
+
+ Bold
+
+ 3
+
\ No newline at end of file
diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs
new file mode 100644
index 00000000..00774591
--- /dev/null
+++ b/Vocaluxe/Base/CBackgroundMusic.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+
+using Vocaluxe.Base;
+
+namespace Vocaluxe.Base
+{
+ static class CBackgroundMusic
+ {
+ private static CHelper Helper = new CHelper();
+ private static List _BackgroundMusicStreams = new List();
+
+ public static void init()
+ {
+ List files = new List();
+ files.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true));
+ files.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true));
+ files.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true));
+ files.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true));
+
+ foreach (string file in files)
+ {
+ _BackgroundMusicStreams.Add(CSound.Load(file));
+ }
+ }
+
+ public static void Play()
+ {
+ if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON)
+ {
+ foreach (int i in _BackgroundMusicStreams)
+ {
+ CSound.Fade(i, CConfig.BackgroundMusicVolume, CConfig.FadeTime);
+ CSound.Play(i);
+ }
+ }
+ }
+
+ public static void Stop()
+ {
+ foreach (int i in _BackgroundMusicStreams)
+ {
+ CSound.FadeAndStop(i, CConfig.BackgroundMusicVolume, CConfig.FadeTime);
+ }
+ }
+
+ public static void Pause()
+ {
+ foreach (int i in _BackgroundMusicStreams)
+ {
+ CSound.Pause(i);
+ }
+ }
+ }
+}
diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs
index 281752e2..95f9fb6b 100644
--- a/Vocaluxe/Base/CConfig.cs
+++ b/Vocaluxe/Base/CConfig.cs
@@ -173,6 +173,8 @@ namespace Vocaluxe.Base
public static EPlaybackLib PlayBackLib = EPlaybackLib.PortAudio;
public static ERecordLib RecordLib = ERecordLib.PortAudio;
public static uint PortAudioBufferSize = 1024;
+ public static int BackgroundMusicVolume = 50;
+ public static EOffOn BackgroundMusic = EOffOn.TR_CONFIG_ON;
// Game
public static List SongFolder = new List();
@@ -282,6 +284,8 @@ namespace Vocaluxe.Base
#region Sound
CHelper.TryGetEnumValueFromXML("//root/Sound/PlayBackLib", navigator, ref PlayBackLib);
CHelper.TryGetEnumValueFromXML("//root/Sound/RecordLib", navigator, ref RecordLib);
+ CHelper.TryGetEnumValueFromXML("//root/Sound/BackgroundMusic", navigator, ref BackgroundMusic);
+ CHelper.TryGetIntValueFromXML("//root/Sound/BackgroundMusicVolume", navigator, ref BackgroundMusicVolume);
#endregion Sound
#region Game
@@ -473,6 +477,12 @@ namespace Vocaluxe.Base
writer.WriteComment("RecordLib: " + ListStrings(Enum.GetNames(typeof(ERecordLib))));
writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib));
+ writer.WriteComment("Background Music");
+ writer.WriteElementString("BackgroundMusicEnabled", Enum.GetName(typeof(EOffOn), BackgroundMusic));
+
+ writer.WriteComment("Background Music Volume from 0 to 100");
+ writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString());
+
writer.WriteEndElement();
#endregion Sound
diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs
index 96748d60..0a22baeb 100644
--- a/Vocaluxe/Menu/CMenu.cs
+++ b/Vocaluxe/Menu/CMenu.cs
@@ -109,6 +109,7 @@ namespace Vocaluxe.Menu
_ThemeLyrics = null;
_ThemeSelectSlides = null;
_ThemeSingNotes = null;
+
}
#region ThemeHandler
public virtual void LoadTheme()
@@ -855,17 +856,20 @@ namespace Vocaluxe.Menu
public virtual void OnShow()
{
ResumeBG();
+ CBackgroundMusic.Play();
}
public virtual void OnShowFinish()
{
ResumeBG();
_Active = true;
+ CBackgroundMusic.Play();
}
public virtual void OnClose()
{
PauseBG();
+ CBackgroundMusic.Pause();
}
#endregion MenuHandler
diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs
index 42eda947..f349f0cd 100644
--- a/Vocaluxe/Program.cs
+++ b/Vocaluxe/Program.cs
@@ -81,6 +81,11 @@ namespace Vocaluxe
Application.DoEvents();
+ // Init Background Music
+ CLog.StartBenchmark(0, "Init Background Music");
+ CBackgroundMusic.init();
+ CLog.StopBenchmark(0, "Init Background Music");
+
// Init Profiles
CLog.StartBenchmark(0, "Init Profiles");
CProfiles.Init();
diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs
index c41c16a9..f03c7b07 100644
--- a/Vocaluxe/Screens/CScreenOptionsSound.cs
+++ b/Vocaluxe/Screens/CScreenOptionsSound.cs
@@ -14,6 +14,14 @@ namespace Vocaluxe.Screens
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
+ private const string SelectSlideBackgroundMusic = "SelectSlideBackgroundMusic";
+ private const string SelectSlideBackgroundMusicVolume = "SelectSlideBackgroundMusicVolume";
+
+ private const string ButtonExit = "ButtonExit";
+
+ private int _BackgroundMusicVolume;
+ private EOffOn _BackgroundMusic;
+
public CScreenOptionsSound()
{
Init();
@@ -25,6 +33,17 @@ namespace Vocaluxe.Screens
_ThemeName = "ScreenOptionsSound";
_ScreenVersion = ScreenVersion;
+
+ _ThemeButtons = new string[] { ButtonExit };
+ _ThemeSelectSlides = new string[] { SelectSlideBackgroundMusic, SelectSlideBackgroundMusicVolume };
+ }
+
+ public override void LoadTheme()
+ {
+ base.LoadTheme();
+ SelectSlides[htSelectSlides(SelectSlideBackgroundMusic)].SetValues((int)CConfig.BackgroundMusic);
+ SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].AddValues(new string[] { "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100"});
+ SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].Selection = CConfig.BackgroundMusicVolume / 5;
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -41,6 +60,7 @@ namespace Vocaluxe.Screens
{
case Keys.Escape:
case Keys.Back:
+ SaveConfig();
CGraphics.FadeTo(EScreens.ScreenOptions);
break;
@@ -49,7 +69,19 @@ namespace Vocaluxe.Screens
break;
case Keys.Enter:
- CGraphics.FadeTo(EScreens.ScreenTest);
+ if (Buttons[htButtons(ButtonExit)].Selected)
+ {
+ SaveConfig();
+ CGraphics.FadeTo(EScreens.ScreenOptions);
+ }
+ break;
+
+ case Keys.Left:
+ SaveConfig();
+ break;
+
+ case Keys.Right:
+ SaveConfig();
break;
}
}
@@ -62,8 +94,17 @@ namespace Vocaluxe.Screens
if (MouseEvent.RB)
{
+ SaveConfig();
CGraphics.FadeTo(EScreens.ScreenOptions);
}
+ if (MouseEvent.LB && IsMouseOver(MouseEvent))
+ {
+ SaveConfig();
+ if (Buttons[htButtons(ButtonExit)].Selected)
+ {
+ CGraphics.FadeTo(EScreens.ScreenOptions);
+ }
+ }
return true;
}
@@ -77,5 +118,19 @@ namespace Vocaluxe.Screens
base.Draw();
return true;
}
+
+ public override void OnShow()
+ {
+ base.OnShow();
+ _BackgroundMusic = CConfig.BackgroundMusic;
+ _BackgroundMusicVolume = CConfig.BackgroundMusicVolume;
+ }
+ private void SaveConfig()
+ {
+ CConfig.BackgroundMusic = (EOffOn)SelectSlides[htSelectSlides(SelectSlideBackgroundMusic)].Selection;
+ CConfig.BackgroundMusicVolume = SelectSlides[htSelectSlides(SelectSlideBackgroundMusicVolume)].Selection * 5;
+
+ CConfig.SaveConfig();
+ }
}
}
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index be9483bc..4681a79b 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -326,6 +326,7 @@ namespace Vocaluxe.Screens
}
SetVisuability();
+ CBackgroundMusic.Pause();
}
public override void OnShowFinish()
@@ -334,6 +335,7 @@ namespace Vocaluxe.Screens
CGame.Start();
LoadNextSong();
+ CBackgroundMusic.Pause();
}
public override bool Draw()
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index f6f95ec8..abc609de 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -171,9 +171,15 @@ namespace Vocaluxe.Screens
int song = SongMenus[htSongMenus(SongMenu)].GetActualSelection();
if ((CSongs.Category >= 0) && (song >= 0) && song < CSongs.VisibleSongs.Length)
+ {
Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title;
+ CBackgroundMusic.Pause();
+ }
else if ((CSongs.Category == -1) && (song >= 0) && song < CSongs.Categories.Length)
+ {
Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name;
+ CBackgroundMusic.Play();
+ }
else
Texts[htTexts(TextSelection)].Text = String.Empty;
diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj
index 710a93d4..d10dac28 100644
--- a/Vocaluxe/Vocaluxe.csproj
+++ b/Vocaluxe/Vocaluxe.csproj
@@ -89,6 +89,7 @@
+