Game Music Box Development Home | Forum | News | Development | Author

Source Code

Game Music Box is written in C++ in a modular style, consisting of the main program, several small support modules, third-party compression libraries, and the core sound engine Game_Music_Emu (a standalone portable library). The main application, general libraries, and Game_Music_Emu source code are licensed under the GNU LGPL, and zlib and optional unrar support under their respective licenses. Contact me if you'd like to collaborate on a more ambitious player.

Game_Music_Box-0.5.2b2-src.tgz (360K download)

Known Problems

- Audio skipping: If you can get the audio to skip at all, I'd like to know how you did it. I have a slight improvement I could make to the audio code that would reduce the possibility of skipping, but don't want to increase complexity if it's not necessary. So far I think it's only skipped a couple of times and I think this is due to running OS X on an ancient machine.

- Multiprocessor machines: Testing on machines with multiple processors exposed some multiprocessing issues I hadn't yet learned about. I've tried to address most, but lacking a multiprocessor machine to experiment with, I still don't have a solid feel for the issues so there might be a few remaining.

- Dropped files not opening: Sometimes in OS 9 files dropped on application icon don't open (player window does open if closed, but item doesn't play). Might not be the player (happens in other applications too). It'd be nice to confirm this.

- Menu afterimages: menus sometimes leave afterimages when nav dialog is up (probably the empty filter function I use).

- Changing icons in OS X: I haven't figured out how to reliably change file association under Mac OS X. Sometimes changing a file's creator doesn't change its icon.

- Very obscure: when nav dialog is up and track ends, call to change icon fails due to resource file being set differently by nav dialog.

- Start a single short track. Hold a button and move mouse outside it. Let track finish. Move mouse in and out of button. It stays enabled when it should be disabled. Probably standard button handler not prepared for changes to button state while tracking.

- The default button border doesn't disappear in utility window under OS 9 (need to invalidate the window to force update)

- When pausing with sound scope visible, scope will stop for an instant, then show the waveform that will be play after unpausing (annoying when trying to pause to look at a waveform). Cause known.

- Sound scope gets choppy when fast-forwarding and when utility is processing files (I don't use any explicit threads in the program).

- In OS X, sometimes sound scope uses significantly more CPU time. Closing and re-showing it usually corrects the issue. It could simply be the Activity Monitor tool not always reporting the right value, or maybe the use an event loop timer for high-frequency events.

- The utility doesn't remove the .gz extension in OS 9.

- Save as sound when play length is endless... nice :).

Open Issues

The following issues would benefit from feedback, discussion and experimentation. My main focus is on user-interface and functionality. I'm still refining the internals of the player and haven't done exhaustive testing yet.

- General appearance: A slick UI would be somewhat nice, but I don't want one which is inflexible to new directions. It's probably best to first work out the functionality of the interface, then make a nice skin for it.

- Track listing: I plan on adding at minimum a way to get a list of the tracks in the current archive/album, and possibly a list of tracks waiting to be played.

- Meta-information database: I've decided to implement a fairly simple database of extra information about each track, including: explicit rating, intelligent auto-rating (tracks skipped often = bad, always listened to completion = good), custom volume, custom length. The utility will have some way to scan all files and gather information, like volume (i.e. ReplayGain), length, loop length, etc. During playback there will be a way to play only those tracks with good ratings etc.

- Window proxy icon: Currently when you drag the window proxy icon, you can move the current file (or make an alias if you hold command and option), as in the Finder. I want to allow the proxy icon to make an alias to the current track (including adding the #nn suffix for tracks in album). This would allow easy construction of playlists. I haven't been able to find much documentation on how to handle this, and experimenting hasn't yielded much.

- Errors window: It would be nice to make this look better, show icons in the list, have a button to show the file in the Finder, etc. I need to learn how to use the data browser control before I can improve this much. It's not a big priority.

- Playlist loop: Should there be an option to keep playing the current files over and over?

- Channel muting: This could be improved. I'm considering allowing an option click on a checkbox to turn that one on and all others off, to allow easy isolation of a single channel.

- Dock icon menu: Suggestions for additions/rearrangement welcome.

- Recently played menu: It would be nice to see recently played tracks, in case you forget the name of a new track you heard recently. Perhaps this should only add items you've listened to for a few minutes. One issue is how to title the menu items without them becoming too long.

- iTunes/QuickTime plug-in: This would be ideal since iTunes would handle all the user-interface, but it's probably quite involved to figure out how to do this.