Featured Content


Music

Projects and documents related to computer music formats and other music topics.

OrgMaker Notes
Various measurements and examinations of the sounds made by OrgMaker, a program for making ORG format music as used in the game Cave Story.

ORGMID - ORG to MIDI converter
A command line program that converts ORG format music used in the game Cave Story to MIDI format.

Key-finding algorithm
A description of the Krumhansl-Schmuckler key-finding algorithm, an algorithm that can assign an appropriate major or minor key to music data consisting of note pitch and duration information.

Casio Barcode Music Score Format
The format of the music score barcodes used with some Casio keyboards with a barcode reader.

Yamaha PSR-225 Bulk Dump Format
The format and content of the bulk dump system exclusive messages sent by a Yamaha PSR-225 keyboard.

Scrolling Pitch Display
A sound visualization script for the NES emulator FCEUX. Note bars scroll upward out of a piano keyboard.

Clock MIDI File Generator
An HTML JavaScript page I made that generates a MIDI file that has MIDI clocks in it. For some background about "What is MIDI clock?" and "Why would you want to store a MIDI clock message in a MIDI file?" see What is MIDI Clock?


Debugging

Projects and contributions that fix bugs or clarify documentation.

Notepad

Notepad bug: Saving with word wrap on inserts CR CR LF characters in the display window
Description of a bug in Notepad that causes strange word wrap and paste behavior.

Fix Notepad's CR CR LF bug with a hex editor
You can modify Notepad to prevent the strange behavior described above.

FCEUX

The Nintendo emulator FCEUX can run NES ROM files and play NES music files (NSF). FCEUX comes with music visualization scripts that can display graphics or information about the currently playing music. However, I noticed the scripts only work with game ROMs, not with NSF music files. I submitted a bug report suggesting a small change to the source code that enables the visualization script graphics to appear in the NSF mode:
FCEUX bugs - lua graphics missing when NSF running

FCEUX's lua scripting system provides information about the frequency and pitch of each music channel, but I noticed the values were only correct in the NTSC mode, and only correct for the pulse and triangle channels. I proposed changes that calculate the pitch frequencies for pulse, triangle, and tonal noise, or the sample frequency for atonal noise and DPCM samples, in both NTSC and PAL modes. I proposed the code changes in January 2014. In June 2016, I contributed to a discussion about the noise channel pitch values and a FCEUX developer added my proposed changes.

Sekaiju

Sekaiju is a MIDI sequencer program for creating and editing MIDI music files. When a new version of Sekaiju used a new font for dialog boxes, some of the items were cut off. I couldn't fix the problem myself, but I posted a detailed description, screenshots, and possible leads on how to fix it. The developer investigated and was able to change the font a different way so the items were no longer cut off:
Sekaiju 4.0 English - Graphical bugs with tabbed dialogs (property sheets)

OpenMPT

OpenMPT is a music tracker program.

OpenMPT has three possible "tempo modes", but I found the documentation about them confusing. I investigated the tempo modes revised the documentation:
OpenMPT Wiki - Talk page for Manual:Song Properties (Tempo Modes)

OpenMPT has a MIDI file import function, but it doesn't align the MIDI file notes to OpenMPT rows well. When I searched for information about the problem, I only found suggestions to play around with the import settings. I examined the source code and determined certain modifications to the MIDI file and the OpenMPT import settings could force the imported notes to be aligned well. I made an HTML file JavaScript calculator to help you choose the correct values:
forum.openmpt.org - MIDI File Import Assistant

OrgMaker

OrgMaker is a program for making ORG format music as used in the game Cave Story. There were some bugs in the Japanese version 2.1.0 of OrgMaker:

During a project to convert the text to English, I also patched these bugs.

I described the bug patches in a forum thread about the English translation project:
OrgMaker 2.1.0 - English translation in progress - Bug patches

On the developer's BBS, I replied to someone's bug report with hex editor patch instructions:
http://www5b.biglobe.ne.jp/~kiss-me/aji/board/bbs.cgi?mode=res&res=1682


Video Games

Video game formats and experiences.

Mega-Lo-Mania password format
I examined the password format of the Sega Mega Drive game Mega-Lo-Mania (the Sega Genesis game Tyrants: Fight Through Time).

Dr. Mario drop speeds
I investigated the drop speeds in the NES game Dr. Mario:

Mario Paint's tempo
I investigated the tempo settings of the music editor in the SNES game Mario Paint.

Sonic Adventure Save File Format
The format of the score and option data in the save file used by the Dreamcast game Sonic Adventure.

Ufouria Password Decoder and Encoder
A Javascript program that decodes and encodes passwords for the NES game Ufouria.

Nintendo Wii remote control
I describe my first experience with the Wii remote control and describe a little how it works.

Arcade machine at work
When a Windows-based arcade machine was put in the break room at work, I researched how the arcade control panel buttons correspond to keyboard and mouse controls.

Bubble Bobble
Some thoughts about Bubble Bobble.


Math

Mathematics topics.

Finding the center of projection of a perspective projection
A method to find the distance between the center of projection and the image plane in a perspective projection.

How high should you hang a mirror...?
How high you should hang a mirror so that the angles of the left over space above and below your reflection in the mirror are equal.

Lottery math with four-function calculator
How to calculate the number of ways to match every possible number of balls in a lottery, using pencil, paper, and a basic four-function calculator.

Key-finding algorithm
A description of the Krumhansl-Schmuckler key-finding algorithm, an algorithm that can assign an appropriate major or minor key to music data consisting of note pitch and duration information.


Home > Featured Content

Robert Hart
Updated July 21, 2021