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);