A song editor for "Frets On Fire"

# IMMERROCK EXPORT GUIDE

Before you export arrangements to play in IMMERROCK, you will want to review the following optional and mandatory steps:

# NORMALIZING THE AUDIO (Optional)

The IMMERROCK development team has suggested normalizing your chart's audio so that the volume is consistent with the in-game bundled content. Recommended settings for doing this include using Audacity's (https://www.audacityteam.org/) "Effect>Volume and Compression>Loudness normalization" function to normalize perceived loudness to -14 LUFS
https://manual.audacityteam.org/man/loudness_normalization.html

# DEFINING SECTIONS (Optional)

IMMERROCK has a “Phrase Refiner” feature that allows the player to define where to start and end a looped playback of a song. In-game it looks like this:
For this optional yet HIGHLY RECOMMENDED feature to work, the chart will need to have sections, which are defined in EOF as “text events”. If you imported chart content from an existing file before getting to this step, the project may already have events defined. To see all of the events in the project, use “Beat>Events>All Events” and EOF will display a list:
From this list, you can easily edit, delete or seek to any of the events in the project. The events that will export to IMMERROCK format as sections are those where the event is formatted as “Section NAME” or “[section NAME]” (how they are formatted when using “Beat>Events>Place Section”) or if there is an S inside of the parentheses next to the event’s timestamp, it indicates it is a Rocksmith section maker (how they are formatted when using “Beat>Rocksmith>Place RS section”). If there are no sections defined yet, or you want to add more, close the “All Events” dialog, seek to where you want the section to begin, click on the beat where the event will be placed and use either the “Beat>Events>Place Section” function and give a name of your choice (the letter case of the section name is up to you, it doesn’t need any particular capitalization), or use the “Beat>Rocksmith>Place RS section” function and pick one of the section names allowed by Rocksmith (leave both of the optional boxes below the list in this dialog unchecked, they are not relevant for IMMERROCK):
If you want to place a section at a position that is not on a beat marker, you can seek to the exact position of where you want the section to be placed (SHIFT+Pg Up/Dn seeks to previous/next note, CTRL+left/right seeks slowly, CTRL+SHIFT+left/right seeks one millisecond at a time) and use "Song>Place floating event" to define the event's text as "[section SECTION_NAME]" without quotation marks, and with "SECTION_NAME" replaced with your section name of choice. Regardless of how you define sections, EOF will automatically export blank sections at 0 seconds and at the end of the chart, which helps ensure Phrase Refiner will process the sections nicely. Remember to save your project in EOF.

# ADDING/IMPORTING LYRICS (Optional)

IMMERROCK can display line-synced lyrics to go with the guitar tablature. It’s not required, but it’s a nice thing to include with a custom chart. There isn’t too much synchronization involved with this format since you only have to time the start and end of a whole line of lyrics at a time, so defining them is pretty simple. Just change to the PART VOCALS track (ie. use “Song>Track” or use the CTRL+Tab shortcuts), place a note where that line begins being sung/spoken, type a line’s worth of lyrics into the box that pops up, lengthen the lyric (click on it to select it, then use the mouse scroll wheel or the [ and ] keys to shorten or lengthen the lyric) to extend to where the singer stops saying/singing the line, then tell EOF that this lyric makes up an entire line of lyrics by itself by using “Note>Lyrics>Lyric Lines>Mark” while this one lyric is still selected. EOF will draw a blue background behind the lyric text to show that it is now in a lyric line, and the new line of lyrics will now appear in the bottom right panel of the program when it’s in effect for the current seek position:
You can define all of the lyrics this way, one line at a time. Alternatively, if you found any timed lyrics, EOF is able to import a wide variety of formats (several rhythm game lyric formats, some karaoke formats and various others). Review the [VOCALS TUTORIAL] for more details about authoring or importing lyrics.

# ADDING METADATA (Mandatory)

The bare minimum of metadata for the chart is the song title and artist name, which were prompted for if you created a new project from scratch. Or in case you imported a chart, this information is always expected to be defined and should be present after the import, but you can use “Song>Properties” to see various pieces of information for the chart. Other metadata is optional, but more information is better than less, because it gives the player added details. In the case of the genre, IMMERROCK may eventually be updated to allow the player to sort or filter their list of custom songs. The pieces of metadata that you can define in “Song>Properties” that are understood by IMMERROCK are currently:
Song title
Artist
Charter (this is the name or user name you as the chart creator will be credited with in the chart)
Album
Genre (you can define multiple genres, each separated by a comma, such as “Rock, Pop”)
Year (the year the song’s single/album was released)
Track #
You can ignore the other fields in Song Properties because they are not relevant to IMMERROCK. This metadata is saved in the Info.txt file during export, and if necessary you can make corrections by opening it in a text editor. Just remember that if you don’t add the corrections to your project in EOF, EOF will write the Info.txt file again without the corrections the next time you have it export the project to IMMERROCK format. Remember to save your project in EOF.

# ADDING FINGER DEFINITIONS (Optional)

The optional Finger Placement feature in IMMERROCK reads note/chord fingering details defined in the chart to show the player a virtual fretting hand positioned accordingly on the virtual fretboard:
There are two "hand modes" that the virtual hand can be in. In the default "chord" mode, the virtual hand stays in place until finger definitions require it to move, such as is suitable for playing arpeggios. In string mode, the virtual fingers stays in place for the duration of the notes on an active string only, better suited for riffs and solos. You can define the points at which the hand mode changes by seeking to a position and defining a change in hand mode at that position using the "Track>IMMERROCK>Hand mode>" functions.
The definition of fingerings isn’t covered by “Help>Pro Guitar Tutorial” because this wasn’t a feature in Rock Band 3. It is a feature added to EOF for Rocksmith authoring, so any Rocksmith authoring tutorials you find should explain this in detail. To summarize here though, you can define which fingers are used to press each fretted string in a note or chord by selecting the note and using the “Note>Rocksmith>Edit frets/fingering” function (ie. press the F shortcut key):
The finger numbers are 1=Index, 2= Middle, 3=Ring, 4=Pinky, 5 or T = Thumb. If you define the fingering for a chord and click OK or Apply, EOF will check for any other instances of the same chord that are lacking finger definitions and will offer to apply the definitions you just added. If you press Apply instead of OK, the dialog will stay open and you can click the <- or -> buttons to view/edit the fingering of the previous or next note. Or you can click the << or >> buttons to view/edit the fingering of specifically the previous or next note that doesn’t have fingerings defined yet. To make it easier to identify which notes don’t have fingering defined yet, you can enable “Fingering view” with the “Song>Rocksmith>Fingering view” function. When this feature is enabled, instead of displaying the fret values for notes, the piano roll will display the defined finger values instead. Likewise, the CTRL+~ and CTRL+# keyboard shortcuts will define finger numbers instead of fret numbers when fingering view is in effect. Normally, middle click (ie. scroll wheel click) on a note will bring up the "edit pro guitar note" dialog, but when fingering view is in effect, it will bring up the "Edit note frets/fingering" dialog.
For notes that have their fingers defined, the number boxes will be green, otherwise if the definitions are missing, the number boxes will be red. If there is a defined fingering but it causes a problem such as a violating an expected position for the fretting hand, the number box will be yellow. If there is not a defined fingering, but EOF is able to derive it from the currently defined fret hand position, arpeggio or handshape (these are Rock Band and Rocksmith charting mechanisms), the number box will be blue and EOF will suggest a finger number to use. In this example, the single notes don't have fingering defined, but since the 2 at the left edge of the picture indicates that the fretting hand is at fret 2, the index finger (finger number 1) would be suitable for playing the single notes at 11 seconds since they are also on fret 2:
EOF won't automatically use such derived finger values, but if the "Offer to derive finger placements from FHPs" export preference is enabled in "File>Preferences>Import/Export", EOF will offer to add them when creating the IMMERROCK chart files if you perform normal save (not quick save). Alternatively, you can use the "Note>Rocksmith>Apply derived fingering" function to apply this suggested fingering to the notes and it will export unconditionally.
As a bonus feature, you can display a second copy of the track in the second piano roll (Song>Second Piano Roll>Display), which will replace the bottom half of EOF. By default, the first time you open the second piano roll in an EOF session, it will display the active track difficulty reflected in the normal piano roll, but you can swap the two piano rolls and manipulate the normal piano roll (in the top half of EOF) at will. You can even unsync the two to be at different timestamps if you want. If both piano rolls are displaying the same difficulty of the same track, fingering view will show the fingering in the first piano roll and the fret numbers in the second so you can easily see both at the same time:
Review the manual’s description of the ["Song>SECOND PIANO ROLL" functions] for more details about this feature. Another way to define fingerings for dislike chords that use the same chord shape is the "Note>Rocksmith>Edit fingering" function. In this example, these three power chords can all be changed at the same time to define being played with the index and middle fingers even though they use different fret numbers:
As a way to automate the definition of chord fingerings, EOF has a fairly large database of chord definitions in its chordshapes.xml file, which essentially defines chord shapes as the frets pressed on each string and the finger used to press each. You can use the “Song>Rocksmith>Correct chord fingerings” function to apply finger definitions for any chord whose shape is defined in the chordshapes.xml file. More exotic chords may be undefined, and EOF won’t define fingerings automatically for single notes the way it can for chords, so you will want to use “Song>Rocksmith>Fingering View” or use the “Note>Rocksmith>Edit frets/fingering” function’s << and >> buttons to quickly identify notes that are missing finger definitions. If you don’t want to add finger definitions for single notes, it’s not required. However, the virtual fretting hand of the Finger Placement IMMERROCK feature will be inactive if it reaches a note that is missing finger definitions, so defining them for all notes gives the most professional result. Note that EOF’s automated definitions won’t be as good as ones that are well-chosen by a guitarist who knows how to efficiently play guitar, so if you know how to pick better fingering for a chord, it’s encouraged to define some or all of them as desired. Remember to save your project in EOF.

# DESIGNATING LEAD, RHYTHM AND BASS ARRANGEMENTS (Mandatory)

In order for a guitar or bass track to export for use in IMMERROCK, its arrangement type must be defined. To define a track as a lead, rhythm or bass arrangement, use “Song>Track” or CTRL+Tab related shortcuts to change to the desired track and use “Track>Rocksmith>Arrangement Type” and choose Lead, Rhythm or Bass. While you’re at it, set the difficulty rating for the arrangement with “Track>Set Difficulty” and give it a subjective difficulty from 1 (easiest) through 5 (hardest). The difficulty of an arrangement is one of the details shown in the song list in IMMERROCK.

# ADDING ALBUM ART (Optional)

IMMERROCK can display album art for the chart in the song list. It must be in JPEG, PNG or TIFF format and use any of several approved file names. The recommended resolution is 512x512 pixels, but it can be larger or smaller if you desire. During export, EOF will check the project folder to see if any file with a ".jpg", ".jpeg", ".png" or ".tiff" extension and a base name of "cover", "album", "label" or "image" (file names that were commonly used for album art with other rhythm games) is present. If so, EOF will copy the file to the export folder renamed with the base name of "Cover" so it will display in the song list in IMMERROCK.

# ADDING COMMENTS (Optional)

You can define comments for the chart (to be displayed in-game when the chart is selected in the song selection list) by using the "Track>IMMERROCK>Comment>Song" function or by going into the chart's song properties (Song>Properties or just press F9) and typing the comments in the Song Comment field at the top right corner of the dialog.
Comments specific to the lead, rhythm or bass arrangements can also be defined by opening the "Track>IMMERROCK>Comment>" menu and using the "Lead", "Rhythm" or "Bass" functions. This could be a useful place to mention things like tone and effect settings for playing with an amplifier.

# CUSTOMIZING ARRANGEMENT NAMES (Optional)

You can change the name displayed for the arrangement in the song song selection list to be something other than "Lead", "Rhythm" or "Bass" by using the Track>Rename function. As an example, this would be a good way to indicate that an guitar arrangement is to be played on another instrument such as a ukulele.

# IMMERROCK PANEL

EOF has an IMMERROCK panel that reports on a chart's readiness for use in IMMERROCK. To display this tool, use "File>Display>Notes panel>IMMERROCK". Messages will display in red for issues that are mandatory to fix, such as if no arrangements are configured for export as lead or rhythm or the most critical metadata (artist and song name) are undefined. Messages will display in yellow for issues that aren't mandatory to fix, but suggested, such as missing sections, lyrics, album art or finger placements. Messages will display in green for items that are defined appropriately. Other notices and pieces of information may render in various colors.

# MANUALLY EXPORTING ONE ARRANGEMENT

IMMERROCK’s built-in content focuses on presenting the player with complete arrangements instead of offering multiple copies where the arrangement is simplified to give a lower difficulty version. However, as the chart author, it’s entirely up to you and EOF can export any authored difficulty level (static or dynamic) for use in IMMERROCK. Once you have finished importing/editing the arrangement, change to the specific difficulty level you want to export (ie. click on the tabs above the piano roll to change to that difficulty level). Difficulties that include at least one note will include an asterisk *. Then use “File>Export>IMMERROCK” and EOF will create a subfolder in the project folder and place all of the applicable chart contents there:
Cover.jpg (album art)
The arrangement’s MIDI file (will be GGLead.mid, GGRhythm.mid or GGBass.mid)
Info.txt (metadata for the chart)
Lyrics.txt (if lyrics were defined in the project)
Sections.txt (if sections were defined in the project)
Song.ogg (the chart audio)
The name of the subfolder will include the artist name, song title, arrangement name and the difficulty level being exported. Likewise, the song title metadata in the exported Info.txt will include the difficulty level. The reason for the difficulty level being used this way is so that each difficulty level that you export can exist as a unique chart in the song list in IMMERROCK. If the track being exported has the traditional static difficulty system in effect (the difficulty tabs list the names “Easy”, “Medium”, “Hard” and “Expert”), the difficulty name is used in the subfolder name and song title. If the track being exported has the dynamic difficulty system in effect (the difficulty tabs list numbers), the difficulty level is referenced as “DD #” in the subfolder name and song title. In the case of exporting a dynamic difficulty, the difficulty is “flattened” by having it include all of the notes applicable for that difficulty level (including the notes defined in lower difficulty levels). For an explanation of dynamic difficulties, please read the [ABOUT DYNAMIC DIFFICULTIES] section of this tutorial. If you want to export a handful of dynamic difficulty levels of an arrangement instead of only having the fully complete arrangement available to play in IMMERROCK, you just need to decide which ones to export. To help you decide this, EOF has a function to list all of the dynamic difficulty levels in the active track and give statistics about how many notes each level adds to or replaces from the previous level, and how many the notes the level has in total:
Use this information along with any other considerations you like, such as how complex the chords in a difficulty level are. Ideally, you would want to pick difficulty levels that make sense, such as starting out in the lowest difficulty by playing a single root note for each chord, and then allow chords and techniques to get more complex with each higher difficulty. That may or may not be a simple task depending on how the chart is authored, so if you want to keep the difficulty level selection simple, you could base it on how much of the full arrangement’s notes (as a percentage) a level has. From the above example, you could export level 5 which is 34% of the notes, level 11 which is 66% of the notes, level 16 which is about 90% of the notes and level 22 which is the complete arrangement. You’re not limited in how many of the levels you export, just remember that each one will export to a different subfolder in the project folder, and each subfolder requires its own copy of the chart audio which will take up space on your headset’s storage.

# AUTOMATICALLY EXPORTING MULTIPLE ARRANGEMENTS DURING SAVE

If you will be making incremental changes to a project and testing between edits, you may find it inconvenient to have to export every arrangement manually each time you want to test changes. EOF has the ability to automatically export designated arrangements to IMMERROCK format every time you save the project in EOF (and as long as you aren’t making major changes to the tracks that would alter their export folder name, each save will overwrite files to the same folders and not create extra, unneeded folders). In order to set up the export during project save, open “File>Preferences>Import/Export”, enable the “Save separate IMMERROCK Files” option and click OK. After that change, when you save the project, EOF will export up to one pro guitar track (configured via “Track>Rocksmith>Arrangement Type”) as a lead guitar arrangement, up to one rhythm guitar arrangement and up to one bass guitar arrangement. When a track being exported does not have dynamic difficulty, the first four difficulty levels will export for it and each export folder name and song title metadata will reflect the difficulty level. When a track being exported has dynamic difficulty in effect (“Track>Rocksmith>Remove difficulty limit”) during project save, the highest difficulty level is flattened and exported. As this is the expected most common use case, neither the export folder name nor the song title metadata will reflect a difficulty level. Each export folder will contain one MIDI per applicable arrangement and related files such as Info.txt (contains several pieces of metadata), section markers, lyrics and chart audio. If none of the arrangements have notes for a particular difficulty level, that level won't have a folder created. In summary, the automatic export during save will export any defined static difficulties for designated arrangements and the highest dynamic difficulty level for designated arrangements. The project is not required to have all arrangements conform to the same difficulty method (dynamic versus static), so as the chart author you can spend more time on whichever arrangements you choose.
If you are authoring an arrangement manually, it's easiest to define all notes within one difficulty level. As of now, if Rocksmith or IMMERROCK export is enabled, EOF will enable dynamic difficulty by default for all pro guitar tracks when creating a new project. It is common that any Rocksmith chart you import will have many dynamic difficulties for each arrangement, but if you import charts from other games they could have one to four static difficulties (ie. ones named "Easy", "Medium", "Hard", "Expert", etc.) instead which will change the export behavior as described above. Enabling dynamic difficulty for tracks that have static difficulty will simplify by making the highest difficulty level export during save. As a reminder, the IMMERROCK panel will display how the active track will export if it has multiple difficulties and is one of the designated lead, rhythm or bass arrangements.

# COPYING IMMERROCK CHARTS ONTO YOUR HEADSET

The final step before you can play the exported chart in IMMERROCK is to copy the chart folder onto the headset’s storage. The headset will need to be plugged into your computer so that you can access the file system, browse to the correct IMMERROCK game folder and copy the chart there. I’m not familiar with how to do this except for with a Windows computer, so assuming Windows, you will first need to install the Meta Quest Link application on the computer and do all related setup steps for linking the headset:
https://www.meta.com/help/quest/509273027107091/
When you plug the headset into the computer, wait for the prompt seen in the headset asking whether to allow the computer to access the files on the headset. Allow it:
https://www.meta.com/help/quest/310926493766802/
If the headset doesn't offer to allow the computer to access the headset's file system, I have usually found that it's because the Quest Link application indicates an update is required. Allow the program to update. In my experience, this update can take several minutes, so give it time. If nothing else works, try rebooting your computer and rebooting the headset.
After you allow the file system access (has to be allowed each time you plug the headset into the computer and want to transfer files to/from the headset), you can take the headset off and perform the rest of the steps from the computer. Open File Explorer, browse to the “This PC” item and you should see a Quest device listed with your drive letters:
Double click on the Quest device, and browse folder by folder to get to this path:
This PC\Quest 3\Internal shared storage\Android\data\com.Rockhopper.GuitarGods\files\UnrealGame\GuitarGods\GuitarGods\Content\CustomSongs
If you get to the "Content" folder and there is no subfolder named "CustomSongs" yet, create a folder with that exact name and then browse into it. Open a second File Explorer (ie. SHIFT+click on the File Explorer icon on the taskbar) so you can keep the first File Explorer at to the IMMERROCK custom songs folder. In the second File Explorer instance, browse to where EOF exported the subfolder(s) during IMMERROCK export (this will be in your project folder). Copy all of the export subfolders that you want to play to Windows’s clipboard and then go back to the first File Explorer instance and paste them into the CustomSongs folder on the headset:
Once the paste operation is done, there is no way to demand Windows to eject the storage like you would with a flash drive, so you will just have to unplug it from your computer. Then when you launch the game, if everything worked well your charts will appear in the song list:
I've been told that the game only checks for custom songs the first time the song catalog is entered, so if the game was running on the headset while you were adding one or more songs, you may have to restart the game for them to be listed. Play the song and if you see any problems, bring them to the attention of EOF’s or IMMERROCK’s developers for help in the IMMERROCK Discord server. Please remember that IMMERROCK is still in early access so it is fair to expect that there are bugs to work out and features that aren’t finished being implemented. Be kind and patient. If you are willing, it is also helpful for you to perform any troubleshooting you can, such as determining whether a problem only happens in specific scenarios (ie. the game crashes, but only if a specific feature like lyric display is enabled). Most importantly, have fun!