Plugin to embed synchronised lyrics lrc file in SYLT tag? possible?

I had a quick look at the picard script and plugin notes but wasn’t clear if either provides a mechanism to read in the text from a synchronised lyrics .lrc file that is in same folder and with same name as corresponding audio file and embed it in the SYLT tag. Also as a fall back if no .lrc file then try to use a similarly named .txt file and embed it in the UNSYNCEDLYRICS tag. I can code it, just need some pointers to save time or a plugin source code that does anything similar. Thx

With current Picard 2.1.3 this is not easily possible, but the upcoming 2.2 release will have support for register_file_post_load_processor which a plugin can use to run a function directly after files have been loaded. Likewise there is a register_file_post_save_processor to run after the file has been saved. You can already try this by using the current development version.

One already existing plugin making use of this is at https://github.com/metabrainz/picard-plugins/blob/2.0/plugins/haikuattrs/haikuattrs.py

For unsynchronized lyrics it’s easy, you can just read the file in the post load processor and add the content to the lyrics tag.

I am just not entirely sure about the sylt tag since Picard does not actually have a builtin tag mapping for this and the format is kind of special. Maybe you need to store the file content on load in a hidden tag (start the tag name with ~, e.g. metadata['~sylt']) and post save you use the mutagen library directly to add this tag. How do .lrc files look like, is it a text format? Are they something widely supported? Maybe the proper way to handle is would be to teach Picard to handle this format and add a proper tag mapping for it (e.g. have an internal tag synclyrics which gets saved to SYLT properly).

1 Like

yes simple text format eg:- oasis - wonderwall.lrc
[id: wd_bcaplh]
[by:Adam Liwski]
[Ad:am][Li:ws][ki: ]

[00:22]Today is gonna be the day that they’re gonna throw it back to you
[00:27]By now you shoulda somehow realized what you gotta do
[00:33][00:55][02:05]I don’t believe that anybody feels the way I do about you now

[00:44]Back beat, the word is on the street that the fire in your heart is out
[00:49]I’m sure you’ve heard it all before but you never really had a doubt

[02:16][01:05]And all the roads we have to walk are winding
[02:21][01:11]And all the lights that lead us there are blinding
[02:27][01:17]There are many things that I would like to say to you
[02:31][01:21]But I don’t know how

[01:27]Because maybe
[01:32][03:26][03:04][02:42]You’re gonna be the one that saves me
[01:37][03:09][02:47]And after all
[01:42][03:14][02:53]You’re my wonderwall

[01:54]Today was gonna be the day but they’ll never throw it back to you
[02:00]By now you shoulda somehow realized what you’re not to do

[03:22][03:00][02:38]I said maybe

1 Like

Great, this looks simple enough. I could image Picard uses this format for text representation of the synchronized lyrics and converts it to and from ID3 SYLT on load and save.

There s an open ticket for synchronized lyrics support, I added some comments:

2 Likes

That’s great! I’m a big fan of metadata stored once in media files (or companion nfo, xml etc) so no continual re-requesting of data. I currently use my own app to this end but theaudiodb doesn’t return artists for compilation album tracks which led me to picard and that id’ing tracks once is clearly the best solution. The Kodi lyrics plugin uses .lrc files. Plex can also show .lrc files but not for tracks sync’ed to a device when offline, so wondering if SYNC tags might work for this case. Maybe in the future, guitar chords or piano sheet music might be embedded in media files!

Thanks a lot for your help.