jacquesh / foo_openlyrics

An open-source lyric display panel for foobar2000
MIT License
401 stars 24 forks source link

Use "UNSYNCED LYRICS" as the most prioritized metadata field by default #294

Open daoxi opened 10 months ago

daoxi commented 10 months ago

So last year I posted some comments about why we should use "UNSYNCED LYRICS" as the default field for lyrics (in short, it uses the USLT frame that's also supported on other platforms).

Today I reinstalled my fb2k, installed OpenLyrics, and found the following were listed by default under "Metadata tags to search": LYRICS;SYNCEDLYRICS;UNSYNCED LYRICS;UNSYNCEDLYRICS

I'm guessing it would make more sense to move "UNSYNCED LYRICS" to the front so that it's the first thing to be searched for? So for example: UNSYNCED LYRICS;LYRICS;SYNCEDLYRICS;UNSYNCEDLYRICS

It might be a good idea to set it like this by default as most average users aren't familiar with how lyrics metadata in ID3v2 tags work in fb2k.

fb2k: 2.0 OpenLyrics: 1.6

jacquesh commented 10 months ago

Maybe...but honestly I'm not sure it really makes a difference in any use-case that we care about. My reasoning is given below, but I'm open to alternative ideas/perspectives/arguments:

We're talking about defaults here. Defaults are certainly very important but I think if you're changing either the save tag or search tag settings then it's reasonable to expect you to change the other one (or at least verify that it has the correct/desired value). So let's assume that the user has left all of their settings on the default value...except for save-source which you've changed to Metadata tags (otherwise none of this makes sense).

If openlyrics is the only thing putting data into metadata tags then it doesn't matter because we're writing to UNSYNCED LYRICS anyway, so it'll use the USLT frame to store the data. Openlyrics will find this and so will other software/devises that support the standard tags (as per #84). The ordering of the defaults makes no difference here.

If you're writing to metadata tags from a variety of applications/devices then you need to make sure they all agree on a set of tags anyway. You (probably) want them all to write to the same tag, regardless of what that tag is. Since USLT is the "official" place that most software/devises support, they're likely to use that. Now everything is writing to USLT and it's the same as if openlyrics was the only thing writing tags.

Let's say for example that your new car has rubbish sound system software (I can relate!) that ignores any and all standards, and so only reads from the LYRICS TXXX frame. Now if you want your car to always read the lyrics for any track that you have lyrics for, then everything needs to write to a single tag and you need to change the write tag on all your tag writing software to write to LYRICS instead of USLT . By our initial assumption, you can therefore also check and/or update the read tag (although in this particular case, no change is necessary) so the defaults provide negligible benefit (they only save you a handful of keystrokes once if they're correct).

So then what if you don't care about only using a single tag. You get lyric tag data from several places (openlyrics, other media players, I have tracks from Bandcamp that come with lyrics embedded in the tags, etc) and they write to different tags. Sometimes its USLT/UNSYNCED LYRICS, sometimes it's the TXXX LYRICS, sometimes it's the TXXX UNSYNCEDLYRICS etc. Now you need to verify the search tag list, but at this point that isn't really the problem, the problem is which tags to read.

In the case where we have data stored in more than one of the default search tags, it's not clear to me what we should prefer. On one hand it's a strong argument to say that we should prefer UNSYNCED LYRICS because that's what fb2k translates to the USLT frame and fb2k doesn't support any other lyrics-related tag being stored in a specialise, non-TXXX frame. On the other hand, people usually prefer synced lyrics to unsynced lyrics, and if they were storing both it's not unreasonable to expect them to write synced lyrics to SYNCEDLYRICS and unsynced lyrics to UNSYNCED LYRICS.


Overall I think it's probably reasonable to put the USLT-backed tag as the first priority for searching, on the basis of being the only "special case" tag backed by an "official" purpose-specific frame. I also think it's a pretty niche issue though, so I'm open to alternative arguments.

I've put this on v1.9 just to throw it a good distance into the future (since it's a pretty minor issue and to give people time to see this and comment). If nobody has an argument against putting UNSYNCED LYRICS first by that point, then I'll make that change.

daoxi commented 10 months ago

First of all, thanks a lot for the detailed explanation for the reasoning behind this.

Let's say for example that your new car has rubbish sound system software (I can relate!) that ignores any and all standards, and so only reads from the LYRICS TXXX frame.

Although that's not impossible, it extremely unlikely that a platform would support a custom TXXX frame for lyrics but at the same time not suport the USLT frame. From my experience (I personally tested around 30 platforms mostly on Windows and Android), it's much more common that a platform would support USLT and also sometimes a few other fields (e.g. SYLT, custom TXXX frame, etc.). In other words, if a platform supports embedded lyrics for ID3v2 tag, USLT would most likely be the first thing they support.

So then what if you don't care about only using a single tag. You get lyric tag data from several places (openlyrics, other media players, I have tracks from Bandcamp that come with lyrics embedded in the tags, etc) and they write to different tags. Sometimes its USLT/UNSYNCED LYRICS, sometimes it's the TXXX LYRICS, sometimes it's the TXXX UNSYNCEDLYRICS etc. Now you need to verify the search tag list, but at this point that isn't really the problem, the problem is which tags to read.

Imho it'd be a weird decision for the platform to write to a custom TXXX field instead of USLT field (especially for unsynced lyrics, because USLT (unlike SYLT) is a plaintext field much like the TXXX, so there won't be any advantage to write to TXXX), more importantly, there're technically an unlimited number of names for TXXX fields as you can name it whatever you want, making unifying everything a nightmare.

On the other hand, people usually prefer synced lyrics to unsynced lyrics, and if they were storing both it's not unreasonable to expect them to write synced lyrics to SYNCEDLYRICS and unsynced lyrics to UNSYNCED LYRICS.

I agree that most people would prefer synced lyrics over unsynced, but if a user was gonna store both synced and unsynced lyrics on the same file, the most standard way (according to ID3v2 standards) would be to store the synced lyrics in SYLT frame (which only very few platforms support it, fb2k isn't one of them iirc) and unsynced lyrics in USLT frame. Basically we technically have no clue on what the user would name their TXXX frame in case they decide to use it to store synced lyrics (e.g. they could also name it "SYNCED LYRICS", "SYNCHRONIZED LYRICS", "TIMED LYRICS", etc., there's technically no standard for it, you can read more here about the TXXX frame (aka. User defined text information frame))