-
Notifications
You must be signed in to change notification settings - Fork 24
Integration
With the modern CMake-based build system and the no-dependencies command-line version of SEQ64, it is easy to integrate SEQ64 into your project. For a romhack, commit sequences as MIDI or mus and use SEQ64 to automatically convert them to .com
as part of your build process. For a decomp project, store technical sequences such as sound effects sequences in the decomp repo as .mus
, but convert music sequences from the ROM to .mus
or even MIDI as part of the setup step, eliminating the need to host and distribute these data assets.
Add seq64 as a submodule in your project:
git submodule add https://github.com/sauraen/seq64.git tools/seq64
Add a build target for the SEQ64 console version as part of your project's tools build CMake system:
set(SEQ64_CONSOLE_ONLY ON)
add_subdirectory(tools/seq64)
Or if your tools build system is Makefile based:
mkdir tools/seq64/build
cmake -S tools/seq64 -B tools/seq64/build
make -C tools/seq64/build
The history of N64 Music Macro Language development goes roughly like this:
- Early era, roughly 2007-2013. Basic parts of the Audioseq and Audiobank formats were reverse engineered by Deathbasket and SubDrag. MIDI export was not possible as not enough commands were understood yet, but a bare-bones, one-note-per-channel MIDI importer was produced.
- Middle era, 2014-2019. Sauraen reverse engineered more of the format, including the first discovery of the programming-type commands. SEQ64 permitted reasonably accurate MIDI import/export and was used in many Super Mario 64 and Ocarina of Time romhacks. However, the complete format was not known for any game, and sound effects sequences could not be parsed/edited.
- Modern era, 2019-present. Simon Lindholm decompiled Super Mario 64's sequence player as part of the SM64 decomp project, and in doing so documented all the commands. Sauraen reverse engineered the remaining OoT commands from a partial decomp of OoT's sequence parser, contributed to by MNGoldenEagle and the OoT decomp team.
These efforts, which have been publicly ongoing for 15 years and which were based entirely on reverse engineering of game ROMs, have led to what is called the "community" understanding of Music Macro Language. The "community" command names in SEQ64 are based on Simon Lindholm's names, with simplifications and modifications for clarity. The core of SEQ64, including the MIDI import/export system and the exact operation of all the commands, was developed based on this information.
In contrast, "canon" information is information indicating how Nintendo's canonical Music Macro Language commands and tools operated. Some bits of this information were obtained from debug strings in games, especially the OoT Debug ROM. However, this knowledge was vastly expanded due to the Gigaleak on July 25, 2020. The Star Fox 64 and F-Zero X repositories in this leak contain their original audio toolchains in mostly-complete form, including matching .mid
, .mus
, and .com
files for every music sequence in Star Fox 64, and complete definition files for the Music Macro Language format in both games. While the function of all the commands was already known at this time from the Super Mario 64 decomp, their canonical names were not previously known, nor were the details of the syntax of .mus
assembly. Furthermore, the definition files revealed that many commands had two names--a current and old name--or in some cases that the command byte had been reassigned to a different function, so that the "old name" was actually a different command.
SEQ64 optionally includes the "canon" and "canon old" names of Music Macro Language commands, and other details of the Music Macro Language assembler format, for reasons of historical preservation and documentation, and to enable SEQ64 to be compatible with the original .mid
and .mus
data files. Setting SEQ64 to "community" .mus
dialect disables all of this information and introduces alternate (and often cleaner) syntax for Music Macro Language assembly. Projects can use the "community" dialect to avoid the inclusion of any canon information in their repositories. For games using a later version of Music Macro Language than Star Fox 64 and F-Zero X, such as Ocarina of Time and Majora's Mask, canon names for many commands are still not known, so community dialect should be used exclusively.