UltraStar-Deluxe / format

UltraStar Format Specification
https://usdx.eu/format
MIT License
9 stars 2 forks source link

[Spec] Add tags for online music databases #19

Closed achimmihca closed 8 months ago

achimmihca commented 9 months ago

Suggestion

I suggest to add an official header field for MusicBrainz IDs (MBID).

Note that MusicBrainz is free only for non-commercial use.

I remember that UltraSinger is already using MusicBrainz to add information about newly created songs.

Use case

Extra info/examples/attachments

Examples

#MUSICBRAINZRECORDING:4725d53a-0771-427c-b3ad-5eb20ba62978
#MUSICBRAINZARTIST:2386cd66-e923-4e8e-bf14-2eebe2e9b973
#MUSICBRAINZRELEASE:6d24c724-9c5c-3855-9b92-bd6bfbf3ee80
basisbit commented 9 months ago

the record MBID makes for a good identifier for an online score database because it uniquely identifies a song.

Let me quickly change the lyrics into a single note in one sentence, and suddenly I get best score on the online leaderboard. (Not a fan of that idea, sorry)

Maybe combining use of the MBID (for local highscores) and the lyrics' hash (for online leaderboard) could work.

achimmihca commented 9 months ago

suddenly I get best score on the online leaderboard

This kind of cheating is probably also possible on API level.

I mean, some API needs to be exposed so users can upload their new high score. And I don't know how one should verify that the uploaded score and song id is not fake.

So, I would not try to prevent people from cheating in the first place.

Baklap4 commented 9 months ago

Not quite sure how the Hiscores are done now, as for performous we only have a local database, not a live one.

I think the idea is nice, but as from the format view i think it's pretty bad since we'd tie ourselves to musicbrainz id's whilst it might be possible to make it more generic?

marwin89 commented 9 months ago

I support the idea. šŸ‘ Is it possible to make a tag called: #MUSICDB and then put in service and [id]? Examples: #MUSICDB: musicbrainz [1234567] #MUSICDB: rateyourmusic [1234567] #MUSICDB: vgmdb [1234567] In the end musicbrainz seems to be the best solution (for open source projects) these days (according to this music database overview)

rakuri255 commented 9 months ago

I support @marwin89 idea to make it generic!

Who can say for sure that this website will life forever? It can be shootdown in few years and then we have these deprecated IDs when it's too specific like #MUSICBRAINZID.

Do we need a list of DBs that should be supported? Just for compatibility?

achimmihca commented 9 months ago

I agree, the field name should be generic. Otherwise it may end like the MP3 tag, which is not MP3 in all cases.

For the format, I suggest to use a single header field with URL query parameter syntax, i.e. KEY1=VALUE1&KEY2=VALUE2.

This has the advantage that the parameters can be parsed with existing libs for parsing URLs.

Do we need a list of DBs that should be supported

I don't think so. IMO this is an implementation detail of the player. It could be a config setting, whitelist, or something else.

Which DBs are supported should not be part of the spec (I argue the same for the #WEBSITE tag).

Similarly, the spec also does not define which audio formats are supported because this would not make sense.

marwin89 commented 9 months ago

SUMMARY

So here is a summary for this issue up tillnow.

We add this tag in version 1.1.0:

#MUSICDB: musicbrainzrecord=12345&musicbrainzartist=12345

The description in the spec (website) is:

MUSICDB

This tag links to different online music databases. By using #MUSICDB you enable your song editor tool or game to fetch info about songs (e.g., year, genre, cover, title, artist). Use IDs from the database of your choice to identify record/artist. In the value you can combine information by using & (for example: musicbrainzrecord=id&musicbrainzartist=id). Right now the tag can only be 255 characters long. We recommend musicbrainz for the next few years. But please check out which music databases are actually supported in your game or song editor.

marwin89 commented 9 months ago

2nd SUMMARY / VOTE NOW šŸ“ˆ āœ‹

So here is the second summary for this issue. We are close to a final result.

Please vote for this issue till 31th oct 2023 with emoticon šŸŽ‰ / šŸš€ / ā¤ļø .

šŸš€ A: #DBARTIST, #DBRECORDING, #DBRELEASE šŸŽ‰ B: #DATAARTIST, #DATARECORDING, #DATARELEASE ā¤ļø C: Don't introduce this feature at all

Why these tags?

Spec doesn't define which db to use. However we recommend Musicbrainz Database. Cause is free for open source projects.

šŸš€ A

We add these tags to the next version v.1.1.0 / v2023

DBARTIST:https://musicbrainz.org/artist/ffd9d946-518f-4e66-800f-994c26bf24d5

DBRECORDING:https://musicbrainz.org/recording/04c9c416-8bb7-45ee-a040-f7295b6582a9

DBRELEASE:https://musicbrainz.org/release/5ba06af7-e9a0-469f-8276-6d3cce43bb0e

šŸŽ‰ B:

We add these tags to the next version v.1.1.0 / v2023

DATAARTIST:https://musicbrainz.org/artist/ffd9d946-518f-4e66-800f-994c26bf24d5

DATARECORDING:https://musicbrainz.org/recording/04c9c416-8bb7-45ee-a040-f7295b6582a9

DATARELEASE:https://musicbrainz.org/release/5ba06af7-e9a0-469f-8276-6d3cce43bb0e


The description in the spec (website) will be something like:

DATAARTIST, #DATARECORDING, #DATARELEASE

Thes tags link to online music databases. Why is that great? There are two advantages. First: By using them you enable your song editor tool or game to fetch info about songs (e.g., year, genre, cover, title, artist). Second: A game might use it to identify a song for online highscore feature. Use URLs from the database of your choice to identify artist, recording(=song) and release(=album that contains the song). We recommend musicbrainz.org for the next few years. But please check out which music databases are actually supported in your game or song editor.

rakuri255 commented 9 months ago

I am for the tag names in A but not for the URL part. URLs will change/break over time, so they do not have a long-life time. What we could rather rely on are the IDs what the DB API provides us. The IDs should normally survive such URL and API changes.

Maybe use a separate tag for which Api used? So, the APP can build the URL themselves and also migrate it to a newer API version.

#DB:https://musicbrainz.org/ws/2/
#DBARTIST:ffd9d946-518f-4e66-800f-994c26bf24d5
#DBRECORDING:04c9c416-8bb7-45ee-a040-f7295b6582a9
#DBRELEASE:5ba06af7-e9a0-469f-8276-6d3cce43bb0e

For musicbrainz the Artist URL will then look like this: https://musicbrainz.org/ws/2/artist/ffd9d946-518f-4e66-800f-994c26bf24d5

basisbit commented 8 months ago

This kind of cheating is probably also possible on API level.

@achimmihca Yes, it is possible on API-level, but no one has done this on API level the past couple of years, despite the communication not even having used TLS. The key part is that doing cheating on API level requires some software dev skills and a bit of time, while copy+pasting some ID in a text file can easily be done by most 10 years old kids. Thus imho this DBRELEASE is not suitable as an identifier except if your goal is to show additional information ingame for this song using (for example) musicbrainz api. For online high scores it imho is not suitable.

rakuri255 commented 8 months ago

Let's think about that again. Do we really need the DB Link? If you look at self-host APPs for audio like Plex, Synology Music, mstream, Jellyfin etc. See here. They fetch the information completely on their own. And for these APPs, the artist, title, year is actually enough to determine the song exactly. Often the infos are in the ID3 tags of the mp3. Most of the time only artist and year are in the ID3 as extra info and the other fields are mostly empty. But we could provide the most important ID3 tags in the .txt as well. See ID3 Tags

If you are honest, a well-defined .txt that has all the info about the song is enough to find it with any API.

achimmihca commented 8 months ago

If you are honest, a well-defined .txt that has all the info about the song is enough to find it with any API

True. Guess there is no need to add it to the format.

Ok then, I am fine to close this issue as "won't implement".


BTW: @marwin89 thanks for your summaries, I find these pretty helpful.

marwin89 commented 8 months ago

SUMMARY / FINAL RESULTS šŸ

Thanks for the discussion about MUSICDB-feature.

Here is the result: The majority of participants already agreed not to implement this feature. Topic is closed now.


BTW: @marwin89 thanks for your summaries, I find these pretty helpful.

šŸ˜„ good to hear that. I'll continue this moderation.