Edit 10/17/24: scroll to the bottom of this desc to see Kenneth Arnold's response :)
Before I go into a technical description, let me first extend a huge THANK YOU to Minstrel Dragon for sharing with me many of his 8-bit disassembling / reversing efforts over the years, which included a commented disassembly of this music engine, and without which, I would probably have not made this video.
This video is a conceptual visualization of the Apple II Mockingboard game music engine logic that Kenneth Arnold developed to play his Ultima III musical compositions. And back in 1983, it was the very first full 8-bit computer game soundtrack (yet another "first" in the Ultima series).
For each song, each voice can contain notes and rests (called "Content" in the video) and can also invoke defined patterns of notes and rests. Reusing patterns allowed longer music to take up less RAM. Patterns can be reused across the voices. When voice-specific content is brief, it's displayed alongside an adjacent pattern in this visualization. Sometimes the content is simply short rests unevenly applied to the voices to create echo effects (i.e., in Dungeon and a section in the Exodus music).
Patterns can be transposed upward by a number of semitones, increasing reusability (e.g., "Pattern 5 up 2" means pattern 5 played up two semitones, or one whole step). Unfortunately, this transposition logic was broken in the Commodore 64 port, making the music less interesting (though, through careful comparisons made between the Apple II and C64 engines, Minstrel Dragon found that the note data to be exactly the same).
Years later, these concepts would be generalized (song patterns, and an ordered pattern playlist for each voice), a GUI would be put atop it, and it would be called a tracker.
Ticks per quarter is the delay counter for a quarter note. The larger the number, the longer the duration. If its prime decomposition contains at least one 3, then triplets are supported. In only one song is there a tiny bit of roundoff error (Rule Britannia has q=30, and Arnold choose 7 for sixteenth notes, and 5 for sixteenth triplets). The Wander song is 30 ticksPerQuarter and has a BPM of 123, so for the other songs, the BPM is 30/ticksPerQuarter * 123.
Would be interesting to see if Arnold created this early Mockingboard music engine out of whole cloth, or if it was based on existing engines. For example, through some recent retro-archeology efforts, Chris Abbott has started to discover what music engines C64 composers based their code upon (in one prominent composer's case, it was an early type-in-code book).
Edit 10/17/24: Ken saw this video and then wrote and sent me a detailed summary of how he created the game engine and music. Here's a link to the PDF, enjoy! https://youdzone.com/udic/Ultima_Musi...
Информация по комментариям в разработке