milkdrop2077 / MilkDrop3

MilkDrop 3.0, supports any audio source, double-preset (.milk2), loading presets based on beat detection and much more...
https://twitter.com/MilkDrop2077
550 stars 29 forks source link

Feature Request: Displayed Lyrics #16

Open kbv1n opened 1 year ago

kbv1n commented 1 year ago

I recently switched from the Butterchurn plugin on Cider and I really like how it displays live-lyrics via Musixmatch api. Since Milkdrop3 can identify the player and current playing song is there anyway to implement Musixmatch api to display lyrics?

https://github.com/musixmatch/musixmatch-sdk

Once that is figured out, eventually it would be cool to have the lyrics blend into the visualizer after each frame like whenever you change a setting and text displays.

I'd like to help develop if you are interested.

OfficialIncubo commented 1 year ago

Really cool feature, but I think it's hard to implement it. I am waiting for the owner of Milkdrop3 to respond.

milkdrop2077 commented 1 year ago

Displaying lyrics is easy, I actually made a version that support drag and drop of .SRT or .TXT files and that can display text according to timestamps a few month ago. But I don't really want to be spying on the player to see what's playing and connect to the internet. I found it a bit invasive. Maybe if I could get the new title playing with SystemMediaTransportControls in a super light way, I may consider this. It's on my to-do list, but kind of on the bottom ;)

OfficialIncubo commented 1 year ago

Same for me. I also made an issue (or a to-do) about passing SMTC Title and Artist to BeatDrop.

Check here: https://github.com/OfficialIncubo/BeatDrop-Music-Visualizer/issues/5

kbv1n commented 1 year ago

Displaying lyrics is easy, I actually made a version that support drag and drop of .SRT or .TXT files and that can display text according to timestamps a few month ago. But I don't really want to be spying on the player to see what's playing and connect to the internet. I found it a bit invasive. Maybe if I could get the new title playing with SystemMediaTransportControls in a super light way, I may consider this. It's on my to-do list, but kind of on the bottom ;)

If I can get access to the version that accepts txt with time stamps I might be able to just make something that works with itunes/cider lyrics to update per song change. musixmatch already creates logs per song change that timestamp the lyrics I just don't know if they use a proprietary timestamp system but I'm sure it would be simple to implement. I know its not on your highest priority but I think a lot of Cider users would be happy with it if I created a "plugin" rather than it being built into the prod version and potentially damaging the performance.

milkdrop2077 commented 1 year ago

I actually didn't keep it because spying on the music player and downloading lyrics is not a valid option in my opinion. I'll keep you posted when I'll look into it again. Incubo if you want to try: accept drag&drop of the lyrics file, read the timestamps, launch at timer that display the text with LaunchCustomMessage (you can force the size/font/colour/duration...)

ClaireCJS commented 1 year ago

Why does no one use LRC format? Isn't that the most widely available?

Some versions of Whisper-AI can now output LRC so basically listen to the song and create the karaoke automatically. (It does .SRT too.)

ClaireCJS commented 1 year ago

But yes.

1) Please detect if there is an LRC file with the same name as the mp3

2) if you're super gracious, some of us have lyric/karaoke repositories like this: c:\lyrics\M\Metallica - One.lrc and it would be nice to check for ones in a location like that (which i used for 20 years) additionally, but I admit this is a bigger ask than looking for a file in the same folder (which i started using this year).

3) Basically do a milk_msg of the lyrics at the appropriate time. Might be able to look at end stamp (or stamp of next lyric, for formats that don't have end stamps) in order to determine a fade time.

I've actually seen this done. EvilLyrics was doing this in 2005 by rewriting milk_msg.ini over and over, but it was clumsy and assumed a hardcoded winamp location. It looks great. I want it back haha :)

milkdrop2077 commented 1 year ago

To come back to finding the title of the song playing wiht SystemMediaTransportControls, it is not possible with a normal C++ application, this API is only for UWP app. So no generic and easy way to find the title with MilkDrop3. LRC files should be feasible and much easier than rewriting milk_msg.ini over and over yes!

ClaireCJS commented 1 year ago

To come back to finding the title of the song playing wiht SystemMediaTransportControls, it is not possible with a normal C++ application, this API is only for UWP app. So no generic and easy way to find the title with MilkDrop3. LRC files should be feasible and much easier than rewriting milk_msg.ini over and over yes!

The worst part was, when winamp's location moved, I had to create a symbolic link file so that the milk_msg evillyrics overwrote every second in the wrong location was simultaneously in the right location. Ha!

I've been in situations where I get the filename of the song playing from winamp, then examine the files tags with various libraries. But then that often is doing the same work twice (first for mp3, then for flac), and then maybe for other file formats, so it kinda sucks to get into that.

But I digress.

LRC support would be my dream. I've been working on using AI to generate LRC files for my entire collection for display in MiniLyrics, but they'd look 100X better inside of Milkdrop!

Plus, I use multiple monitors - 1 for minilyrics+winamp, 1 for full screen milkdrop. But I can only choose one to cast to my tv downstairs during parties. So I have to choose between the minilyrics screen with lyrics but no cool visuals, or the milkdrop screen with visuals but no cool lyrics. Would be great to get lyrics into milkdrop so everything can be done nicely on one screen.

Sorry. I'm like a kid in a candy shop. This has been my dream for some time. But I've given up on EvilLyrics after 19 years and need a new karaoke milkdrop thingamabob :)

ClaireCJS commented 6 months ago

By the way, it's not really "spying"... Are there consent concerns?

Is there a way our consent can be granted?

Like an INI file option that we can change to 1? That way, nobody is spy'ed upon unless they explicitly want to?

OfficialIncubo commented 4 months ago

Incubo if you want to try: accept drag&drop of the lyrics file, read the timestamps, launch at timer that display the text with LaunchCustomMessage (you can force the size/font/colour/duration...)

Apparently, BeatDrop now started to accept drag and drop with only the preset support [BETA]. I'll do it in the future, such as custom waves, shapes, image loading as sprite and the lyric text reader (if possible).