UltraStar-Deluxe / format

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

[Spec] Add #DIFFICULTY to describe song difficulty #34

Closed marwin89 closed 7 months ago

marwin89 commented 9 months ago

Suggestion

It would be good to have a #DIFFICULTY-tag. It describes how easy or hard a song is to sing. regardless of the difficulty setting "easy - medium - hard" of the pitch-algorithm. Most modern commercial music games use this info.

Song creators estimate the difficulty of a song on a scale of 1-5. Based on tempo, syllables per second, pauses to breath, changes of pitches and octaves. loooong noootes etc.

1 - Very Easy: - Example: Status Quo - You're in the army now 2 - Easy: - Example: ... 3 - Medium: - Example: ... 4 - Hard: ** - Example: ... 5 - Very Hard: *** - Example: ...

#DIFFICULTY:5

Use case

  1. As a user I regullary want to sing easy songs in the beginning to warm up my voice for a karaoke night. πŸ”₯
  2. As a user I want to find easy songs when I'm actually not good at singing or get used to music games. 🎡
  3. Many songs are challenging. Some are very fast and taking your breath away other have complicated pitches to sing.

Extra info/examples/attachments

No response

rakuri255 commented 9 months ago

Could we define a formula or algorithm? Maybe the program / game could calculate it itself?

Baklap4 commented 9 months ago

I wouldnt make this part of the spec i think. Currently difficulty is implemented per game where youll score points based on how close to the actual note / frequency youre at. I think easy has the widest range of 1.5 normal is 1 and hard is 0.5 semitones

Its up to the karaoke program to determine the points system

Making it part of the spec you can only have one song in one difficulty or we need something to map multiple difficulties into the same notes..

Also a creator tries to match the singers voice as close as possible. He shouldnt make notes easier to hit

bohning commented 9 months ago

I think you misunderstood the intention of the tag. It’s supposed to be a (rather subjective, and that’s the problem I see with it) a rating of how difficult the song is to sing. Maybe beginners want to sing very easy songs (slow, low pitch variations, lots of gaps between notes, short song, etc. - e.g. "Tequlila" by The Champs would qualify for that, as you only have to sing "Tequila" three times), while the professionals would rather aim for the big challenges (think e.g. "Bohemian Rhapsody").

Although this is highly subjective (the creator may feel the song is easy, because he knows it by heart and has sung it under the shower a zillion times and knows the lyrics by heart), it might come in handy for some. Ideally, singers could rate the difficulty and a song gets the average of all ratings ;-)

Nianna commented 9 months ago

I agree with @bohning. If the creator is supposed to define it, it's probably gonna be too subjective to be useful.

Does it have to be a part of the txt file? It seems like a feature that should be implemented by a website with songfiles (it could be measured by votes) or karaoke game (it could use some algorithm on txt file to determine difficulty).

Baklap4 commented 9 months ago

Ahh thanks for explaining :)!

Yes i'd agree such a thing can be handy, but it pretty subjective as @bohning pointed out. Hosting sites like usdb can provide this feature aswell as maybe the karaoke programs by voting how hard it was (from singers perspective) given enough votes it should equal out to a good average.

This calculated value can be dynamicly updated. With help of the syncer if a songs difficulty get updated the local songfiles can get updated. But for this to work i think some more documentation about how to stay up-to-date should make it into the readme or docs from the syncer (https://github.com/bohning/usdb_syncer/issues/157 )

Baklap4 commented 9 months ago

Instead of 5 difficulties i'd opt for 3: Easy, Normal, Hard.

Why? A lot of ratings have 5 star rating. The person rating usually picks out 5/5 or 1/5 or 3/5. AKA: It's really good, or really bad or just okay.

2/5 and 4/5 is rarely picked from my experience since it's a kind of middleground and people tend to go more for absolutes

Aside from integers i'd make it an enum (strings => Easy, Normal, Hard)

marwin89 commented 9 months ago

Does it have to be a part of the txt file? It seems like a feature that should be implemented by a website with songfiles (it could be measured by votes) or karaoke game (it could use some algorithm on txt file to determine difficulty).

I would say, yes it has to be part of the txt file. Why?

Yes i'd agree such a thing can be handy, but it pretty subjective as @bohning pointed out.

To sum it up: regardless of certain subjectiveness, #difficulty comes in handy. it's a progress. I guess a lot of people can often distict between this triangle of easy-medium-hard successfully and update it manually in usdb. So let's put it into v1.1.0 (with recommendation to build an algorithm/use voting).

Nianna commented 9 months ago

If you want to store some info in the txt file you have to accept that:

So in a year time maybe, maybe 5% of my collection will have it defined - I have several thousands songs and only a small percentage of them comes from usdb, not everyone uses solely usdb manager/usdb-syncer/usdb.

On the other hand if the algorithm was implemented in the game, then:

For the value to be searchable it does not have to be calculated on the fly. It can be calculated once while loading txt files on the game start up (I guess the searchable tags are cached in the memory anyway) or retrieved from a local db and loaded on the start up.

I agree it's a nice feature. Just want to point out that by adding it as a tag we are going to limit it to only new songs (and probably only from usdb). Having it in the game would make it work for all songs.

marwin89 commented 9 months ago

SUMMARY / VOTE NOW πŸ“ˆ βœ‹

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

Please vote for this issue till 31th oct 2023 with emoticon πŸŽ‰ / πŸš€ / ❀️ .

πŸš€ A: Don't introduce #DIFFICULTY-tag in txt-file ( but games should calculate them according to an algorithm) to reduce subjectiveness πŸŽ‰ B: Introduce #DIFFICULTY in txt-file (but ideally users vote an average value in usdb, dynamically synced with usdb-syncer) to reduce subjectiveness ❀️ C: Do not introduce #DIFFICULTY

What?

DIFFICULTY describes how easy or hard a song is to sing. do not confuse it with the general difficulty setting "easy - medium - hard" of the game. VALUE: BEGINNER, ADVANCED, EXPERT (its up to the games how it would be visualised e.g. stars ***). An easy song is slow, has low pitch variations, lots of gaps between notes, short song, etc.

Why this tag?


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

DIFFICULTY

DIFFICULTY describes how easy or hard a song is to sing. This helps you when you want to warm up or are an unexpierenced singer. Or you explicitly search for challanges. Do not confuse it with the general difficulty setting "easy - medium - hard" of the games. In general an easy song is slow, has low pitch variations, lots of gaps between notes, short song, etc. There are three values: EASY, MEDIUM, HARD.

marwin89 commented 8 months ago
marwin89 commented 7 months ago

SUMMARY / RESULT 🚩

Thanks for voting. Here is the final result for this issue.

We do not introduce #DIFFICULTY (option C) for now. 2 πŸŽ‰ / 5 πŸš€ + ❀

I may re-open the issue if the overall conditions for development and txt-hosting change.