A song editor for "Frets On Fire"

# CREATING CUSTOM CHARTS FOR IMMERROCK

IMMERROCK (https://immerrock.com/) is an Augmented Reality guitar game and learning tool for Meta Quest 3, Quest 3S and Quest Pro. Like Rocksmith, it presents you with songs that have guitar tablature that scrolls toward you. Unlike Rocksmith, the notes can scroll all the way up to your guitar. The game is in early access, so as of yet it will not score your playing, but it is an immersive way to practice guitar. The game has many guitar exercises for practicing scales, chords and classic songs. Most importantly, it allows users to bring in their own custom songs, and there is an enormous wealth of those that have been made for rhythm games like Phase Shift, Clone Hero, Rock Band 3 and Rocksmith. IMMERROCK also presents the ability to practice a song in sections and can even show suggested finger placements from the custom chart author with a virtual fretting hand.

# GETTING STARTED WITH EOF

It's recommended to read through the main tutorial in EOF's Help menu to get a quick idea of EOF's basic use, and to skim through the manual if you're curious about what any of the menu functions do. The Help>Keys function also lists various keyboard controls that you may find helpful. Since EOF has been around for so long, there are also many written and video guides/tutorials on the Internet for how to use it. I'll try to gloss over the process in this guide. My recommendation for the base settings is to use Rex Mundi input method (File>Preferences>Preferences, bottom left corner of the options) which allow you to position the mouse with one hand, and toggle gems on/off at that timestamp by pressing number keys 1 through 6 with the other hand. Also in the preferences, you can enable the "Inverted notes" option to have lane 1 (ie. low E string) be at the bottom of the piano roll instead of at the top, so that it is in the same string order as with guitar tablature. I habitually use the lowest built-in EOF window size (File>Display>Display) of 640x480, but I also enable a Notes panel (File>Display>Notes Panel) to increase the width by another 50% so I can see more of the chart at a time. You can use a higher resolution or define your own window size, but if EOF's performance suffers and starts lagging, you may get better results by enabling a small resolution and using the "File>Display>x2 zoom" option, which is a less computer-intensive way to get a larger view. You can also use different monitor resolution sizes, scaling options or magnification options in your Operating System if you prefer, but that takes more effort in my experience.

# STARTING A NEW PROJECT

If you are going to import pro guitar content, please refer to these guides:
For importing Rock Band 3, Phase Shift, Clone Hero or YARG format content: [MIDI IMPORT GUIDE]
For importing Rocksmith format content: [ROCKSMITH IMPORT GUIDE]
For importing Guitar Pro format content: [GUITAR PRO IMPORT GUIDE]
First, determine whether you are going to import an existing MIDI or Rocksmith chart. If so, you can skip straight to the [MIDI IMPORT GUIDE] or [ROCKSMITH IMPORT GUIDE] as those chart formats will already be synchronized to music, but it doesn't hurt to know how to evaluate and fix problems with the imported chart by following the steps described below. If you plan to import a Guitar Pro file, EOF supports importing Guitar Pro timing created by the application Go PlayAlong (https://goplayalong.com/). Before Guitar Pro provided a way for users to synchronize guitar tab to music, Go PlayAlong was available and was a reasonably popular option for people who preferred its synchronizing workflow over EOF's. It has features to simplify/automate synchronizing the tablature and while it isn't very expensive, it does have a cost. There is a trial version available so you can compare its workflow against EOF's. The trial probably will not have a way to save the timing in a way you could import into EOF, but if you have the paid version and have exported the timing for the Guitar Pro tablature you would like to import into EOF, read the [GUITAR PRO IMPORT GUIDE]. Otherwise, if you are creating a project from scratch or plan to import a Guitar Pro file after synchronizing the beats manually, continue reading.

# CREATING AND BEAT SYNCING A PROJECT

EOF has a piano roll style of editing rhythm game charts that isn't very different from a traditional MIDI editor. To create a chart from scratch, you need to have audio for the song you want to chart in OGG, WAV or MP3 format. EOF will convert the given audio file into OGG format to use that internally as well as when exporting the audio for IMMERROCK later. To create a new project, I suggest creating a new folder (designated as the "project folder") on your computer to keep the files separate from everything else. Then put your audio file in the project folder. In EOF, use File>New and browse for that audio file. Then specify the artist name and song title and click OK.
Pick the option to use the source audio's folder for the location of the new song. This will direct EOF to put the project file (notes.eof) in the project folder with the audio instead of creating a different folder. Now you will have a default chart with a tempo of 120 BPM, which by tradition of the MIDI standard is the default tempo of any song until it specifies otherwise. Each of the --> arrows above the piano roll represent a "beat marker", and as per the math of 120 BPM, they are 500ms (one half second) apart. Press F5 to show a waveform graph of the song. The spikes in the graph that you see in many modern songs are typically the drummer and you will want to synchronize the beat markers --> with the drums to get a chart that feels like it is well synchronized.
A typical strategy to begin with is to click and drag the first beat marker to line up with the first spike in the graph.
You can use a touchpad if you're working on a laptop, but a mouse is recommended. However if your mouse/touchpad isn't cooperating well enough to make very finely tuned adjustments here, you can open Song>Properties and manually edit the timestamp of the first beat marker in the Delay field at the bottom left. This timing is in milliseconds, and this delay has a special meaning in many rhythm games in that it is an offset between the audio and the chart content itself. For example with this chart, all of the notes will be defined in the final IMMERROCK MIDI file as relative to the first beat marker position. In the case of this example chart, the chart's metadata will indicate that the defined notes are actually 396ms later than the MIDI file indicates. Defining a separate delay allows a really quick and easy way to adjust the chart's sync with the audio.
After the first beat marker is positioned, the best thing to do next is to set a good tempo on the first beat marker to match the general tempo of the song. This will make the rest of the beats closer to the drummer and as a result, synchronizing the rest of the song will take less work. You can look up the tempo online or use any tool you prefer. EOF even has a built-in tool for this with "Beat>BPM>Estimate BPM", which uses the MiniBPM utility from breakfastquay (https://breakfastquay.com/minibpm/) to analyze the audio, guess the tempo and offer to set that tempo on the first beat. In the case of this example, it suggested a tempo of 113.31BPM. Your mileage may vary, but unless the song is electronically produced to have a perfectly steady beat, you're probably going to find that you need to adjust the tempo manually:
There are different approaches you can take to get a good starting tempo, but my preferred method is as follows:
Select a beat marker a few beats in and move it to the peak in the waveform graph it should line up with:
This turns the beat into an "anchor", which is a beat marker whose position is now set and won't be influenced by clicking and dragging beat markers that come before it (the only exception to this is the first beat marker which can always be moved because it is an offset for the whole project). Visually, an anchor will always have a downward red arrow pointing at the piano roll instead of just a vertical line, even if it doesn't reflect a change in tempo. You can see that the first beat marker's tempo was adjusted to make the beats short enough so that the anchor lines up with the position to which you dragged it. Defining the position of beat markers to line up with music this way is traditionally known as "beat syncing". The positions of the beat markers collectively is referred to as the "tempo map". Since the goal is to make the first beat marker's tempo more accurate, you can delete the anchor of the beat you just moved with the "Beat>Delete anchor" function.
You can now see that the anchor has been removed (no red downward arrow) and like all the other beats, it now has the same tempo as the last tempo change that occurs before it (the first beat marker), and the first beat marker's tempo has been made slightly more accurate. Having seen how that process works, a shortcut way of doing this without having to repeatedly delete the anchor after moving the beat is to hold the CTRL button while you left click and drag a beat marker. As long as there are no anchors after the beat you're dragging, it will adjust the previous anchor's tempo to reflect the position of the beat you are directly moving with the mouse.
Then going a few seconds further in, repeat the process to synchronize a beat to a waveform graph spike that looks like it's close enough to be meant to be in sync with the song.
You can move throughout the song by clicking the seek bar below the piano roll, by holding the left/right arrow keys, by seeking a beat at a time by pressing or holding PgUp or PgDn, by seeking a screen at a time with CTRL+PgUp or CTRL+PgDn, by clicking on the playback controls in the top right corner of the EOF window, by holding ALT and using the scroll wheel (to seek 5%, by default, of one screen full of the chart), etc. By the time I used this process on the first 30 seconds of the song, the first beat marker had trended toward 114.26BPM and you can see that at least the first screen-full of beat lines are reasonably close to the spikes in the graph:
You can go further into the song if you want, but at a certain point it won't make the tempo much more accurate, and this is just meant to be a rough estimate of the tempo anyway. Take this opportunity to save the project (File>Save). EOF doesn't crash/hang often but it's good to save your work once in a while in case you accidentally break something with the chart. EOF makes many undo states (which can be manually opened with File>Load if EOF does crash), but only one re-do state so you still need to be careful. EOF will make a spare backup of the project ("...backup.eof.bak") every 10 edits to the chart (every ten actions that are undo-able), but this backup gets overwritten each time it's made. Every time you save, the previous save of the project is saved as (...previous_save.eof.bak") but it is also overwritten by the last save of the project each time you save the project so unless you make spare copies of your project every so often, you can only revert by one file save. The "Save" function will report on various issues and offer various suggestions to cancel the save and perform other steps, but if you don't want to deal with any such prompts you can always use "Quick Save" instead, which will save as-is with no prompts.
Now that the first beat has a good starting tempo, you will work your way toward the end of the song aligning the beat markers to be reasonably in-time with the drummer, but this time you will keep the beats anchored to make the synchronizations permanent. Clicking and dragging the beat marker is usually fine for minor sync corrections, although there are keyboard controls (see Help>Keys's description of the - and = shortcuts) which can be used to granularly manipulate the tempo of the nearest anchor at or before the seek position. If a beat marker is already well lined-up with the drummer, you can make it an anchor (to ensure it stays synced and can't be moved out of place when you sync the rest of the chart). You can make a beat an anchor without having to move it (which causes its tempo to change) by middle clicking (ie. click the scroll wheel) while hovering the mouse over the beat. Alternatively you can select it by left clicking on the beat and using "Beat>Anchor beat" (or press the A key). By design, any beat that has a tempo change is required to be an anchor and cannot have its anchor status removed.
Looking at the waveform isn't enough, especially when other instruments in the song are loud enough to make it harder to see the drum part in the waveform. Audibly test the sync of the beat map by enabling the metronome (Edit>Metronome, or press the M key) and playing back the chart in EOF (press Spacebar to play/pause or use the playback controls at the top right corner of the program). The metronome ticks should sound like they play exactly on top of the drum beat as much as possible, only limited by how much time you're willing to spend beat syncing. If the song is too loud compared to the metronome, you can use the volume sliders in "Song>Audio cues" to lower the chart volume and make sound cues like clap and metronome easier to hear. If this isn't enough to help, you can try going into "File>Settings" and enabling the phase cancellation option (this uses noise cancellation to remove audio that is panned over the center of the audio channels which is often how the vocal stem is mixed in songs), or you can try enabling the center isolation option (basically the opposite of phase cancellation in that audio that isn't panned over the center of the audio is muted). While listening to the metronome during playback, if a metronome tick for a beat sounds like it's coming too late compared to the drum beat in the song, move that beat a little earlier. If the tick sounds like it comes too early, move the beat a little later.
You can play the audio at less than full speed if desired. Hold CTRL while starting playback to play at 50% speed. Hold CTRL and SHIFT while starting playback to play at 25% speed. Press ; or ' during playback to adjust the playback speed in 10% increments. Hold CTRL while pressing ; or ' during playback to adjust the playback speed in 1% increments.
It's normal that you only need to make small adjustments at a time, even in tens of milliseconds, because the waveform graph is typically a very good representation of the song's beat. Continue syncing the chart. It's best to go from beginning to end as much as you can without going in reverse order, because an anchor later in the chart could make it more difficult to resync several beats that come before it. Once you have roughly synced the song from start to finish, you can definitely go back and re-sync individual beat markers as you see fit if they stand out as being out of sync. You don't have to go as far as synchronizing every single beat, but depending on how steady the drummer's playing is, that may be necessary for some parts of a song (especially around drum fills). It's a common recommendation to sync a beat once per measure to keep the chart relatively well-timed. You can zoom in and out with the + and - keys on the number pad. If you want to see a larger amount of the waveform graph at a time, you can even use "Edit>Zoom>Custom" to zoom out more than the number pad - shortcut can by default (1/10). Here's what 1/20 zoom level looks like for this chart:
If you'd like to make the waveform graph smaller or larger on the Y scale, you can use the "Scale Y axis (%)" option in "Song>Waveform graph>Configure" to define a percentage from 10 to 999:
EOF has lots of keyboard shortcuts (especially as summarized in Help>Keys), so having a full sized keyboard is helpful. Make sure to save your work when you're done with the beat syncing.
NOTE: It's a good idea to use the "Beat>Lock tempo map" function when you're finished tempo mapping to ensure the beat timings can't be changed accidentally. Likewise, if you don't routinely click and drag notes while authoring an arrangement, you can use "Song>Disable click and drag" to prevent accidentally moving notes when clicking on them to edit lengths/techniques on them.

# ADDING PRO GUITAR CONTENT

For EOF's purposes, "pro guitar" references any set of features related to authoring real guitar or bass tablature for rhythm games, mostly for Rock Band (or similar rhythm games like Phase Shift, Clone Hero or YARG), Rocksmith and IMMERROCK. Since the project is now beat-synced, you can either author the pro guitar notes manually or import content from an existing file. EOF's [PRO GUITAR TUTORIAL] was written in the Rock Band 3 era and covers the capabilities of manually authoring such content reasonably thoroughly and should cover most of the features you would need for IMMERROCK. Alternatively, Rocksmith-centric guides (https://customsforge.com/ is the leading online resource on authoring charts for Rocksmith) can also show you how to author content, but some of Rocksmith's game mechanics need convoluted charting methods, so don't get too distracted by complicated requirements for Rocksmith if you're authoring for IMMERROCK.
The tracks that are capable of containing pro guitar content are:
PART REAL_BASS
PART REAL_GUITAR
PART REAL_BASS_22
PART REAL_GUITAR_22
PART REAL_GUITAR_BONUS
The names for the first four of these originated from Rock Band 3, the first big rhythm game that supported real guitar content. The fifth was created for the sake of authoring Rocksmith custom songs, since the second game in the Rocksmith series (Rocksmith 2014, often referred to in EOF as "RS2" or "Rocksmith 2") added the ability to have 5 arrangements per chart.
Keep in mind that by default, new projects in EOF will set a default fret limit of 24 for all pro guitar and bass tracks, but this limit is lowered depending on whether your "File>Preferences>Import/Export" options have enabled the ability to save songs in Rocksmith 1, Rocksmith 2 or Rock Band 3 format (because these games each have different limitations for the number of frets an arrangement can have). Make sure to use the "Track>Pro Guitar>Set number of frets/strings" to make sure the fret limit is high enough for each track in your project that you will add content to, and use "Track>Pro Guitar>Set Tuning" to define the tuning if it isn't in E standard. What the default tuning actually is for a track depends on whether a track is configured as a bass arrangement ("Track>Rocksmith>Arrangement type") or otherwise, and how many strings the track is specified to use. PART REAL_BASS and PART_REAL_BASS_22 will be configured as 4 string bass arrangements by default, and the other pro guitar tracks as 6 string guitar arrangements of "undefined" type.
IMMERROCK's MIDI format defines each note as the pitch being played, instead of as a list of fret values the way Rock Band 3 and Rocksmith do. In EOF, the tuning of a given string is defined by how many half steps above or below it is tuned relative to the standard tuning for the instrument (which for guitar is EADGBe). For example, in Drop D, the low E string is tuned down two half steps (-2) to change its pitch from E to D. By design, each fret of the guitar is the point at which the played pitch of the string increases by one half step, so playing an open string is 1 half step lower than when playing that string while pressing down on fret 1. Picking the string while holding it at fret 12 plays the same note as the open string, only one octave higher. This is known as equal temperament. When being exported to MIDI, the pitch for each guitar note is determined by adding its fret value to the pitch for the open string. For example, the low E string on guitar plays MIDI note 40 (musical note E2), so low E played at fret 5 would be MIDI note 45. In this way, every note is written in the MIDI file as being relative to the pitch played by the open string, regardless of how the tuning is defined, and the fret values will always display correctly in-game even if the tuning is not defined correctly. However if the tuning is not defined correctly, the game will not display the correct note names and the MIDI tones that are played back when the chart is slowed down will be incorrect.
IMMERROCK supports displaying notations for the following playing techniques: Palm mute, string mute, natural harmonic, hammer on, pull off, tapping, up strum, down strum, bend and vibrato. In the case of vibrato, the pitch bend events are written to make the note tail follow a sine wave pattern. If a note has both vibrato and accent status, the sine wave has a larger amplitude, but it is completely for display purposes and doesn't affect scoring.
You can start authoring the arrangement completely from scratch, or if you found a well-made chart for the song you're interested in that has only five button guitar/bass authored, you can optionally import it and add pro guitar contents to it. To do this, [IMPORT ITS MIDI FILE], change to the track you want to upgrade with pro guitar content (Song>Track or use the CTRL+Tab based shortcuts), seek to the first note (CTRL+HOME), select all notes (CTRL+A), copy the notes to EOF's clipboard (CTRL+C), change to the pro guitar track you are going to author in and paste (CTRL+V). All of the notes will paste with no defined fret values, but all of their timing is kept. This saves you some work as you don't need to beat sync the chart or determine the time each note should be placed, and any lyrics that were defined in the MIDI are also imported. However you will need to define fret values, techniques and finger information of the notes in the pro guitar track to make a proper chart to play in IMMERROCK. Non pro guitar tracks have some common authoring practices, such as rarely authoring any chords that use more than 3 gems, and authoring palm/string muted notes as a single gems instead of as chords (any combination of two or more gems). You will need to add/remove gems as necessary to define the fret values used for chords, using guitar tablature as reference if needed. You will also need to add/remove/move notes as is appropriate for the arrangement if appropriate. If you prefer to place the pro guitar notes from scratch, you can still import the MIDI get get the beat sync and optionally use the five button guitar track for reference by changing to the five button track in question, displaying the secondary piano roll ("Song>Second Piano Roll>Enable" and changing the primary (top-most) piano roll to the track you're authoring to have pro guitar contents. Then begin placing notes in pro guitar track. You can hide the secondary piano roll any time if you would like to see the Information panel or 3D preview. Here's an example Rock Band chart that I upgraded to pro guitar:
Follow the techniques described in the [PRO GUITAR TUTORIAL] to add notes to the desired pro guitar/bass arrangement. You can place notes from scratch one at a time and define their relevant techniques, fret values and finger information. Once you have gotten to the point where portions of the tablature repeat a previous part (such as a riff used throughout the song), you can use copy and paste functions as a time saver. You can copy and paste a single set of notes by clicking the first note in the set to select it, using SHIFT+click on the last note in the set to select all of the notes from the first click to the second, use Edit>Copy (or press CTRL+C) to copy the selected notes to EOF's clipboard, seek to the position the notes should be pasted (you can use various seek commands to get accurate placement, especially Pg Up/Dn to seek a beat at a time or CTRL+SHIFT+Pg Up/Dn to seek a grid snap value at a time, depending on the currently set "Edit>Grid Snap" setting) and use Edit>Paste (or press CTRL+V) to paste the notes. If you expect a pattern of notes is going to be used several times, EOF has a "Fret Catalog" that allows you to store the start/stop time of repeating riffs so you can easily view them and paste them while authoring the chart. To add a fret catalog entry, select the notes that make up the riff (ie. click and SHIFT+click to select several notes), then use Song>Catalog>Add to add this riff to the Fret Catalog. To see the Catalog, use Song>Catalog>Show (or press the Q button to hide/show it). You can play back the active Fret Catalog entry by holding SHIFT and pressing spacebar. The Song>Catalog menu has some other related functions such as to give the riff a name for your own reference, to have its display take up the full width of the bottom half of EOF or search for instances of the riff in the active track difficulty. If you have reached a part of the arrangement you're authoring where the riff is going to be repeated, you can seek to the position where the riff repeats and use "Edit>Paste from>Catalog" to paste those notes starting at the seek position. Just make sure that if the riff is slightly different in some parts, you adjust the pasted notes accordingly. Keep in mind that if you edit the specific notes that were used to create the catalog entry, the entry itself will reflect those changes.
As an example of how the Fret Catalog can save lots of time, consider this bass guitar arrangement (click to see full size):
You can see the pattern in measure 3 repeats regularly throughout the entire song. After authoring the notes for measure 3, I selected them, added them to the fret catalog, then I was able to quickly seek to each measure that needed this pattern (Pg Dn to seek to next beat marker), paste from the catalog (SHIFT+C), and repeat:
After a minute or two, half of the entire arrangement was authored. The same process can be done to add the other repeating patterns to finish up the arrangement.
Play back the song with metronome (Edit>Metronome) and claps (Edit>Claps) to test the sync of the beats and notes as desired. After the pro guitar track is to your liking, or you would like to test your work in progress inside of IMMERROCK, proceed to export to IMMERROCK format [IMMERROCK EXPORT GUIDE]