aome510 / spotify-player

A Spotify player in the terminal with full feature parity
MIT License
3.63k stars 166 forks source link

Lyric finder returns incorrect lyrics #281

Open apprehensions opened 1 year ago

apprehensions commented 1 year ago

Describe the bug The Lyric finder returns random lyrics for a song i listen to, but the lyrics are for a completely different song.

To Reproduce Listen to any obscure music, maybe one with or without vocals.

Expected behavior No lyrics found

Screenshots image image The above song has actual lyrics, however this is a different lyrics set. image

aome510 commented 1 year ago

Can use string similarity metric (https://docs.rs/strsim/latest/strsim/) to detect similarities between query title vs returned title, and query artists vs returned artists. Genius is kind of a best-effort way to get the lyric anyway, so the result is not always correct.

apprehensions commented 1 year ago

How come Spotify is able to retrieve lyrics with accuracy then? they use their in-house lyrics?

aome510 commented 1 year ago

How come Spotify is able to retrieve lyrics with accuracy then? they use their in-house lyrics?

Not sure. Official app indicates they use https://www.musixmatch.com which may have better search functionality than genius.

JingYenLoh commented 8 months ago

Some time ago, I hacked together a PoC that used lyricstify's API to fetch lyrics, which iirc uses Spotify's internal APIs under the hood to retrieve the lyrics. I did it because genius often doesn't contain lyrics to songs I listen to.

My goal was to clean up the code (it's a dirty hack and the lyricstify maintainers might not appreciate calling their API directly) and eventually upstream it, but I never found the time to. I'm now hoping this information is helpful to whoever is interested in tackling this problem!

genricoloni commented 2 months ago

I kinda found a pattern for this behaviour: some songs that have a featuring on Spotify (meaning that more than one artist is present in artist_names) don't have all these names in the song lyric's page on Genius. An example is the following: by playing the song "Lost in the Dark" by "Left To Suffer" and "Peleface Swiss", the query will be "Lost in the Dark Left To Suffer Paleface Swiss". The results of the query is

image

And we can see that the song we wanted has not been found.

While instead performing the crafted query "Lost in the Dark Left To Suffer", so using only the first artist, the response will be:

image

Note that "Marc Zelli" is the singer of the group "Paleface Swiss", so the lyric is the correct one.

In my experience, I can say that using only the first artist is usually enough to get the correct lyric, but I don't know how this can actually impact the quality of the functionality.