aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model
diff options
context:
space:
mode:
authorAlex <48403821+AlexDalas@users.noreply.github.com>2025-04-08 00:59:18 +1000
committerGitHub <noreply@github.com>2025-04-07 08:59:18 -0600
commit82a561b87d3b6d023168d4604c1030ff936f55f4 (patch)
tree25a973b26838e0e07b4dd900564189bdd29ffbcf /MediaBrowser.Model
parent04ca27ad075bdab1eae49c43fde1ed6d45c050e4 (diff)
Add API support for ELRC word-based lyrics (#12941)
* Add API support for ELRC word-based lyrics Adds support for word-based timestamps from within ELRC files. * Create TimeTags object * redo TimeTag implementation Change TimeTag to long, redo TimeTag implementation Make timestamp not nullable Update MediaBrowser.Model/Lyrics/LyricLine.cs Make TimeTag list IReadOnlyList Remove nullable Timestamp Update TimeTag description Co-Authored-By: Cody Robibero <cody@robibe.ro> * Changes to LyricLineTimeTag Moved TimeTag to LyricLineTimeTag Change "timestamp" to "start" for consistency Change plural "TimeTags" to "Cues" Change comments * Change LyricLineTimeTag to LyricLineCue, include info about end times * Remove width * Remove width tag * Rewrite cue parser and add tests --------- Co-authored-by: Cody Robibero <cody@robibe.ro>
Diffstat (limited to 'MediaBrowser.Model')
-rw-r--r--MediaBrowser.Model/Lyrics/LyricLine.cs11
-rw-r--r--MediaBrowser.Model/Lyrics/LyricLineCue.cs35
2 files changed, 45 insertions, 1 deletions
diff --git a/MediaBrowser.Model/Lyrics/LyricLine.cs b/MediaBrowser.Model/Lyrics/LyricLine.cs
index 64d1f64c2..788bace69 100644
--- a/MediaBrowser.Model/Lyrics/LyricLine.cs
+++ b/MediaBrowser.Model/Lyrics/LyricLine.cs
@@ -1,3 +1,5 @@
+using System.Collections.Generic;
+
namespace MediaBrowser.Model.Lyrics;
/// <summary>
@@ -10,10 +12,12 @@ public class LyricLine
/// </summary>
/// <param name="text">The lyric text.</param>
/// <param name="start">The lyric start time in ticks.</param>
- public LyricLine(string text, long? start = null)
+ /// <param name="cues">The time-aligned cues for the song's lyrics.</param>
+ public LyricLine(string text, long? start = null, IReadOnlyList<LyricLineCue>? cues = null)
{
Text = text;
Start = start;
+ Cues = cues;
}
/// <summary>
@@ -25,4 +29,9 @@ public class LyricLine
/// Gets the start time in ticks.
/// </summary>
public long? Start { get; }
+
+ /// <summary>
+ /// Gets the time-aligned cues for the song's lyrics.
+ /// </summary>
+ public IReadOnlyList<LyricLineCue>? Cues { get; }
}
diff --git a/MediaBrowser.Model/Lyrics/LyricLineCue.cs b/MediaBrowser.Model/Lyrics/LyricLineCue.cs
new file mode 100644
index 000000000..1172a0231
--- /dev/null
+++ b/MediaBrowser.Model/Lyrics/LyricLineCue.cs
@@ -0,0 +1,35 @@
+namespace MediaBrowser.Model.Lyrics;
+
+/// <summary>
+/// LyricLineCue model, holds information about the timing of words within a LyricLine.
+/// </summary>
+public class LyricLineCue
+{
+ /// <summary>
+ /// Initializes a new instance of the <see cref="LyricLineCue"/> class.
+ /// </summary>
+ /// <param name="position">The start of the character index of the lyric.</param>
+ /// <param name="start">The start of the timestamp the lyric is synced to in ticks.</param>
+ /// <param name="end">The end of the timestamp the lyric is synced to in ticks.</param>
+ public LyricLineCue(int position, long start, long? end)
+ {
+ Position = position;
+ Start = start;
+ End = end;
+ }
+
+ /// <summary>
+ /// Gets the character index of the lyric.
+ /// </summary>
+ public int Position { get; }
+
+ /// <summary>
+ /// Gets the timestamp the lyric is synced to in ticks.
+ /// </summary>
+ public long Start { get; }
+
+ /// <summary>
+ /// Gets the end timestamp the lyric is synced to in ticks.
+ /// </summary>
+ public long? End { get; }
+}