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 @@ +