NSF2MID is a command-line utility for converting classic Nintendo Entertainment System NSF music files into editable General MIDI.
Rather than treating game music as an audio recording and guessing what notes were played, NSF2MID executes the NSF and reconstructs musical events from the NES audio hardware itself. It preserves separate Pulse 1, Pulse 2, and Triangle tracks, along with supported percussion, hardware-derived pitch motion, dynamics, and articulation (like vibrato.)
NSF2MID also attempts to recover a musically useful sequencer grid from the NSF itself. When that timing structure can be certified, it generates a dynamic MIDI tempo map that preserves the original NES timing while aligning musical events to a practical DAW / sequencer grid for editing, arranging, rendering, and remixing. When the evidence is not strong enough, NSF2MID "fails closed" and preserves physical elapsed timing rather than inventing structure.
The public NSF2MID application is distilled from a larger, forensic NES-music research system, bringing its most mature transcription techniques into a small, fast, and easy-to-use tool.
It doesn't “listen” to the song. It reconstructs what the NES was doing.
An NSF file is not a recording. It contains music-driver code and data intended to run on NES hardware. NSF2MID executes that code in a purpose-built environment and observes how it controls the NES Audio Processing Unit (APU).
From those hardware events, NSF2MID reconstructs the musical performance in several stages:
NSF2MID runs the selected song and follows the NES music driver as it programs the Pulse, Triangle, Noise, and DMC / DPCM audio hardware.
Raw register activity is interpreted as sounding notes, attacks, releases, pitch changes, dynamics, and percussion events. Hardware activity is not automatically assumed to represent a musical event; ambiguous cases are handled conservatively.
NSF2MID examines the timing relationships between musical events and the NSF's internal update behavior. When a stable structural subdivision can be proven, it builds a source-preserving MIDI tempo map around that derived metrical grid.
Pulse 1, Pulse 2, and Triangle are written as separate MIDI tracks, with supported Noise percussion on the standard General MIDI drum channel. Proven pitch motion and dynamics may also be represented with MIDI pitch bend events and velocity. Percussion events are also classified using spectral analysis techniques to distinguish between different drum types, generating the appropriate note values in accordance with the standard General MIDI drum map.
NES sound drivers can be wonderfully ...strange. If NSF2MID cannot reliably prove a pitch, percussion interpretation, or structural timing relationship, it prefers to preserve what is known, and can be proved, rather than guess.
The result is a MIDI transcription designed not merely to sound similar to the original NSF, but to preserve the timing and musical behavior of the NES performance while making it practical to edit in a modern DAW, sequencer, or capable hardware synthesizer.
It works from the NSF program and NES hardware behavior directly.
64-bit Windows binaries are provided below. All binaries are statically linked and compiled using GCC / G++ 11.2. Binaries are statically linked and require no additional DLLs, runtimes, libraries, or installation. (Linux, MacOS, and Haiku binaries may be provided at a later date.)
NSF2MID does not require installation. Extract the downloaded ZIP to a folder, place the NSF file you want to convert in the same folder, and open a Command Prompt or terminal there.
For a basic conversion:
nsf2mid.exe -i music.nsf -o music.mid
NSF2MID converts the first track specified by the NSF header, unless specified.
NSF files can contain multiple songs. To convert a particular track, use -t followed by the song number:
nsf2mid.exe -i music.nsf -o track2.mid -t 2
Track numbering is 1-based and follows the song numbers stored in the NSF.
By default, NSF2MID analyzes up to 120 seconds of the selected song. Use -seconds to choose a different duration:
nsf2mid.exe -i music.nsf -o track2.mid -t 2 -seconds 180
The resulting .mid file can then be opened in a DAW, MIDI sequencer, notation program, or other Standard MIDI File compatible software or hardware.
For diagnostic or comparison purposes, -plain generates a conservative pitched-only MIDI using physical elapsed time, while -physical retains the normal expression and percussion output but disables sequencer-grid / tempo-map reconstruction.
Advanced command line options are briefly described in the next section. Consult the README.txt in the download for more detailed information.
Usage:
nsf2mid.exe -i in.nsf -o out.mid [-t N] [options]
Options:
-i FILE input classic NSF
-o FILE output Standard MIDI File
-t N NSF song number (1-based); default = NSF header start song
-seconds SEC trace duration, 1..3600 (default 120)
-ppqn N MIDI PPQN, multiple of 4, 24..32764 (default 480)
-plain fixed-note notes + drums; no programs, bends, articulation, or dynamics
-physical force a 120-BPM physical-time ruler
-physical BPM force a physical-time ruler at decimal BPM (10..400)
-no-drums omit percussion from the MIDI; timing analysis is unchanged
-h, --help show this help
--version show version/build information