LockerGnomeTech news and nostalgia for today's technology professionals
Subscribe

Search

RetroScore Perfectreverse engineeringMusicXMLMuseScoreVisual Basic 6Atari

A Dad's 1990 Sheet Music Software Died With Its Developer, So His Son Spent Four Years Reverse-Engineering Its Files

Maarten Tromp's free Python converter turns Score Perfect songs into MusicXML that MuseScore opens, after the program's own export dropped chords and lyrics.

Chris lays one of his late father's handwritten music sheets beside an old beige computer showing columns of blocks
Illustration: LockerGnome

The reason is in the first lines of his write-up: “My dad has been using this software since version 1, first on the Atari and later on Windows.” Score Perfect shipped for the Atari in 1990, written by Klaus Kleinbrahm, and ran for decades on his father’s machines. Every song his dad ever typed in is locked in a file format nobody ever published.

The program does have a MusicXML export. Tromp says it “only exports the notes,” so chords and lyrics vanish on the way out. Other people had the same problem on the MuseScore forums, which is how this stopped being one family’s project.

The usual tool for this job wasn’t available. Version 5, from 2007, was “a Windows-only rewrite in Visual Basic 6,” and Visual Basic 6 programs can be compiled in two ways. A P-code build is easy to decompile, which would have handed Tromp the program’s own logic. He checked, and the answer was no: “Unfortunately, SPP 6.0 turned out to be compiled to native code rather than P-code.” He fell back on reading disassembly listings in Ghidra. (Nobody’s idea of a relaxing hobby.)

Most of the progress came from the files themselves. He ran the old program under Wine, created an empty score, saved it, added a single note, saved again and compared the two hex dumps. Whatever bytes changed were the note. He kept a list of bytes he understood and searched a growing pile of songs for them. For clefs, he made six versions of one song with a different clef each and compared the screenshots.

Test files were the bottleneck. The full versions of Score Perfect wouldn’t accept license keys, so he worked from the demo and Lite editions, and he used AI-generated scripts to drive the program’s interface and produce more songs. The final corpus holds 345 songs: 119 in the SPP 1 to 4 format and 226 in the SPP 5 to 7 format, some native, some re-saved, and 43 made by hand.

The result is a Python tool that needs Python 3.11 or later and nothing else. The README says you can run it with python3 spp2musicxml.pyz for a small window, or point it at a folder of songs on the command line. It handles notes, measures, marks, text, parts and playback, and writes MusicXML 4.0. Tromp’s own check: “MuseScore 4.7 opens all 345 songs of the corpus once converted.” He also put the work in the public domain: “everything I created for this project is released into the public domain.”

The converter has gaps, and the README lists them. Page layout is gone (system breaks, page breaks, stem lengths, beam shapes). So are tuplets other than triplets, chord diagrams, accordion registers, tablature, drum staves and transposing-instrument markings. SPP 1.2-K files aren’t read at all, and SPP 7.0 was tested with only two songs, so the newest files are the ones to check twice.

Four years, one changed note at a time.

More Retro

Every Retro story →