Cover loading refactored
Fixed song loading check Correct use of CoverTextureBig
This commit is contained in:
1 parent
9761c115b2
commit
5ff1677563
7 files changed
+114
-184
No files matched your search
@@ -324,7 +324,7 @@ namespace Vocaluxe.Base
|
||||
CInput.Update();
|
||||
|
||||
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing)
|
||||
CSongs.LoadCover(30L, 1);
|
||||
CSongs.LoadCover();
|
||||
|
||||
if (CSettings.GameState != EGameState.EditTheme)
|
||||
{
|
||||
|
||||
@@ -607,15 +607,20 @@ namespace Vocaluxe.Base
|
||||
return null;
|
||||
|
||||
CSong song = CSongs.VisibleSongs[VisibleIndex];
|
||||
if (song == null)
|
||||
return null;
|
||||
//Flamefire: Why copy the song-instance??? Cover and stuff will be loaded twice!
|
||||
//And for unknown reason causes no-big-cover bug if covers are not loaded on startup
|
||||
return song;
|
||||
//if (song == null)
|
||||
// return null;
|
||||
|
||||
return new CSong(song);
|
||||
//return new CSong(song);
|
||||
}
|
||||
|
||||
public CSong GetSongByID(int SongID)
|
||||
{
|
||||
return new CSong(CSongs.GetSong(SongID));
|
||||
//Flamefire: Why copy?
|
||||
//return new CSong(CSongs.GetSong(SongID));
|
||||
return CSongs.GetSong(SongID);
|
||||
}
|
||||
|
||||
public CSong[] GetSongs()
|
||||
|
||||
+19
-76
@@ -55,7 +55,7 @@ namespace Vocaluxe.Base
|
||||
private static ESongSorting _SongSorting = CConfig.SongSorting;
|
||||
private static bool _ShowDuetSongs = true;
|
||||
|
||||
private static Thread _CoverLoaderThread = new Thread(new ThreadStart(_LoadCover));
|
||||
private static Thread _CoverLoaderThread = null;
|
||||
|
||||
public static string SearchFilter
|
||||
{
|
||||
@@ -197,28 +197,26 @@ namespace Vocaluxe.Base
|
||||
if (!_SongsLoaded)
|
||||
return;
|
||||
|
||||
if (SongIndex <= _Songs.Count)
|
||||
if (SongIndex < _Songs.Count)
|
||||
{
|
||||
_Songs[SongIndex].CoverTextureSmall = Texture;
|
||||
//_Songs[SongIndex].CoverSmallLoaded = true;
|
||||
if (SongIndex == _Songs.Count - 1)
|
||||
_CoverLoaded = true;
|
||||
}
|
||||
|
||||
if (SongIndex == _Songs.Count - 1)
|
||||
_CoverLoaded = true;
|
||||
}
|
||||
public static void SetCoverBig(int SongIndex, STexture Texture)
|
||||
{
|
||||
if (!_SongsLoaded)
|
||||
return;
|
||||
|
||||
if (SongIndex <= _Songs.Count)
|
||||
if (SongIndex < _Songs.Count)
|
||||
{
|
||||
_Songs[SongIndex].CoverTextureBig = Texture;
|
||||
_Songs[SongIndex].CoverBigLoaded = true;
|
||||
if (SongIndex == _Songs.Count - 1)
|
||||
_CoverLoaded = true;
|
||||
}
|
||||
|
||||
if (SongIndex == _Songs.Count - 1)
|
||||
_CoverLoaded = true;
|
||||
}
|
||||
|
||||
public static string GetCurrentCategoryName()
|
||||
@@ -1027,6 +1025,9 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
Song.ID = _Songs.Count;
|
||||
_Songs.Add(Song);
|
||||
//Workaround to load notes if they are not loaded with the covers as there is no seperate progress indicator
|
||||
if (CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
Song.ReadNotes();
|
||||
}
|
||||
}
|
||||
CLog.StopBenchmark(2, "Read TXTs");
|
||||
@@ -1037,100 +1038,42 @@ namespace Vocaluxe.Base
|
||||
Category = -1;
|
||||
_SongsLoaded = true;
|
||||
|
||||
if (CConfig.Renderer != ERenderer.TR_CONFIG_SOFTWARE && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
{
|
||||
CLog.StartBenchmark(2, "Load Covers/Notes");
|
||||
for (int i = 0; i < _Songs.Count; i++)
|
||||
{
|
||||
CSong song = _Songs[i];
|
||||
|
||||
song.ReadNotes();
|
||||
STexture texture = song.CoverTextureSmall;
|
||||
song.CoverTextureBig = texture;
|
||||
_CoverLoadIndex++;
|
||||
|
||||
if (i % 100 == 0)
|
||||
{
|
||||
CDataBase.CommitCovers();
|
||||
GC.Collect();
|
||||
}
|
||||
}
|
||||
|
||||
_CoverLoaded = true;
|
||||
CDataBase.CommitCovers();
|
||||
_LoadCover();
|
||||
CLog.StopBenchmark(2, "Load Covers/Notes");
|
||||
}
|
||||
CLog.StopBenchmark(1, "Load Songs ");
|
||||
GC.Collect();
|
||||
}
|
||||
|
||||
public static void LoadCover(long WaitTime, int NumLoads)
|
||||
public static void LoadCover()
|
||||
{
|
||||
if (CConfig.Renderer == ERenderer.TR_CONFIG_SOFTWARE)
|
||||
return; //should be removed as soon as the other renderer are ready for queque
|
||||
|
||||
if (!SongsLoaded)
|
||||
return;
|
||||
|
||||
if (CoverLoaded)
|
||||
if (!SongsLoaded || CoverLoaded)
|
||||
return;
|
||||
|
||||
if (_CoverLoaderThread.ThreadState == System.Threading.ThreadState.Unstarted)
|
||||
if (_CoverLoaderThread == null)
|
||||
{
|
||||
_CoverLoaderThread = new Thread(new ThreadStart(_LoadCover));
|
||||
_CoverLoaderThread.Name = "CoverLoader";
|
||||
_CoverLoaderThread.Priority = ThreadPriority.BelowNormal;
|
||||
_CoverLoaderThread.IsBackground = true;
|
||||
_CoverLoaderThread.Start();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
||||
if (!_CoverLoadTimer.IsRunning)
|
||||
{
|
||||
_CoverLoadTimer.Reset();
|
||||
_CoverLoadTimer.Start();
|
||||
}
|
||||
|
||||
STexture texture = new STexture(-1);
|
||||
if (_CoverLoadTimer.ElapsedMilliseconds >= WaitTime)
|
||||
{
|
||||
for (int i = 0; i < NumLoads; i++)
|
||||
{
|
||||
CSong song = new CSong();
|
||||
int n = GetNextSongWithoutCover(ref song);
|
||||
|
||||
if (n < 0)
|
||||
return;
|
||||
|
||||
song.ReadNotes();
|
||||
texture = song.CoverTextureSmall;
|
||||
|
||||
SetCoverSmall(n, texture);
|
||||
SetCoverBig(n, texture);
|
||||
|
||||
if (CoverLoaded)
|
||||
CDataBase.CommitCovers();
|
||||
|
||||
_CoverLoadTimer.Reset();
|
||||
_CoverLoadTimer.Start();
|
||||
}
|
||||
}
|
||||
* */
|
||||
}
|
||||
|
||||
private static void _LoadCover()
|
||||
{
|
||||
for (int i = 0; i < _Songs.Count; i++)
|
||||
foreach(CSong song in _Songs)
|
||||
{
|
||||
CSong song = _Songs[i];
|
||||
|
||||
song.ReadNotes();
|
||||
STexture texture = song.CoverTextureSmall;
|
||||
song.CoverTextureBig = texture;
|
||||
_CoverLoadIndex++;
|
||||
song.LoadSmallCover();
|
||||
}
|
||||
|
||||
GC.Collect();
|
||||
_CoverLoaded = true;
|
||||
CDataBase.CommitCovers();
|
||||
}
|
||||
|
||||
@@ -165,8 +165,7 @@ namespace Vocaluxe.Screens
|
||||
else
|
||||
_timer.Start();
|
||||
|
||||
bool next = ((CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART && CSongs.CoverLoaded) ||
|
||||
CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART);
|
||||
bool next = (CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART || CSongs.CoverLoaded);
|
||||
|
||||
if ((_IntroOutPlayed || _SkipIntro) && next && CSettings.GameState != EGameState.EditTheme && CSongs.SongsLoaded)
|
||||
{
|
||||
@@ -244,23 +243,17 @@ namespace Vocaluxe.Screens
|
||||
{
|
||||
_CurrentIntroVideoNr = 0;
|
||||
_Intros[0].Start();
|
||||
}
|
||||
|
||||
if (_CurrentIntroVideoNr == 0 && _Intros[0].IsFinished && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
}else if (_CurrentIntroVideoNr == 0 && _Intros[0].IsFinished && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
{
|
||||
_CurrentIntroVideoNr = 1;
|
||||
_Intros[1].Loop = true;
|
||||
_Intros[1].Start();
|
||||
}
|
||||
|
||||
if ((_CurrentIntroVideoNr == 1 && CSongs.CoverLoaded) ||
|
||||
(_CurrentIntroVideoNr == 0 && _Intros[0].IsFinished && CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART))
|
||||
}else if ((_CurrentIntroVideoNr == 1 && CSongs.CoverLoaded) ||
|
||||
(_CurrentIntroVideoNr == 0 && _Intros[0].IsFinished))
|
||||
{
|
||||
_CurrentIntroVideoNr = 2;
|
||||
_Intros[2].Start();
|
||||
}
|
||||
|
||||
if (_CurrentIntroVideoNr == 2 && _Intros[2].IsFinished)
|
||||
}else if (_CurrentIntroVideoNr == 2 && _Intros[2].IsFinished)
|
||||
_IntroOutPlayed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
CConfig.PlayerInfo = (EPlayerInfo)mode;
|
||||
CConfig.SaveConfig();
|
||||
SetVisuability();
|
||||
SetVisibility();
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
@@ -432,7 +432,7 @@ namespace Vocaluxe.Screens
|
||||
{
|
||||
Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Aspect = EAspect.Crop;
|
||||
}
|
||||
SetVisuability();
|
||||
SetVisibility();
|
||||
|
||||
UpdateAvatars();
|
||||
UpdateNames();
|
||||
@@ -592,7 +592,7 @@ namespace Vocaluxe.Screens
|
||||
return;
|
||||
}
|
||||
|
||||
if (!song.CoverSmallLoaded)
|
||||
if (!song.NotesLoaded)
|
||||
song.ReadNotes();
|
||||
|
||||
string songname = song.Artist + " - " + song.Title;
|
||||
@@ -911,7 +911,7 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
}
|
||||
|
||||
private void SetVisuability()
|
||||
private void SetVisibility()
|
||||
{
|
||||
Statics[htStatics(StaticLyricsDuet)].Visible = false;
|
||||
Statics[htStatics(StaticLyricHelper)].Visible = false;
|
||||
|
||||
@@ -69,7 +69,8 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
|
||||
public class CSong
|
||||
{
|
||||
private bool _CoverLoaded = false;
|
||||
private bool _CoverSmallLoaded = false;
|
||||
private bool _CoverBigLoaded = false;
|
||||
private bool _NotesLoaded = false;
|
||||
private STexture _CoverTextureSmall = new STexture(-1);
|
||||
private STexture _CoverTextureBig = new STexture(-1);
|
||||
@@ -96,34 +97,24 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
|
||||
public bool CoverSmallLoaded
|
||||
{
|
||||
get { return _CoverLoaded; }
|
||||
get { return _CoverSmallLoaded; }
|
||||
}
|
||||
public bool CoverBigLoaded
|
||||
{
|
||||
get { return _CoverBigLoaded; }
|
||||
}
|
||||
public bool NotesLoaded
|
||||
{
|
||||
get { return _NotesLoaded; }
|
||||
}
|
||||
|
||||
public bool CoverBigLoaded = false;
|
||||
|
||||
public STexture CoverTextureSmall
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!_CoverLoaded)
|
||||
if (!_CoverSmallLoaded)
|
||||
{
|
||||
//Why in hell would you load the notes to get the cover???
|
||||
//if (!_NotesLoaded)
|
||||
// this.ReadNotes();
|
||||
|
||||
if (this.CoverFileName != String.Empty)
|
||||
{
|
||||
if (!CBase.Base.DataBase.GetCover(Path.Combine(this.Folder, this.CoverFileName), ref _CoverTextureSmall, CBase.Base.Config.GetCoverSize()))
|
||||
_CoverTextureSmall = CBase.Base.Cover.GetNoCover();
|
||||
}
|
||||
else
|
||||
_CoverTextureSmall = CBase.Base.Cover.GetNoCover();
|
||||
|
||||
_CoverLoaded = true;
|
||||
LoadSmallCover();
|
||||
}
|
||||
return _CoverTextureSmall;
|
||||
}
|
||||
@@ -131,14 +122,23 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
set
|
||||
{
|
||||
_CoverTextureSmall = value;
|
||||
_CoverLoaded = true;
|
||||
_CoverSmallLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
public STexture CoverTextureBig
|
||||
{
|
||||
get { return _CoverTextureBig; }
|
||||
set { _CoverTextureBig = value; }
|
||||
get
|
||||
{
|
||||
if (_CoverBigLoaded)
|
||||
return _CoverTextureBig;
|
||||
else
|
||||
return _CoverTextureSmall;
|
||||
}
|
||||
set {
|
||||
_CoverTextureBig = value;
|
||||
_CoverBigLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
public string Title = String.Empty;
|
||||
@@ -238,8 +238,8 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
this.VideoFileName = song.VideoFileName;
|
||||
|
||||
this.VideoAspect = song.VideoAspect;
|
||||
this._CoverLoaded = song._CoverLoaded;
|
||||
this.CoverBigLoaded = song.CoverBigLoaded;
|
||||
this._CoverSmallLoaded = song._CoverSmallLoaded;
|
||||
this._CoverBigLoaded = song._CoverBigLoaded;
|
||||
this._NotesLoaded = song._NotesLoaded;
|
||||
|
||||
this.Artist = song.Artist;
|
||||
@@ -604,8 +604,12 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
{
|
||||
return ReadNotes(Path.Combine(this.Folder, this.FileName));
|
||||
}
|
||||
public bool ReadNotes(string FilePath)
|
||||
public bool ReadNotes(string FilePath, bool forceReload=false)
|
||||
{
|
||||
//Skip loading if already done and no reload is forced
|
||||
if (_NotesLoaded && !forceReload)
|
||||
return true;
|
||||
|
||||
if (!File.Exists(FilePath))
|
||||
{
|
||||
CBase.Base.Log.LogError("Error loading song. The file does not exist: " + FilePath);
|
||||
@@ -809,6 +813,21 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
}
|
||||
}
|
||||
|
||||
public void LoadSmallCover()
|
||||
{
|
||||
if (_CoverSmallLoaded)
|
||||
return;
|
||||
if (this.CoverFileName != String.Empty)
|
||||
{
|
||||
if (!CBase.Base.DataBase.GetCover(Path.Combine(this.Folder, this.CoverFileName), ref _CoverTextureSmall, CBase.Base.Config.GetCoverSize()))
|
||||
_CoverTextureSmall = CBase.Base.Cover.GetNoCover();
|
||||
}
|
||||
else
|
||||
_CoverTextureSmall = CBase.Base.Cover.GetNoCover();
|
||||
|
||||
_CoverSmallLoaded = true;
|
||||
}
|
||||
|
||||
private void CheckFiles()
|
||||
{
|
||||
CHelper Helper = new CHelper();
|
||||
@@ -861,24 +880,12 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
public int length;
|
||||
}
|
||||
|
||||
private void FindRefrain()
|
||||
private List<Series> GetSeries()
|
||||
{
|
||||
if (this.IsDuet)
|
||||
{
|
||||
this.Medley.Source = EMedleySource.None;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Medley.Source == EMedleySource.Tag)
|
||||
return;
|
||||
|
||||
if (!this.CalculateMedley)
|
||||
return;
|
||||
|
||||
CLines lines = this.Notes.GetLines(0);
|
||||
|
||||
if (lines.LineCount == 0)
|
||||
return;
|
||||
return null;
|
||||
|
||||
// build sentences list
|
||||
List<string> sentences = new List<string>();
|
||||
@@ -921,6 +928,26 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
}
|
||||
}
|
||||
}
|
||||
return series;
|
||||
}
|
||||
|
||||
private void FindRefrain()
|
||||
{
|
||||
if (this.IsDuet)
|
||||
{
|
||||
this.Medley.Source = EMedleySource.None;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Medley.Source == EMedleySource.Tag)
|
||||
return;
|
||||
|
||||
if (!this.CalculateMedley)
|
||||
return;
|
||||
|
||||
List<Series> series = GetSeries();
|
||||
if (series == null)
|
||||
return;
|
||||
|
||||
// search for longest series
|
||||
int longest = 0;
|
||||
@@ -930,6 +957,8 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
longest = i;
|
||||
}
|
||||
|
||||
CLines lines = this.Notes.GetLines(0);
|
||||
|
||||
// set medley vars
|
||||
if (series.Count > 0 && series[longest].length > CBase.Base.Settings.GetMedleyMinSeriesLength())
|
||||
{
|
||||
@@ -972,52 +1001,11 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
}
|
||||
|
||||
private void FindShortEnd(){
|
||||
CLines lines = this.Notes.GetLines(0);
|
||||
|
||||
if (lines.LineCount == 0)
|
||||
List<Series> series = GetSeries();
|
||||
if (series == null)
|
||||
return;
|
||||
|
||||
// build sentences list
|
||||
List<string> sentences = new List<string>();
|
||||
foreach (CLine line in lines.Line)
|
||||
{
|
||||
if (line.Points != 0)
|
||||
sentences.Add(line.Lyrics);
|
||||
else
|
||||
sentences.Add(String.Empty);
|
||||
}
|
||||
|
||||
// find equal sentences series
|
||||
List<Series> series = new List<Series>();
|
||||
for (int i = 0; i < lines.LineCount - 1; i++)
|
||||
{
|
||||
for (int j = i + 1; j < lines.LineCount; j++)
|
||||
{
|
||||
if (sentences[i] == sentences[j] && sentences[i] != String.Empty)
|
||||
{
|
||||
Series tempSeries = new Series();
|
||||
tempSeries.start = i;
|
||||
tempSeries.end = i;
|
||||
|
||||
int max = 0;
|
||||
if (j + j - i - 1 > lines.LineCount - 1)
|
||||
max = lines.LineCount - 1 - j;
|
||||
else
|
||||
max = j - i - 1;
|
||||
|
||||
for (int k = 1; k <= max; k++)
|
||||
{
|
||||
if (sentences[i + k] == sentences[j + k] && sentences[i + k] != String.Empty)
|
||||
tempSeries.end = i + k;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
tempSeries.length = tempSeries.end - tempSeries.start + 1;
|
||||
series.Add(tempSeries);
|
||||
}
|
||||
}
|
||||
}
|
||||
CLines lines = this.Notes.GetLines(0);
|
||||
|
||||
//Calculate length of singing
|
||||
int stop = (lines.Line[lines.Line.Length - 1].LastNoteBeat - lines.Line[0].FirstNoteBeat) / 2 + lines.Line[0].StartBeat;
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
int actcat = _PreviewSelected;
|
||||
if ((CBase.Base.Songs.GetNumCategories() > 0) && (actcat < 0))
|
||||
{
|
||||
_CoverBig.Texture = CBase.Base.Songs.GetCategory(0).CoverTextureSmall;
|
||||
_CoverBig.Texture = CBase.Base.Songs.GetCategory(0).CoverTextureBig;
|
||||
_Artist.Text = CBase.Base.Songs.GetCategory(0).Name;
|
||||
_Title.Text = String.Empty;
|
||||
_SongLength.Text = String.Empty;
|
||||
@@ -456,7 +456,7 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
{
|
||||
CSong song = CBase.Base.Songs.GetVisibleSong(actsong);
|
||||
|
||||
_CoverBig.Texture = song.CoverTextureSmall;
|
||||
_CoverBig.Texture = song.CoverTextureBig;
|
||||
_Artist.Text = song.Artist;
|
||||
_Title.Text = song.Title;
|
||||
_DuetIcon.Visible = song.IsDuet;
|
||||
@@ -479,7 +479,7 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
int actcat = _PreviewSelected;
|
||||
if ((CBase.Base.Songs.GetNumCategories() > actcat) && (actcat >= 0))
|
||||
{
|
||||
_CoverBig.Texture = CBase.Base.Songs.GetCategory(actcat).CoverTextureSmall;
|
||||
_CoverBig.Texture = CBase.Base.Songs.GetCategory(actcat).CoverTextureBig;
|
||||
_Artist.Text = CBase.Base.Songs.GetCategory(actcat).Name;
|
||||
|
||||
int num = CBase.Base.Songs.NumSongsInCategory(actcat);
|
||||
@@ -499,8 +499,9 @@ namespace Vocaluxe.Menu.SongMenu
|
||||
_TextBG.Draw();
|
||||
|
||||
_CoverBig.Draw(1f, EAspect.Crop);
|
||||
if (_vidtex.color.A < 1)
|
||||
_CoverBig.Draw(1f, EAspect.Crop);
|
||||
//Flamefire: Why draw twice?
|
||||
//if (_vidtex.color.A < 1)
|
||||
// _CoverBig.Draw(1f, EAspect.Crop);
|
||||
|
||||
if (_vidtex.index != -1 && _Video != -1)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user