Skip to content

NSF Importer 0.3

Latest

Choose a tag to compare

@chjmartin2 chjmartin2 released this 13 Jul 19:14

NSF Importer 0.3 — Music Construction Set now imports NES chiptunes (.nsf). A full 6502 CPU runs the game's own sound driver while an APU model captures the music and converts it to a playable MCS song.

New: NES .nsf import

  • Cycle-checked 6502 core — all 151 official opcodes, validated instruction-for-instruction against nestest. It executes the cartridge's real sound engine (INIT once, PLAY every frame), including 4 KB bankswitching.
  • APU capture — logs the two pulse channels, triangle, and noise per frame at continuous pitch (vibrato and slides survive), auto-detects the song loop for one clean non-repeating pass, and ends on silence.
  • Beat-aligned quantization — fits the 60 Hz frame stream onto MCS's 32nd-note grid, mapping the song's own base note to a whole tick count so onsets land on the beat. Exhaustive Optimize searches tempo × subdivision for the tightest alignment, then nudges playback speed to match a real MCS tempo exactly.
  • Output targetsTandy (3 square voices), PC Speaker 1-Note (monophonic 1-bit), and PC Speaker 4-Note (adds a dedicated percussion voice). The preview A/Bs the target chip's timbre against the true-hardware NES render.
  • Two-tone percussion — the NES noise channel is read as a real drum kit: bright hits (short period) become a hi-hat, dark hits (the kick) a low bass, split by NES period index. Silent note-off writes are filtered so the drum line keeps its shuffle instead of buzzing.

Also in this release

  • Import Preview now shows per-staff event budget, dropped-note readout, and a live "busiest staff" gauge; the solo audition round-trips through the actual MCS writer, so what you hear is what the exported file plays.
  • Encoder capacity work: meter auto-fit, register-balanced two-staff layout, position-based per-measure capping (24 positions), and a 32-events-per-staff cap where percussion yields to melody first.
  • 106 tests, including the 6502 ground-truth suite.

Download

  • MCS-Player.exe — standalone Windows build, no Python needed. SmartScreen will warn about an unrecognized (unsigned) app: More info → Run anyway.
  • MAPLERAG.MCS — the public-domain Maple Leaf Rag demo song.

Importing

In the app: ⬆ Import… → pick a .nsf (or .pt3) → choose channels, output target, and tempo → Import. Or from source:

python -m mcs_convert convert SONG.nsf SONG.MCS

NES music is copyrighted by its publishers — convert files you're entitled to use. No game music is distributed with this release.

Full changelog: v0.2.0...v0.3.0