Special thanks to Ryuusei Aika for an English translation
Chinese version
Realization of maximize/minimize the star rating by using the relation enter offset and star rating
Premise: what we called "difficulty" below means the map's "original" difficulty (based on objects), and what we called "star rating" means the map's "external" difficulty (be shown on the upper-left of map choosing page or text-play interface in editor).
This thread wants to discuss about that even the "difficulty" is the same, the "star rating" can be different.
TL;DR: focus on bold parts and you can understand my meaning and methods(hopefully).
First of all, I don't know how Tom94 built up that difficulty calculating system and nor the detailed algorithm. However, in recent years, there are always some people keep studying the pp algorithm, and of course, how much pp a map have depends on its difficulty.
So, for now, we can learn that it basically depends on Aim (distance enter objects) and Speed (density of objects, the influence of bpm also counts). Of course those factors are not all whose determine a map’s difficulty; there are also Quantity of objects (for current ScoreV1 system that specifically means the quantity of circles, because only circles can have 50 or 100 when we hit them too early or too late), Length (not quite sure though because theoretically, longer is a map, more objects that map has), Mods (HD/FL/NF/SO have bonus/punishments on pp calculating and HR/EZ/DT/HT re-calculate the difficulty of the whole map) etc.
For example, a full-size 5* map will give more pp than a tv-size 5* map to players with the same accuracy and near difficulty, and it’s the Quantity of objects that create such difference.
Speaking of which, above “difficulty” isn’t the point; the point is, we discovered that using different offsets will cause changes on star rating, while the difficulty stays the same. Why?
I believe that many mappers will have this kind of questions: “I just changed a mp3 and the offset then the star rating becomes higher/lower?? With the literally same objects???”
Well, I don’t understand exactly why. What I can say for now is that it’s a little bug in the difficulty algorithm. However, I don’t understand the detailed algorithm too, so I cannot make a conclusion here. Personally, I guess the reason that causes such problem is the millisecond error created by objects when offset changes. Similarly, If change offset can influence star rating, so by “taking advantage of” this bug, we can have a different star rating on different offset so that we can maximize/minimize star rating. Meanwhile, star rating will influence how many pp a map will have so that’s equal to maximize/minimize pp.
I have studied those issue for several weeks, and here is my conclusion:
Here is an example of which I successfully maximize the star rating: SawanoHiroyuki[nZk]Tielle - Into the Sky
(Don't update beatmap because the offset of latest version has been changed)
Example 1 speak volumes of how to maximize the star rating with changing offset when SBP occurs. However, in the great mass of maps, SBP will not occur.
So below is another example (more common) that we also maximize the star rating even the SBP doesn’t occur: Duca - Clover (Don't update beatmap because the offset of latest version has been changed)
Besides, if you have tried those methods but you can not have a higher star rating, then you can choose either Nmax or Dmax as the offset, depends on you prefer that you want the player to gain pp from no mod or dt mod. You can also use another offset, like the average value of Nmax and Dmax.
So now, I have introduced a method which can maximize/minimize the star rating only by editing the mp3 file. You can use audio editing software (Audition/GoldWave/Audacity etc.), and add or delete the “silence part” on mp3 based on original and your new offset; of course it needs a little bit technology on audio editing. Besides, keep in mind that in many of that kind of software, their inner mp3 encoder is not that good, so the mp3 file’s quality may reduce after your editing and saving. So the best way is to use 320kbps mp3 for editing (ape/wav/aac are also fine, but the translation from other formats to mp3 will usually add a silence part at the beginning with random length (10-100ms) so that makes it become much more harder to find the correct offset. So, you can firstly translate them into 320 kbps and then edit them because at last you cannot use anything higher than 192kbps). And after that use a high-quality encoder (the most accepted high-quality encoder is called lame) to export 192kbps mp3.
At last, here are some notices and known questions:
If you are interested in maximize/minimize the star rating or have some questions about my explanation, you can directly ask here; additional remarks are also welcome.
Chinese version
Realization of maximize/minimize the star rating by using the relation enter offset and star rating
Premise: what we called "difficulty" below means the map's "original" difficulty (based on objects), and what we called "star rating" means the map's "external" difficulty (be shown on the upper-left of map choosing page or text-play interface in editor).
This thread wants to discuss about that even the "difficulty" is the same, the "star rating" can be different.
TL;DR: focus on bold parts and you can understand my meaning and methods(hopefully).
First of all, I don't know how Tom94 built up that difficulty calculating system and nor the detailed algorithm. However, in recent years, there are always some people keep studying the pp algorithm, and of course, how much pp a map have depends on its difficulty.
So, for now, we can learn that it basically depends on Aim (distance enter objects) and Speed (density of objects, the influence of bpm also counts). Of course those factors are not all whose determine a map’s difficulty; there are also Quantity of objects (for current ScoreV1 system that specifically means the quantity of circles, because only circles can have 50 or 100 when we hit them too early or too late), Length (not quite sure though because theoretically, longer is a map, more objects that map has), Mods (HD/FL/NF/SO have bonus/punishments on pp calculating and HR/EZ/DT/HT re-calculate the difficulty of the whole map) etc.
For example, a full-size 5* map will give more pp than a tv-size 5* map to players with the same accuracy and near difficulty, and it’s the Quantity of objects that create such difference.
Speaking of which, above “difficulty” isn’t the point; the point is, we discovered that using different offsets will cause changes on star rating, while the difficulty stays the same. Why?
I believe that many mappers will have this kind of questions: “I just changed a mp3 and the offset then the star rating becomes higher/lower?? With the literally same objects???”
Well, I don’t understand exactly why. What I can say for now is that it’s a little bug in the difficulty algorithm. However, I don’t understand the detailed algorithm too, so I cannot make a conclusion here. Personally, I guess the reason that causes such problem is the millisecond error created by objects when offset changes. Similarly, If change offset can influence star rating, so by “taking advantage of” this bug, we can have a different star rating on different offset so that we can maximize/minimize star rating. Meanwhile, star rating will influence how many pp a map will have so that’s equal to maximize/minimize pp.
I have studied those issue for several weeks, and here is my conclusion:
- For a no mod map, it’s offset “loops for every 400ms” (For example, one map’s offset is 12ms, and its star rating at 412ms is the same with whose at 12ms. Of course star rating keep the same when the offset is 812/1212/1612… ms.
- For a dt mod map, it’s offset “loops for every 600ms” (dt mod divide the length of the map by 1.5 so the offset is multiplied by 1.5). For example(the same with no mod), one map’s offset is 12ms, and its star rating at 612ms is the same with whose at 12ms. Of course star rating keep the same when the offset is 1212/1812/2412… ms.
- Here we may have a specific case (I called it “single barycenter point” = SBP personally) and it means: when we have found offsets that maximize/minimize the star rating of no mod and dt mod (for convenience we note Nmax/Nmin/Dmax/Dmin for offset that maximizes the star rating of no mod/minimizes the star rating of no mod/maximize the star rating of dt mod/minimize the star rating of dt mod), at least one of the following differences: |Dmax-Nmax| or |Dmin-Nmin| equal(s) to 0 or 200(ms). That case means offsets can maximize/minimize the star rating of no mod and dt mod are “not conflict with each other” = “We can have an offset that maximize/minimize the star rating of no mod and dt mod at the same time”.
If the difference is 0, then we have already found the offset we want. If the difference is 200, then we just need to calculate [The LCM (= Lowest Common Multiple) of times for which the offset of no mod and dt mod “loop”]/2+(Dmax or Dmin) = [400,600]/2+(Dmax or Dmin) = 1200/2+(Dmax or Dmin) = 600+(Dmax or Dmin), and the result is the offset that (maximize or minimize) the star rating.
Here is an example of which I successfully maximize the star rating: SawanoHiroyuki[nZk]Tielle - Into the Sky
(Don't update beatmap because the offset of latest version has been changed)
Example 1
This mapset’s original offset is 412ms, and we take diff “Kencho’s Mobile Suit”. By using the program we can have 601 diffs, which offsets is 0, 1, …, 600. Then, by using osu!’s calculate system on no mod, we can find that Nmax = 261ms and Nmin = 64ms.
With original offset = 412ms, this diff’s difficulty is 5* while with offset = Nmax = 261ms, difficulty increase to 5.05* and with offset = Nmin = 64ms, difficulty decrease to 4.97*. Quite a big change.
Then, by using the same method on dt mod, we find that Dmax = 461ms (6.99*), Dmin = 246ms(6.87*).
So at that time, SBP occurs [|Dmax-Nmax| = |461-261| = 200(ms)], also means Dmax and Nmax are “not conflict with each other”. So for maximizing the star rating, we can take (600+Dmax) = 1061ms as the offset, with 5.05* in no mod [pic1] and 6.99* in dt mod [pic2], both are the maximum star rating values.
So, we can take 1061ms as offset to maximize the star rating in this example.
With original offset = 412ms, this diff’s difficulty is 5* while with offset = Nmax = 261ms, difficulty increase to 5.05* and with offset = Nmin = 64ms, difficulty decrease to 4.97*. Quite a big change.
Then, by using the same method on dt mod, we find that Dmax = 461ms (6.99*), Dmin = 246ms(6.87*).
So at that time, SBP occurs [|Dmax-Nmax| = |461-261| = 200(ms)], also means Dmax and Nmax are “not conflict with each other”. So for maximizing the star rating, we can take (600+Dmax) = 1061ms as the offset, with 5.05* in no mod [pic1] and 6.99* in dt mod [pic2], both are the maximum star rating values.
So, we can take 1061ms as offset to maximize the star rating in this example.
Example 1 speak volumes of how to maximize the star rating with changing offset when SBP occurs. However, in the great mass of maps, SBP will not occur.
So below is another example (more common) that we also maximize the star rating even the SBP doesn’t occur: Duca - Clover (Don't update beatmap because the offset of latest version has been changed)
Example 2
This mapsets' original offset is 1230ms. We use the same program and method to find out offsets which can maximize/minimize the star rating, by using the “Clover” diff as standard.
Results is: Nmax = 381ms/Nmin = 63ms, and Dmax = 372ms/Dmin = 1ms. This time neither |Dmax-Nmax| nor |Dmin-Nmin| equals to 0 or 200, so SBP doesn’t occur.
So how to find out the offset which can maximize the star rating? In fact, we still have some methods but it needs to make some choice and the luck also counts a bit.
In the 381ms ver, star rating for no mod is 4.01* and for dt mod is 5.57*. Meanwhile, those two values are 4* and 5.58* in the 372ms ver; not a big difference between those two versions. But, as an obsessive mapper, I still want to try my best to reach the maximum star rating.
My method is, add respectively 800ms and 400ms to Nmax (that’s because they are multiples of 400ms – which make the star rating of no mod “loops”, and not 1200ms because it’s the LCM of times which make the star rating of both no mod and dt mod “loop”) then find out if those two version have higher star rating in dt mod.
But here the result is at 781ms and 1181ms, their star ratings for dt mod are even lower then whose in 381ms, so those two offsets are out.
However, there still have a possible solution: add 600ms to Dmax (same reason with above) then find out if this version has higher star rating in no mod. And this time, for the 972ms ver, it’s star rating come back to 4.01* in no mod [pic3] (even due to osu! can only show two first digits after the decimal point for difficulty value, star rating for 972ms ver has been “upvaluated”, means actually star rating of Nmax=381ms is still higher then whose of 972ms but osu! cannot directly tell us that. If you can put them into one mapset you can use “sort by difficulty” to see which one has the higher difficulty though). However, compared with Dmax = 372ms, the 972ms ver has higher difficulty in normal mod and can also keep the maximum difficulty (5.58*) in dt mod [pic4].
So, we can take 972ms as offset to maximize the star rating in this example.
Notice: this song has sounds before 1230ms, so we cannot directly cut this song from 972ms; However, we can add 1200ms “silence” before the song, and so the final offset become (972+1200) = 2172ms.
Results is: Nmax = 381ms/Nmin = 63ms, and Dmax = 372ms/Dmin = 1ms. This time neither |Dmax-Nmax| nor |Dmin-Nmin| equals to 0 or 200, so SBP doesn’t occur.
So how to find out the offset which can maximize the star rating? In fact, we still have some methods but it needs to make some choice and the luck also counts a bit.
In the 381ms ver, star rating for no mod is 4.01* and for dt mod is 5.57*. Meanwhile, those two values are 4* and 5.58* in the 372ms ver; not a big difference between those two versions. But, as an obsessive mapper, I still want to try my best to reach the maximum star rating.
My method is, add respectively 800ms and 400ms to Nmax (that’s because they are multiples of 400ms – which make the star rating of no mod “loops”, and not 1200ms because it’s the LCM of times which make the star rating of both no mod and dt mod “loop”) then find out if those two version have higher star rating in dt mod.
But here the result is at 781ms and 1181ms, their star ratings for dt mod are even lower then whose in 381ms, so those two offsets are out.
However, there still have a possible solution: add 600ms to Dmax (same reason with above) then find out if this version has higher star rating in no mod. And this time, for the 972ms ver, it’s star rating come back to 4.01* in no mod [pic3] (even due to osu! can only show two first digits after the decimal point for difficulty value, star rating for 972ms ver has been “upvaluated”, means actually star rating of Nmax=381ms is still higher then whose of 972ms but osu! cannot directly tell us that. If you can put them into one mapset you can use “sort by difficulty” to see which one has the higher difficulty though). However, compared with Dmax = 372ms, the 972ms ver has higher difficulty in normal mod and can also keep the maximum difficulty (5.58*) in dt mod [pic4].
So, we can take 972ms as offset to maximize the star rating in this example.
Notice: this song has sounds before 1230ms, so we cannot directly cut this song from 972ms; However, we can add 1200ms “silence” before the song, and so the final offset become (972+1200) = 2172ms.
Besides, if you have tried those methods but you can not have a higher star rating, then you can choose either Nmax or Dmax as the offset, depends on you prefer that you want the player to gain pp from no mod or dt mod. You can also use another offset, like the average value of Nmax and Dmax.
So now, I have introduced a method which can maximize/minimize the star rating only by editing the mp3 file. You can use audio editing software (Audition/GoldWave/Audacity etc.), and add or delete the “silence part” on mp3 based on original and your new offset; of course it needs a little bit technology on audio editing. Besides, keep in mind that in many of that kind of software, their inner mp3 encoder is not that good, so the mp3 file’s quality may reduce after your editing and saving. So the best way is to use 320kbps mp3 for editing (ape/wav/aac are also fine, but the translation from other formats to mp3 will usually add a silence part at the beginning with random length (10-100ms) so that makes it become much more harder to find the correct offset. So, you can firstly translate them into 320 kbps and then edit them because at last you cannot use anything higher than 192kbps). And after that use a high-quality encoder (the most accepted high-quality encoder is called lame) to export 192kbps mp3.
At last, here are some notices and known questions:
- In the same song, if it’s SBP are on the different position (like for diff A it’s in the first 10 seconds while for diff B it’s in the last 10 seconds, so in that case their SBPs are already different), Dmax/Nmax/Dmin/Nmin are different too. So it’s important that you must find those 4 values after the mapset has been finished. Absolutely, normal mapset will have more than 1 diff, especially for those who have many Insane+ diffs, so their SBP is nearly impossible the same (Except if the distribution of objects, ratio of distance etc. are all the same in every difficulty, but it’s nearly impossible), means that their 4 values are generally different. So it needs to make some choices here. But generally, we take the highest diff as standard. Take SawanoHiroyuki[nZk]Tielle - Into the Sky, the “Kencho’s Mobile Suit” and “Insane” diffs are a good example (you can study that by yourself).
- If the difficulty barycenter of mapset itself is concentrate on one segment, then the SBP will be more possible to occur. If the difficulty barycenter of mapset is average (like Easy/Normal or some average Hard/Insane), then the barycenter will be easily dispersed and the SBP will be less possible to occur.
- Theoretically for maps have more big jumps (pay more attention to the Aim), their star rating varies more when the offset changes, while for maps have more streams (pay more attention to the Speed), their star rating varied less when the offset has difference. True, star rating range depends on the star rating of the map itself, but maybe the bpm has more influence.
- Maps with 50/100/200 bpm has (1200*n, n is a natural number) as Dmax/Nmax. Personally I guess that’s because those kind of bpm can divide 60000, not knowing the exact reason though [you can change the offset of the highest diff of https://osu.ppy.sh/s/295946 to 1200ms and its star rating will become 5.55* (it’s already ranked, so sad that I didn’t study this at that time TAT).
- Maps with multi-bpm also have a Dmax/Nmax/Dmin/Nmin value and the algorithm is nearly the same. But it’s inner algorithm will become much more complex, so the range of star rating can be fuzzy. An example (you can study that by yourself): Wan Ho-Kit, Lee Hon-Kam - Unknown Title
If you are interested in maximize/minimize the star rating or have some questions about my explanation, you can directly ask here; additional remarks are also welcome.