From 16f4d790deef7ec42b988187c104a3c6ca43facf Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 17:36:22 +0100 Subject: [PATCH 01/13] get SongInfo in parallel --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 138df11f..42e1e63a 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -628,7 +628,7 @@ namespace Vocaluxe.Base.Server { List songs = CSongs.Songs; return (from s in songs - select _GetSongInfo(s, false)).ToArray(); + select _GetSongInfo(s, false)).AsParallel().ToArray(); } public static string GetMp3Path(int songId) From 871a7227fc448fd288a6365b9ef2cae6f61af102 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 17:42:30 +0100 Subject: [PATCH 02/13] Webserver: GetAllSongs() uses now a cache --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 42e1e63a..6bce25f9 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -624,11 +624,18 @@ namespace Vocaluxe.Base.Server return _GetSongInfo(song, true); } + + private static SSongInfo[] songInfoCache = null; public static SSongInfo[] GetAllSongs() { - List songs = CSongs.Songs; - return (from s in songs + if (songInfoCache == null) + { + List songs = CSongs.Songs; + songInfoCache = (from s in songs select _GetSongInfo(s, false)).AsParallel().ToArray(); + } + + return songInfoCache; } public static string GetMp3Path(int songId) From df311b2916d3aba02d0749cc8cdfbc4811de50c5 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 17:58:58 +0100 Subject: [PATCH 03/13] Webserver: Added a threshold to the config which decides at how many song we stop sending covers on get-all-songs requests. --- Vocaluxe/Base/CConfig.cs | 3 +++ Vocaluxe/Base/Server/CVocaluxeServer.cs | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 6409815a..ea133582 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -163,6 +163,7 @@ namespace Vocaluxe.Base [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn ServerActive; [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn ServerEncryption; [DefaultValue(3000)] public int ServerPort; + [DefaultValue(70)] public int SongCountCoverThreshold; } #pragma warning restore 649 // ReSharper restore UnassignedField.Global @@ -495,6 +496,8 @@ namespace Vocaluxe.Base return "Server Encryption On/Off: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))); case "ServerPort": return "Server Port (default: 3000) [1..65535]"; + case "SongCountCoverThreshold": + return "Threshold of songs for that covers will not longer be included in get-all-songs-requests (e.g. song list) (default: 70) [-1..65535] -1 => always deliver covers"; case "Stretch": return "Stretch view to full window size: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))); default: diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 6bce25f9..20e0cf20 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -628,11 +628,13 @@ namespace Vocaluxe.Base.Server private static SSongInfo[] songInfoCache = null; public static SSongInfo[] GetAllSongs() { + bool sendCovers = CConfig.Config.Server.SongCountCoverThreshold == -1 || CConfig.Config.Server.SongCountCoverThreshold > CSongs.Songs.Count; + if (songInfoCache == null) { List songs = CSongs.Songs; songInfoCache = (from s in songs - select _GetSongInfo(s, false)).AsParallel().ToArray(); + select _GetSongInfo(s, sendCovers)).AsParallel().ToArray(); } return songInfoCache; From ef3a7e0722cc1afd64035bb45bf304ca79af8c6a Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 17:59:42 +0100 Subject: [PATCH 04/13] changed naming of a variable to be consistent to the naming rules --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 20e0cf20..7eeb2526 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -625,19 +625,19 @@ namespace Vocaluxe.Base.Server } - private static SSongInfo[] songInfoCache = null; + private static SSongInfo[] _SongInfoCache = null; public static SSongInfo[] GetAllSongs() { bool sendCovers = CConfig.Config.Server.SongCountCoverThreshold == -1 || CConfig.Config.Server.SongCountCoverThreshold > CSongs.Songs.Count; - if (songInfoCache == null) + if (_SongInfoCache == null) { List songs = CSongs.Songs; - songInfoCache = (from s in songs + _SongInfoCache = (from s in songs select _GetSongInfo(s, sendCovers)).AsParallel().ToArray(); } - return songInfoCache; + return _SongInfoCache; } public static string GetMp3Path(int songId) From 8da297d1be577ece1a1158df0ce0f1888166db0e Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 18:39:14 +0100 Subject: [PATCH 05/13] Added optional covers to SongList --- Vocaluxe/Website/js/main.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Website/js/main.js b/Vocaluxe/Website/js/main.js index 39b38b49..ed8d3e5a 100644 --- a/Vocaluxe/Website/js/main.js +++ b/Vocaluxe/Website/js/main.js @@ -1143,9 +1143,26 @@ } for (var id in allSongsCache) { - $('
  • '/*+' '*/ + '

    ' + allSongsCache[id].Artist + '

    ' + allSongsCache[id].Title + '

  • ') + var coverString = ""; + var currentCoverId = ""; + + if (allSongsCache[id].Cover !== null) { + if (allSongsCache[id].Cover.base64Data !== "") { + coverString = ''; + } + else if (allSongsCache[id].Cover.imageId !== "") { + currentCoverId = "songListCoverId_" + id; + coverString = ''; + } + } + + $('
  • ' + coverString + '

    ' + allSongsCache[id].Artist + '

    ' + allSongsCache[id].Title + '

  • ') .appendTo('#selectSongList') .click(handleSelectSongLineClick); + + if (currentCoverId !== "") { + imageLoader.delayedImageLoad($("#" + currentCoverId)[0], allSongsCache[id].Cover.imageId, "img/noCover.png"); + } } $('#selectSongList').listview('refresh'); From 7ff0ef52d7124ace1cd91c9e356e0042ced599d5 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 20 Dec 2015 18:41:06 +0100 Subject: [PATCH 06/13] Deliver noCover if there is no cover and includeCover==true --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 7eeb2526..477713b6 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -667,7 +667,17 @@ namespace Vocaluxe.Base.Server result.IsDuet = song.IsDuet; result.SongId = song.ID; if (includeCover) - result.Cover = new CBase64Image(_CreateDelayedImage(song.Folder + "\\" + song.CoverFileName)); + { + if (song.CoverFileName == "") + { + result.Cover = new CBase64Image(_CreateDelayedImage("Website\\img\\noCover.png")); + } + else + { + result.Cover = new CBase64Image(_CreateDelayedImage(song.Folder + "\\" + song.CoverFileName)); + } + } + } return result; } From b5fdc114e7084fb18126d85fa1dd5f7701b2be32 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Wed, 30 Dec 2015 09:48:01 +0100 Subject: [PATCH 07/13] Updated hipapi version to hidapi-0.7.0-104-gd17db57 --- Vocaluxe/Vocaluxe.csproj | 8 ++++---- Vocaluxe/packages.config | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 6c0011d3..11962ccc 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -540,26 +540,26 @@ powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\Assemb - + - + - + - + \ No newline at end of file diff --git a/Vocaluxe/packages.config b/Vocaluxe/packages.config index fe9f7814..53a46b10 100644 --- a/Vocaluxe/packages.config +++ b/Vocaluxe/packages.config @@ -1,13 +1,13 @@  - + - + From 3b545454575032875794251c10ddabc6d6a65870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 15 Jan 2016 20:55:32 +0100 Subject: [PATCH 08/13] Fixes #189 - Number of total songs in category --- Vocaluxe/Screens/CScreenSong.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 51aca1ce..5d49a606 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -684,7 +684,7 @@ namespace Vocaluxe.Screens { int song = _SongMenu.GetSelectedSongNr(); if (song >= 0 && song < CSongs.VisibleSongs.Count) - selectionText = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title + " ( "+(song+1)+" / "+CSongs.NumAllSongs+" )"; + selectionText = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title + " ( "+(song+1)+" / "+CSongs.NumSongsVisible+" )"; } else { From 750b93d6d56466e52486ae166dbd22df22c91bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 15 Jan 2016 21:01:40 +0100 Subject: [PATCH 09/13] Fixes #188 (Preview-Start was ignored) --- VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index ca1f9323..21e66baf 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -415,7 +415,7 @@ namespace VocaluxeLib.Menu.SongMenu if (song == null) return; - CBase.BackgroundMusic.LoadPreview(song); + CBase.BackgroundMusic.LoadPreview(song, song.Preview.StartTime); } protected void _ResetPreview(bool playBGagain = true) From fd40aaf840080c0be0baa1135c1b7eae852c0088 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sat, 16 Jan 2016 15:18:40 +0100 Subject: [PATCH 10/13] Updated hidapi package to version 1.0.3 (hidapi-0.7.0-110-g38681c7) --- Vocaluxe/Vocaluxe.csproj | 8 ++++---- Vocaluxe/packages.config | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 11962ccc..00fca9f4 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -540,26 +540,26 @@ powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\Assemb - + - + - + - + \ No newline at end of file diff --git a/Vocaluxe/packages.config b/Vocaluxe/packages.config index 53a46b10..491119d1 100644 --- a/Vocaluxe/packages.config +++ b/Vocaluxe/packages.config @@ -1,13 +1,13 @@  - + - + From d6fcd7b58c10057f1e461510c858d8d01ecaae30 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 31 Jan 2016 17:00:48 +0100 Subject: [PATCH 11/13] Fix: previewStart is sometimes ignored (closes #188) --- Vocaluxe/Base/CBackgroundMusic.cs | 44 ++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index ea7e9364..067c5217 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Threading.Tasks; using VocaluxeLib; using VocaluxeLib.Songs; using VocaluxeLib.Draw; @@ -47,6 +48,8 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Disabled; + private static Task PreviewStartHelperTask; + public static bool VideoEnabled { get { return _CurPlayer.VideoEnabled; } @@ -249,6 +252,13 @@ namespace Vocaluxe.Base public static void Update() { + if (PreviewStartHelperTask != null && _PreviewPlayer.Length > 0) + { + PreviewStartHelperTask.RunSynchronously(TaskScheduler.FromCurrentSynchronizationContext()); + PreviewStartHelperTask.Dispose(); + PreviewStartHelperTask = null; + } + if (!IsPlaying) return; @@ -299,31 +309,41 @@ namespace Vocaluxe.Base bool songChanged = _CurPlayer.SongID != song.ID; _PreviewPlayer.Load(song); + //Change song position only if song is changed or near to end if (songChanged || _CurPlayer.Position + 30 < _CurPlayer.Length) { - float length = _PreviewPlayer.Length; - if (length < 1) - length = 30; // If length is unknow or invalid assume a length of 30s + PreviewStartHelperTask = new Task(() => + { + float length = _PreviewPlayer.Length; + if (length < 1) + length = 30; // If length is unknow or invalid assume a length of 30s - if (start < 0) - start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime; - if (start > length - 5f) - start = Math.Max(0f, Math.Min(length / 4f, length - 5f)); - if (start >= 0.5f) - start -= 0.5f; + if (start < 0) + start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime; + if (start > length - 5f) + start = Math.Max(0f, Math.Min(length / 4f, length - 5f)); + if (start >= 0.5f) + start -= 0.5f; - _PreviewPlayer.Position = start; + _PreviewPlayer.Position = start; + Play(); + }); + _CurPlayer = _PreviewPlayer; } else { + PreviewStartHelperTask.Dispose(); + PreviewStartHelperTask = null; _PreviewPlayer.Position = _CurPlayer.Position; + _CurPlayer = _PreviewPlayer; + Play(); } - _CurPlayer = _PreviewPlayer; + - Play(); + } public static void StopPreview() From 6dc57285543868535c0c8f6289f02fc732626500 Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 31 Jan 2016 17:06:17 +0100 Subject: [PATCH 12/13] Added a timeout-fallback to PreviewStartHelper for the case the length can't be determinated --- Vocaluxe/Base/CBackgroundMusic.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 067c5217..4537b419 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -49,6 +49,8 @@ namespace Vocaluxe.Base private static bool _Disabled; private static Task PreviewStartHelperTask; + private static int PreviewStartWaitCounter; + private const int PreviewStartWaitMaxTries = 10; public static bool VideoEnabled { @@ -252,11 +254,12 @@ namespace Vocaluxe.Base public static void Update() { - if (PreviewStartHelperTask != null && _PreviewPlayer.Length > 0) + if (PreviewStartHelperTask != null && ( _PreviewPlayer.Length > 0 || PreviewStartWaitCounter++ >= PreviewStartWaitMaxTries)) { PreviewStartHelperTask.RunSynchronously(TaskScheduler.FromCurrentSynchronizationContext()); PreviewStartHelperTask.Dispose(); PreviewStartHelperTask = null; + PreviewStartWaitCounter = 0; } if (!IsPlaying) From 35ced0dcfb4af6edb73ef54dfd15d2465d29d07e Mon Sep 17 00:00:00 2001 From: lukeIam <2lukeiam@gmail.com> Date: Sun, 31 Jan 2016 17:08:51 +0100 Subject: [PATCH 13/13] Renamed new variables to be consistent with the naming rules --- Vocaluxe/Base/CBackgroundMusic.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 4537b419..65165cf4 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -48,9 +48,9 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Disabled; - private static Task PreviewStartHelperTask; - private static int PreviewStartWaitCounter; - private const int PreviewStartWaitMaxTries = 10; + private static Task _PreviewStartHelperTask; + private static int _PreviewStartWaitCounter; + private const int _PreviewStartWaitMaxTries = 10; public static bool VideoEnabled { @@ -254,12 +254,12 @@ namespace Vocaluxe.Base public static void Update() { - if (PreviewStartHelperTask != null && ( _PreviewPlayer.Length > 0 || PreviewStartWaitCounter++ >= PreviewStartWaitMaxTries)) + if (_PreviewStartHelperTask != null && ( _PreviewPlayer.Length > 0 || _PreviewStartWaitCounter++ >= _PreviewStartWaitMaxTries)) { - PreviewStartHelperTask.RunSynchronously(TaskScheduler.FromCurrentSynchronizationContext()); - PreviewStartHelperTask.Dispose(); - PreviewStartHelperTask = null; - PreviewStartWaitCounter = 0; + _PreviewStartHelperTask.RunSynchronously(TaskScheduler.FromCurrentSynchronizationContext()); + _PreviewStartHelperTask.Dispose(); + _PreviewStartHelperTask = null; + _PreviewStartWaitCounter = 0; } if (!IsPlaying) @@ -317,7 +317,7 @@ namespace Vocaluxe.Base //Change song position only if song is changed or near to end if (songChanged || _CurPlayer.Position + 30 < _CurPlayer.Length) { - PreviewStartHelperTask = new Task(() => + _PreviewStartHelperTask = new Task(() => { float length = _PreviewPlayer.Length; if (length < 1) @@ -337,8 +337,8 @@ namespace Vocaluxe.Base } else { - PreviewStartHelperTask.Dispose(); - PreviewStartHelperTask = null; + _PreviewStartHelperTask.Dispose(); + _PreviewStartHelperTask = null; _PreviewPlayer.Position = _CurPlayer.Position; _CurPlayer = _PreviewPlayer; Play();