created medley branch,

loading medley and preview tags
This commit is contained in:
Alexander Eckart committed 2012-03-11 14:28:32 +01:00
1 parent d13415f666
commit 1269af7897
3 files changed
+142 -11

No files matched your search

+3
View File
@@ -111,6 +111,9 @@ namespace Vocaluxe.Base
public const float LyricHelperMoveTime = 1.5f;
public const float LyricHelperMinTime = 0.2f;
public const float DefaultMedleyFadeInTime = 8f;
public const float DefaultMedleyFadeOutTIme = 2f;
public static bool TabNavigation = false;
public const float BackgroundMusicFadeTime = 0.5f;
+131 -9
View File
@@ -13,13 +13,38 @@ namespace Vocaluxe.Lib.Song
[Flags]
enum EHeaderFlags
{
Title,
Artist,
MP3,
BPM,
PreviewStart,
MedleyStartBeat,
MedleyEndBeat
Title = 1,
Artist = 2,
MP3 = 4,
BPM = 8,
PreviewStart = 16,
MedleyStartBeat = 32,
MedleyEndBeat = 64
}
enum EMedleySource
{
None,
Calculated,
Tag
}
struct SMedley
{
public EMedleySource Source;
public int StartBeat;
public int EndBeat;
public float FadeInTime;
public float FadeOutTime;
public SMedley(int dummy)
{
Source = EMedleySource.None;
StartBeat = 0;
EndBeat = 0;
FadeInTime = 0f;
FadeOutTime = 0f;
}
}
class CSong
@@ -28,6 +53,11 @@ namespace Vocaluxe.Lib.Song
private STexture _CoverTextureSmall = new STexture(-1);
private STexture _CoverTextureBig = new STexture(-1);
private SMedley Medley = new SMedley(0);
public bool CalculateMedley = true;
public float PreviewStart = 0f;
public Encoding Encoding = Encoding.Default;
public string Folder = String.Empty;
public string FolderName = String.Empty;
@@ -305,6 +335,25 @@ namespace Vocaluxe.Lib.Song
if (CHelper.TryParse(Value, out this.Finish))
this.Finish /= 1000f;
break;
case "PREVIEWSTART":
if (CHelper.TryParse(Value, out this.PreviewStart))
if (this.PreviewStart < 0f)
this.PreviewStart = 0f;
else
HeaderFlags |= EHeaderFlags.PreviewStart;
break;
case "MEDLEYSTARTBEAT":
if (int.TryParse(Value, out this.Medley.StartBeat))
HeaderFlags |= EHeaderFlags.MedleyStartBeat;
break;
case "MEDLEYENDBEAT":
if (int.TryParse(Value, out this.Medley.EndBeat))
HeaderFlags |= EHeaderFlags.MedleyEndBeat;
break;
case "CALCMEDLEY":
if (Value.ToUpper() == "OFF")
this.CalculateMedley = false;
break;
default:
;
break;
@@ -320,13 +369,64 @@ namespace Vocaluxe.Lib.Song
}
} //end of while
if (HeaderFlags != (EHeaderFlags.Title | EHeaderFlags.Artist | EHeaderFlags.MP3 | EHeaderFlags.BPM))
if ((HeaderFlags & EHeaderFlags.Title) == 0)
{
CLog.LogError("Title tag missing: " + FilePath);
return false;
}
if ((HeaderFlags & EHeaderFlags.Artist) == 0)
{
CLog.LogError("Artist tag missing: " + FilePath);
return false;
}
if ((HeaderFlags & EHeaderFlags.MP3) == 0)
{
CLog.LogError("MP3 tag missing: " + FilePath);
return false;
}
if ((HeaderFlags & EHeaderFlags.BPM) == 0)
{
CLog.LogError("BPM tag missing: " + FilePath);
return false;
}
#region check medley tags
if ((HeaderFlags & EHeaderFlags.MedleyStartBeat) != 0 && (HeaderFlags & EHeaderFlags.MedleyEndBeat) != 0)
{
if (this.Medley.StartBeat > this.Medley.EndBeat)
{
CLog.LogError("MedleyStartBeat is bigger than MedleyEndBeat in file: " + FilePath);
HeaderFlags = HeaderFlags - EHeaderFlags.MedleyStartBeat - EHeaderFlags.MedleyEndBeat;
}
}
if ((HeaderFlags & EHeaderFlags.PreviewStart) == 0 || this.PreviewStart == 0f)
{
//PreviewStart is not set or <=0
if ((HeaderFlags & EHeaderFlags.MedleyStartBeat) != 0)
//fallback to MedleyStart
this.PreviewStart = CGame.GetTimeFromBeats(this.Medley.StartBeat, this.BPM);
else
//else set to 0, it will be set in FindRefrainStart
this.PreviewStart = 0f;
}
if ((HeaderFlags & EHeaderFlags.MedleyStartBeat) != 0 && (HeaderFlags & EHeaderFlags.MedleyEndBeat) != 0)
{
this.Medley.Source = EMedleySource.Tag;
this.Medley.FadeInTime = CSettings.DefaultMedleyFadeInTime;
this.Medley.FadeOutTime = CSettings.DefaultMedleyFadeOutTIme;
}
#endregion check medley tags
this.Encoding = sr.CurrentEncoding;
}
catch (Exception)
catch (Exception e)
{
CLog.LogError("Error reading txt header in file \"" + FilePath + "\": " + e.Message);
return false;
}
@@ -466,6 +566,9 @@ namespace Vocaluxe.Lib.Song
CLog.LogError("Error loading song. Line No.: " + FileLineNo.ToString() + ". An unhandled exception occured (" + e.Message + "): " + FilePath);
return false;
}
FindRefrain();
return true;
}
@@ -531,5 +634,24 @@ namespace Vocaluxe.Lib.Song
}
}
}
private void FindRefrain()
{
if (this.Medley.Source == EMedleySource.Tag)
return;
if (!this.CalculateMedley)
return;
if (this.PreviewStart == 0f)
{
if (this.Medley.Source == EMedleySource.Calculated)
this.PreviewStart = CGame.GetTimeFromBeats(this.Medley.StartBeat, this.BPM);
}
}
}
}
+8 -2
View File
@@ -551,7 +551,13 @@ namespace Vocaluxe.Menu.SongMenu
int _stream = CSound.Load(Path.Combine(CSongs.VisibleSongs[_actsong].Folder, CSongs.VisibleSongs[_actsong].MP3FileName), true);
CSound.SetStreamVolume(_stream, 0f);
CSound.SetPosition(_stream, CSound.GetLength(_stream) / 4f);
float startposition = CSongs.VisibleSongs[_actsong].PreviewStart;
if (startposition == 0f)
startposition = CSound.GetLength(_stream) / 4f;
CSound.SetPosition(_stream, startposition);
CSound.Play(_stream);
CSound.Fade(_stream, 100f, 3f);
_streams.Add(_stream);
@@ -562,7 +568,7 @@ namespace Vocaluxe.Menu.SongMenu
_video = CVideo.VdLoad(Path.Combine(CSongs.VisibleSongs[_actsong].Folder, CSongs.VisibleSongs[_actsong].VideoFileName));
if (_video == -1)
return;
CVideo.VdSkip(_video, CSound.GetLength(_stream) / 4f, CSongs.VisibleSongs[_actsong].VideoGap);
CVideo.VdSkip(_video, startposition, CSongs.VisibleSongs[_actsong].VideoGap);
_VideoFadeTimer.Stop();
_VideoFadeTimer.Reset();
_VideoFadeTimer.Start();