UltraStar-Deluxe / format

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

Make linebreak timings optional? #64

Open bohning opened 2 months ago

bohning commented 2 months ago

Suggestion

The linebreak timing seems to be mandatory at the moment (at least in USDX), but it could be made optional, thus letting the application handle the (ideal moment of) transition between lyric lines. Melody Mania an Performous seem to consider linebreak timings optional, while they are currently mandatory for USDX (will not load the file), YASS (will corrupt the file upon save, preprending # to all linebreaks) and UltraStar Manager (will corrupt the file upon save, deleting all linebreaks).

Use case

If the linebreak timing is optional, the application could handle the transition, and may or may not respect explicitly stated timings. This would simplify the file format.

Extra info/examples/attachments

No response

Baklap4 commented 2 months ago

Will try later tonight in performous. As i'm not sure if the timing element is needed.

So basicly you'll want this to be the norm in the txt format:

: 52 15 2 lyrics
-
: 68 2 -2 other lyrics

Instead of the currently mandatory linebreak timing:

: 52 15 2 lyrics
- 68
: 68 2 -2 other lyrics
bohning commented 2 months ago

I tried in Performous, the file is loaded and plays just fine without linebreak timings. So obviously Performous does the calculation itself already (so the question is: does it ignore the set timings and always use the internal calculation, or does it respect the explicitly state linebreak timing if it is present, but calculates it when it is missing?).

We could debate what the default/norm should then be, or we could discuss of how to handle both cases (as currently the vast majority of txt files contain linebreak timings).

The software should be able to handle files both with and without linebreak timings. It may (or should, or must) respect explicitly stated linebreak timings (allow customization), or this could be a setting (e.g. "always recalculate linebreak timing" vs. "always use linebreak timings of the txt file if present").

Baklap4 commented 2 months ago

https://github.com/performous/performous/blob/master/game/songparser-txt.cc#L188C1-L198C4

This is what performous does under the hood, So it either reads the time and shifts the lyrics (relative mode) or when not available goes to the next note. consecutive sleeps are ignored

I think it'd be wise to discuss how to handle both cases as both cases are around (your option of a setting might be good, but also might be unnecessary if the fallback is to always calculate it). I do like the explicitness as we also do with the E note-type. But i agree that the program can/should be able to handle both cases as this makes for a smoother experience for the end-user.

bohning commented 2 months ago

See for example: https://usdb.animux.de/index.php?link=detail&id=29342

basisbit commented 2 months ago

there are plenty of songs out there which rely on the linebreak timing to "hide" the upcoming line until the last moment for various reasons. Please don't break this, instead I suggest supporting both cases.

Baklap4 commented 2 months ago

there are plenty of songs out there which rely on the linebreak timing to "hide" the upcoming line until the last moment for various reasons. Please don't break this, instead I suggest supporting both cases.

Yes that was a behavior i'm still wanting to test within performous. Within performous we also have an option that says "Press enter to skip instrumental break". I think that also relies on this.

achimmihca commented 2 months ago

there are plenty of songs out there which rely on the linebreak timing to "hide" the upcoming line until the last moment for various reasons.

And I think this is a valid use case.

However, I also think that it should not be mandatory to add these linebreak timings. When not present, then it is responsibility of the game to find the best suited linebreak timing. Might make life easier for song creators.