Skip to content

Fetch/write lyrics from tags #273

Open

Description

@pbnoxious

At least the newer id3 versions as well as ogg vorbis comments (and possibly more) support embedding lyrics in the music file. Up to now ncmpcpp does not support fetching the lyrics from the files directly, nor is it possible to alter these fields. I think that this would be a nice feature, although I know that the implementation is probably not easy.

To be more specific I imagine the feature in two parts:

  • a possibility to choose the embedded lyrics as source for the lyrics screen (which is probably the hardest part, because of the different formatted tags)
  • a key that saves the currently viewed lyrics (e.g. fetched from an online source) to the music file. Here also an option to do this automatically (if no embedded lyrics are present) would be nice. The problem here is the limited set of characters these tags allow.

What do you think of it? Do you think this is a useful feature?

Activity

  1. jneidel commented on Jul 6, 2019

    @jneidel
    Contributor

    Reading the lyrics from mp3 tags (lyrics-XXX, lyrics-eng, etc.) would be very useful.

    While tagging my music (with beets) it automatically adds the lyrics, but to view them I have to read out the tag using ffmpeg.
    Would be nice if it were all within the same application.

  2. kamack38 commented on Feb 10, 2025

    @kamack38

    Shouldn't this be closed because of 9c27eec ?

  3. pbnoxious commented on Feb 10, 2025

    @pbnoxious
    Author

    Only partially, 9c27eec only implements the "read" part.

    While it's not a crucial feature, it would make sense to also allow writing to files, just like ncmpcpp can edit tags and edit the lyrics file. In the worst case you currently fetch the lyrics from the tag, notice that they are wrong and correct them in ncmpcpp… but actually only change them in the associated txt file and not the actual tags.
    In the best case you would do the same (at least I typically notice they are wrong when listening to the song) and simply correct them in the external editor of your choice and directly write them to the songs tag, so you not need to use some mp3/vorbis/etc tagger.

  4. kamack38 commented on Feb 10, 2025

    @kamack38

    From what I see, this would require a larger rewrite since tags is just a lyrics fetcher, and it just fetches the lyrics and saves them to a file. A whole separate mechanism would have to be added which would watch for any changes and write them to the music file. On a second note, it could just be implemented for all lyrics fetchers. It's possible to add an option like sync_lyrics which would write the lyrics to the music file after a user is finished editing the lyrics file, regardless of what lyrics fetcher was used to obtain them. But I don't know whether it's not out of scope for ncmpcpp. What do You think?

  5. kamack38 commented on Feb 12, 2025

    @kamack38

    I've created a proof of concept at #625

  6. pbnoxious commented on Feb 13, 2025

    @pbnoxious
    Author

    I totally agree that this is no small task and likely would need bigger rewrites.
    I'm therefore not sure if it's worth the effort if I'm the sole person requesting it. The original author deemed ncmpcpp as "feature-complete" in his opinion, so this would also add another maintenance-burden.

    But of course I would love to have the feature! Thank you for creating the PoC, if it's really "that simple" it might even be doable?

  7. kamack38 commented on Feb 13, 2025

    @kamack38

    The basic functionality was easy to implement, what bothers me is that it cannot be done for graphical editors since they don't block ncmpcpp's execution. Overall, I think the best solution would be to use intofiy to watch changes made to the lyrics files (currently the lyrics are synced when the editor is closed), but that can just be a whole separate program (more likely a simple script).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions