JosephEoff / MuseScore_UltraStar_Exporter

MuseScore plugin to create UltraStar files
GNU General Public License v2.0
0 stars 3 forks source link

High-Accuracy mode #9

Closed jeetee closed 8 years ago

jeetee commented 8 years ago

When using real BPM in the resulting file(see pull request, the smallest possible note-representation is 1/16th. Unfortunately this means that smaller notes -but also triplets- can not be rendered accurately.

The internet seems to suggest that most 'good' files have an artificial BPM scaling with a resulting BPM between 200-300. According to this page one of the more popular song editors automatically scales the BPM times 2. The Ultrastar Deluxe manual(pdf) mentiones that BPMs below 100 can be an indicator of a bad timing quality file.

So far I couldn't find any indication of a maximum value for the BPM. Performous reads it as a minimal 32bit floating point value (github::Performous::SongParser-txt). Therefor I would go for the lowest possible scaling that support the smallest note mentioned on the MuseScore TickValues page and keeps all the values as integers (exact accuracy). As a result, a song with a real BPM of 60, would in High Accuracy Mode be exported with a BPM of 1440

High Accuracy Mode would be a checkbox in the dialog, saved in the settings.

Reference Table for all the ticklengths:

Note MuseScore Tick Length 'BPM-correct' Ticks Minimal Integer Ticks
whole note (semibreve) 1920 16 384
double-dotted half note 1680 14 336
dotted half note 1440 12 288
triplet whole note (1/3 of breve) 1280 10,6667 256
half note (minim) 960 8 192
double-dotted crochet 840 7 168
dotted crochet 720 6 144
triplet half note (1/3 of semibreve) 640 5.3333 128
1/4 note (crochet) 480 4 96
double-dotted quaver 420 3,5 84
dotted quaver 360 3 72
triplet crochet (1/3 of minim) 320 2.6667 64
1/8 note (quaver) 240 2 48
double-dotted semiquaver 210 1,75 42
dotted semiquaver 180 1,5 36
triplet quaver (1/3 of crochet) 160 1.3333 32
1/16 note (semiquaver) 120 1 24
double-dotted demi-semiquaver 105 0,875 21
dotted demi-semiquaver 90 0,75 18
triplet semiquaver (1/3 of quaver) 80 0.6667 16
1/32 note (demi-semiquaver) 60 0,5 12
dotted hemi-demi-semiquaver 45 0,375 9
triplet demi-semiquaver (1/3 of semiquaver) 40 0,3333 8
1/64 note (hemi-demi-semiquaver) 30 0,25 6

This is how I envision this feature at the moment; please comment if you think a different approach would be more desired or have any other remarks.

JosephEoff commented 8 years ago

Sounds good. I didn't understand your scaling approach the first time you proposed it, and was surprised at the BPM and time stamp numbers that it generated the one time I had the time to try it out.

I see you've posted some more pull requests. I'll check them over and see about merging them.

I must apologize for taking so long to react to your first request. The combination of holidays, conversion to Voice over IP at home, and change of ISP at home made a complete mess of everything internet related. Things are straightened out now, so I'm trying to get caught up.