feat(music): embed plain lyrics and save timed lyrics from Song.synced_lyrics

This commit is contained in:
imSp4rky
2026-10-14 12:37:43 -06:00
parent b107bca168
commit 8a1fbf2de1
6 changed files with 22 additions and 11 deletions
+5 -3
View File
@@ -197,9 +197,11 @@ Each subclass adds its own required fields on top of `id_` and `service`:
A `Song` also takes optional metadata keywords that the tagger and the naming templates
read: `album_artist`, `release_type`, `total_tracks`, `total_discs`, `genre`,
`explicit`, `isrc`, `upc`, `copyright`, `label`, `lyrics`, `lyrics_suffix`, and
`artwork_url`. Read the class for the current list. With `lyrics_suffix` (`".lrc"`,
`".ttml"`), unshackle also saves `lyrics` beside the final audio file under that suffix.
`explicit`, `isrc`, `upc`, `copyright`, `label`, `lyrics`, `synced_lyrics`,
`lyrics_suffix`, and `artwork_url`. Read the class for the current list. Give `lyrics` as
plain text: the tagger embeds it as is. With `synced_lyrics` (timed LRC or TTML) and
`lyrics_suffix` (`".lrc"`, `".ttml"`), unshackle also saves the timed lyrics beside the
final audio file under that suffix.
You can set these fields in `get_tracks()` too, and a remote client gets them back.
The tagger also falls back to `Song.data` for fields the constructor did not get, such
+3 -3
View File
@@ -269,9 +269,9 @@ unshackle writes lyrics when the service supplies them: a `LYRICS` Vorbis commen
`USLT` frame for MP3, and a `©lyr` atom for M4A. Ogg uses the same `LYRICS` field as
FLAC. unshackle does not write synchronized lyrics (`SYLT`).
A service can also ask for a lyrics file beside the audio, for example
`08.Get.Lucky.lrc` next to `08.Get.Lucky.m4a`. A music player reads the timed lines from
it. The file also comes back to the client from a remote server.
The embedded lyrics are plain text. A service can also save timed lyrics in a file beside
the audio, for example `08.Get.Lucky.lrc` next to `08.Get.Lucky.m4a`. A music player reads
the timed lines from that file. The file also comes back to the client from a remote server.
A metadata fault does not stop the run. The file is already in place, so unshackle writes a
warning and continues.