Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Richer Lyrics! (Improving the lyrics page) #188

Open
4 tasks
sortedcord opened this issue Feb 27, 2024 · 0 comments
Open
4 tasks

Richer Lyrics! (Improving the lyrics page) #188

sortedcord opened this issue Feb 27, 2024 · 0 comments

Comments

@sortedcord
Copy link

sortedcord commented Feb 27, 2024

I'm opening this issue to propose a major rework, or you could say polishing of the lyrics page. While this is not a priority and I don't see this being implemented in probably the next two or maybe three milestones, it still might be a good idea to have this tracked for a future pull request.

This is more more of niche, but if implemented properly, then swingmusic would probably be the one of its kind to support such a thing and I could see some people specifically swinging to swing (sorry for the pun) just for these features.

  • elrc Word by Word sync
  • Romanization/Translation and multi-lrc support
  • Formatting Vocal Features
  • Aesthetic Improvements

Most of these ideas here have already been implemented in a spicetify extension called beautiful lyrics so we already have a source to refer from just in case.

.elrc Support

The current state of the lyrics page only supports either static lyrics or line synced lyrics (typical .lrc files). I want to introduce something called "enhanced lyrics" or 'elrc' files. These are lyrics that are synced word-to-word and make a great use case for karaoke.

Here is the syntax for a normal .lrc file

[00:12.00]Line 1 lyrics
[00:17.20]Line 2 lyrics
[00:19.20]Line 3 lyrics
Line.Sync.Output.mp4

This is how a an .elrc file lyrics look like:

[00:00.00] <00:00.04> When <00:00.16> the <00:00.82> truth <00:01.29> is <00:01.63> found <00:03.09> to <00:03.37> be <00:05.92> lies 
[00:06.47] <00:07.67> And <00:07.94> all <00:08.36> the <00:08.63> joy <00:10.28> within <00:10.53> you <00:13.09> dies 
[00:13.34] <00:14.32> Don't <00:14.73> you <00:15.14> want <00:15.57> somebody <00:16.09> to <00:16.46> love
Word.Sync.Output.mp4

Do note that enhanced lrc files don't really go by .elrc (They also use just lrc) file extension but it would be easier to classify them if swing only recognized .elrc as enhanced lyrics.

Romanization

(Related to #182 )

Romanization.Demo.mp4

The ability to romanize foreign languages to english relies on the language property of the track. Swing can check if the said track is of a particular native language for which romanization is supported and then can give the user the ability to switch to the equivalent romanized lyrics. There are a few ways in which this can be implemented:

  1. Specific Libraries

    Libraries like pykakasi support JIT translation for Japanese -> English and it's all which is fast and self contained (i.e no requirement of external dictionaries, etc.). The only issue with this is that it can be hard to find such implementations for other languages.

  2. Multiple Lyric Files

    There can support for multiple lrc files which can have certain language identifiers such as:
    [KG] Foo - Bar.lrc: Native korean lyrics
    [KG-EN] Foo - Bar.lrc: Korean to English Translated (Literal Translation)
    [KG-ROM] - Bar.lrc: Romanized korean lyrics

    The identifiers would probably be ISO Codes for languges with suitable modifiers and the user can switch from one lyric to another within the UI or set defaults as well.

Formatting Background Vocals (or ad-libs)

These are the part of lyrics that are usually denoted in brackets. They could be formatted as a new line under the main line with a smaller font or similar.

image

If a word-by-word elrc file is given then it could be implemented by checking whether the lyric starts with a parenthesis or not and then apply the necessary styling.
In case only a regular time synced lyric file is given then its only possible if the ad-lib lyric starts on a new line:

# This would work-
[04:23:45] Lorem Ipsum Dolor Sit Amer
[04:24:56] (Dolor Sit Amer)

# This wouldn't work-
[04:23:45] Lorem Ipsum Dolor Sit Amer (Dolor Sit Amer)

Switching Vocals

Add support for custom formatting of lines sung by different people. A basic example of this would be gender wise - Male, Female & Duet:

[00:12.00]Line 1 lyrics
[00:17.20]F: Line 2 lyrics
[00:21.10]M: Line 3 lyrics
[00:24.00]Line 4 lyrics
[00:28.25]D: Line 5 lyrics
[00:29.02]Line 6 lyrics

Let's say we use blue for male, red for female and pink for Duet.

  1. Line 1 will use the default color (blue) when no tag is found.
  2. Line 2 lyrics start with red when F: is found.
  3. Line 3 lyrics start with blue when M: is found.
  4. Line 4 lyrics stays blue when no tag is found.
  5. Line 5 lyrics start with pink when D: is found.
  6. Line 6 lyrics stays pink when no tag is found.

This is just an example, the exact colors, and behaviors can be changed accordingly.

Aesthetic Improvements

The lyrics themselves could use a bit more subtle animations like fades, color whipes and grow/shrink to make it look more lively.

Useful References

  • Apple Music Sing
  • Raw Lyrics as returned by apple music (An example)
  • Gaudio Studio - A free service that uses AI to transcribe songs word-by-word. While not perfect to the 100th millisecond, with minimal input you can get a lot of songs done through this whose (elrc files) are not available on major services..
    Note: If you want to download the lyrics, you can head on to the network tab in dev tools and download the csv file which contains the time stamps at which words are broken for a given line.
  • Steve's AMLL/TMLL tool for manually syncing lines/words/syllables
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants