Syncing made easy (kind of)
I use mute's syncing method, which is explained on r21freak in very little detail. In this guide, I hope to elaborate on this method and add some of my own touches, and hopefully this method will lessen the initial pain of syncing for the new stepper.
First a few introductory notes of scolding:
- Having a BPM that is off by 0.010 is not acceptable. If your BPM is set at 140.010 while the actual BPM is 140.000, over the course of two minutes, your song will drift early by around 9 ms, which is noticeable. And don't even get me started by calling a BPM estimate to the nearest 0.100 "close." Using 140.100 BPM for a 140.000 BPM song will cause an 86 ms drift after two minutes, which means if you step perfectly on beat, you will end up with a great. Bottom line is, try to get your BPMs as exact as possible. Stepmania rounds to the nearest 0.001 BPM by default, so that is the level of accuracy we aim to get.
- Syncing by ear or by keyboard FA is (in most cases) not acceptable (at least to me and mute). As long as your waveforms are friendly, nothing beats mute's visual syncing method.
This guide assumes that you have a song without weird BPM changes and with minimal drift. In the case of weird BPM changes, you'll need cut the song into pieces and perform the steps below for each piece. For drifty songs, the easiest solution I can offer for now is don't step the song. It is possible, but requires techniques beyond the scope of this guide.
Step 1: Open the file Stepmania>Data>Stepmania.ini, and set GlobalOffsetSeconds = - 0.012 (note the negative value). This will likely force your keyboard FA and assist ticks to be offsync, but your Stepmania will be synced with a generic ITG machine with a pad.
Step 2: Calculated the estimated BPM of your file using MixMeister BPM Analyzer. Note that this value is an estimate. We will perform diagnostics later to obtain the exact BPM.
Example:
[Reveal] Spoiler: Step 2
Here is what I get in MixMeister for the file I'm currently syncing (Lollipop by Aqua)

The integer value is a good sign in general with electronic music. Often but not always this value turns out to be exact, and often but again not always MixMeister may give you a value like 138.99 which suggests that the actual value might really be 139.00.

The integer value is a good sign in general with electronic music. Often but not always this value turns out to be exact, and often but again not always MixMeister may give you a value like 138.99 which suggests that the actual value might really be 139.00.
Step 3: Open up your file in Stepmania Editor and set your BPM according to the MixMeister value. In SM 3.95 I can simply go to the "Edit BPM Change" menu.
Step 4: Now it's time to find the offset. Find the first "strong" beat in the music (i.e. sharply defined waveform) and move your cursor in Stepmania to the corresponding beat (note that in SM, the first beat is beat 0, so the beat labeled 4.000 is the fifth beat of the song, after four beats have elapsed). To clarify, a lot of the time, this beat is the very first beat of the song, which is most convenient, but sometimes a song will start quietly and build up. You'll want to count how many beats go by until that point and move your cursor to that beat (for most cases, it should fall right at the beginning of a measure).
Step 5: Now go to your song in Audacity and find the waveform peak that corresponds to that point in the music that you decided on. Zoom in until the resolution is 0.010 s per tick, and position the cursor a little bit to the left of the waveform peak. Note the time value given at the bottom of Audacity, and write down both the beat number as given in Stepmania and the time as given in Audacity. The amount of space you leave between the cursor and the peak will depend on the shape of the waveform itself, along with other factors like personal bias towards earliness/lateness of sync. Refer to my example for the amount of space I give.
Example:
[Reveal] Spoiler: Step 5
My song has a quiet beginning, so I am skipping ahead 48 beats (which I counted by listening) and syncing at that point.


Step 6: Now go back to Stepmania and notice the "Current sec" on the right side. Use F11/F12 to adjust the offset (hold down Alt for finer tuning) until that value matches the value given in Audacity (when rounded to the nearest thousandth of course).
Example:
[Reveal] Spoiler: Step 6

Step 7: Now it's time to perform some diagnostics to check if the BPM is correct (or in the case of a slightly drifty song, the best possible BPM). First, play a little bit of your song in Stepmania to check if the BPM is at least close.
Step 8: The goal is that the waveform peaks match the second values as given in Stepmania at all points in the song. There are many specific methods of doing this, and it's going to vary from song to song, but for this example, with its presumably constant BPM, what we will do is find the last "strong" beat in Audacity and note the time value. Remember to zoom in to 0.010 s resolution and try to leave roughly the same amount of separation between your cursor and the peak as in Step 5.
Example:
[Reveal] Spoiler: Step 8
There are some beats in my song that come after this, but aren't as well-defined. As long as you find a nice-looking beat that comes as late in the song as possible, you'll be in good shape.


Step 9: Now scroll way down in Stepmania until the "Current sec" value is either the same or almost the same as the time value you just obtained. (Warning: Be careful if the initial BPM estimate was way off, as a beat may have been skipped somewhere.) If the value is correct, then move to Step 11. Otherwise, note the "Current beat" value in Stepmania and move to Step 10.
Example:
[Reveal] Spoiler: Step 9

Step 10: Let's now do some math to find the exact BPM. Remember the values you wrote down for "Current beat" and "Current sec" at the offset point? Find the difference between the two beat values and write it down. Then find the difference between the two time values (from Audacity, not from Stepmania where the later value is incorrect) and write it down. Now divide the beat difference by the time difference and multiply that result by 60. Round to the nearest thousandth and there's your value!
In mathematical terms:

Example: After some Stepman math, I get BPM = 60 x (470 - 48) / (203.315490 - 21.151533) = 138.9957, rounding to 138.996.
Step 11: Adjust your BPM if necessary, making sure to go back to your offset point and changing the offset until the "Current sec" value matches there too. Now in Audacity, locate "strong" peaks at various points in your song and check that they match with the "Current sec" value in Stepmania, following the method already used twice previously. If the matching is good, then you're done! If not, either the BPM value is still wrong and you'll need to start again, possibly using different reference points, or the song drifts, which is okay as long as the peaks don't go off by more than a few milliseconds. If the drift is large, the solution to that problem is beyond the scope of this guide. Anyway, at this point, hopefully you have a synced song and are ready to cut!












