diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml index 9b7e88c6..a42fd2b5 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml @@ -110,6 +110,20 @@ Outline TR_SCREENOSOUND_GAMEMUSICVOLUME + + + 75 + 407 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENOSOUND_KARAOKEEFFECT @@ -361,6 +375,48 @@ Outline Bold 3 + + + + SelectSlideArrowLeft + SelectSlideArrowRight + SelectSlide + SelectSlideArrowLeft + SelectSlideArrowRight + + 500 + 400 + 700 + 50 + 0 + + + 505 + 405 + 40 + 40 + 0 + + + 1170 + 405 + 40 + 40 + 0 + + + + + + + + 27 + 50 + 0 + 500 + Outline + Bold + 2 diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 85d7d409..f0460820 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -120,6 +120,8 @@ namespace Vocaluxe.Base [DefaultValue(EOffOn.TR_CONFIG_ON)] public EOffOn BackgroundMusicUseStart; [XmlRanged(0, 100), DefaultValue(50)] public int PreviewMusicVolume; [XmlRanged(0, 100), DefaultValue(80)] public int GameMusicVolume; + [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn KaraokeEffect; + [XmlRanged(0, 1), DefaultValue(1.0f)] public float KaraokeEffectLevel; // ReSharper restore MemberHidesStaticFromOuterClass } @@ -452,6 +454,10 @@ namespace Vocaluxe.Base return "Preview Volume from 0 to 100"; case "GameMusicVolume": return "Game Volume from 0 to 100"; + case "KaraokeEffect": + return "Apply a karaoke effect to song playback (EPlaybackLib.GstreamerSharp only)"; + case "KaraokeEffectLevel": + return "The level of the karaoke effect [0-1] (EPlaybackLib.GstreamerSharp only)"; case "Language": return "Game-Language"; case "SongFolder": diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index 5f4e1f40..97a432b0 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -19,6 +19,7 @@ using System; using GLib; using Gst; using Vocaluxe.Base; +using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { @@ -123,9 +124,29 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp } var audioSinkBin = new Bin("Audiosink"); - audioSinkBin.Add(convert); - audioSinkBin.Add(audiosink); - convert.Link(audiosink); + Element audiokaraoke = null; + if (CConfig.Config.Sound.KaraokeEffect == EOffOn.TR_CONFIG_ON) + { + audiokaraoke = ElementFactory.Make("audiokaraoke", "karaoke"); + audioSinkBin.Add(audiokaraoke); + audioSinkBin.Add(convert); + audioSinkBin.Add(audiosink); + + audiokaraoke.Link(audiosink); + audiokaraoke["level"] = CConfig.Config.Sound.KaraokeEffectLevel; + audiokaraoke["mono-level"] = CConfig.Config.Sound.KaraokeEffectLevel; + + convert.Link(audiokaraoke); + } + else + { + audioSinkBin.Add(convert); + audioSinkBin.Add(audiosink); + convert.Link(audiosink); + } + + + Pad pad = convert.GetStaticPad("sink"); GhostPad ghostpad = new GhostPad("sink", pad); @@ -135,6 +156,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp convert.Dispose(); audiosink.Dispose(); audioSinkBin.Dispose(); + if (audiokaraoke != null) + { + audiokaraoke.Dispose(); + } return false; } @@ -145,6 +170,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp audiosink.Dispose(); audioSinkBin.Dispose(); ghostpad.Dispose(); + if (audiokaraoke != null) + { + audiokaraoke.Dispose(); + } return false; } if (!audioSinkBin.AddPad(ghostpad)) @@ -154,6 +183,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp audiosink.Dispose(); audioSinkBin.Dispose(); ghostpad.Dispose(); + if (audiokaraoke != null) + { + audiokaraoke.Dispose(); + } return false; } @@ -165,6 +198,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp audiosink.Dispose(); audioSinkBin.Dispose(); ghostpad.Dispose(); + if (audiokaraoke != null) + { + audiokaraoke.Dispose(); + } return false; } _Element["audio-sink"] = audioSinkBin; diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index b3deb818..6d3c1fde 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -35,6 +35,7 @@ namespace Vocaluxe.Screens private const string _SelectSlideBackgroundMusicSource = "SelectSlideBackgroundMusicSource"; private const string _SelectSlidePreviewMusicVolume = "SelectSlidePreviewMusicVolume"; private const string _SelectSlideGameMusicVolume = "SelectSlideGameMusicVolume"; + private const string _SelectSlideKaraokeEffect = "SelectSlideKaraokeEffect"; private const string _ButtonExit = "ButtonExit"; @@ -46,7 +47,7 @@ namespace Vocaluxe.Screens _ThemeButtons = new string[] {_ButtonExit}; _ThemeSelectSlides = new string[] - {_SelectSlideBackgroundMusic, _SelectSlideBackgroundMusicVolume, _SelectSlideBackgroundMusicSource, _SelectSlidePreviewMusicVolume, _SelectSlideGameMusicVolume}; + {_SelectSlideBackgroundMusic, _SelectSlideBackgroundMusicVolume, _SelectSlideBackgroundMusicSource, _SelectSlidePreviewMusicVolume, _SelectSlideGameMusicVolume, _SelectSlideKaraokeEffect}; } public override void LoadTheme(string xmlPath) @@ -64,6 +65,11 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideGameMusicVolume].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[_SelectSlideGameMusicVolume].Selection = CConfig.GameMusicVolume / 5; + if (CConfig.Config.Sound.PlayBackLib == EPlaybackLib.GstreamerSharp) + { + _SelectSlides[_SelectSlideKaraokeEffect].SetValues((int)CConfig.Config.Sound.KaraokeEffect); + _SelectSlides[_SelectSlideBackgroundMusicSource].Selection = (int)CConfig.Config.Sound.KaraokeEffect; + } } public override bool HandleInput(SKeyEvent keyEvent) @@ -147,6 +153,10 @@ namespace Vocaluxe.Screens CConfig.Config.Sound.BackgroundMusic = (EBackgroundMusicOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection; CConfig.Config.Sound.BackgroundMusicSource = (EBackgroundMusicSource)_SelectSlides[_SelectSlideBackgroundMusicSource].Selection; CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5; + if (CConfig.Config.Sound.PlayBackLib == EPlaybackLib.GstreamerSharp) + { + CConfig.Config.Sound.KaraokeEffect = (EOffOn)_SelectSlides[_SelectSlideKaraokeEffect].Selection; + } CConfig.SaveConfig(); CBackgroundMusic.SetMusicSource(CConfig.Config.Sound.BackgroundMusicSource);