Reply 40 of 634, by MobyGamer
I set up a system nearly identical to yours (Olivetti M24, 8 MHz 8086, CT1320B Sound Blaster 2.0) and did some testing. First of all, I just want to say how much of a great achievement this is -- it's definitely giving GLX a run for its money! While GLX can mix slightly faster, MM has a much more graceful failure condition (as you wrote, it drops voices to keep up). GLX will simply produce noise or fail if it can't keep up, while MM will play what it can and still allow you to exit (eventually ;-). Also, I get the overall feeling that MM's output quality is better. I also like how interface is much nicer to use (being able to delete from the file browser is making it easier to manage files on a 32MB partition). And the ability to adjust the output rate without leaving the program makes it easy to test how various mixing speeds behave with various mods (the mod ALBINOSE.MOD has some speech samples -- at 22KHz you hear "people think they're seeing ghosts" but at 32KHz when it is dropping channels to keep up, you hear "_eop__ __ink they___ _eeing gho___" which is kind-of funny). It was fun to play 8-channel songs @ 16KHz, and 4-channel songs @ 26KHz (as high as I could go before channels were dropped). Overall you've done a great job!!
If you're still working on it, I have some suggestions:
Bugs (go to ftp://ftp.oldskool.org/pub/misc/Audio/testmods/ to get these mods):
- The song LIBERTIN.MOD has slightly incorrect timing; if you listen to pattern 6, the drum beat sample in channel 4 isn't looping in the right place, it's retriggered slightly too soon.
- The song LIVE.MOD has wrong notes in patterns 1-4 in channel 1. I changed Octives from 3 to 5 but it still sounded wrong.
- The song SMALLTECH.MOD has wrong/missing notes in channel 3 in the first two patterns; whenever SetVol 02 appears, the note is silenced.
- The song UPSTREAM.MOD is playing slightly too fast when it gets to pattern 4. (Off-by-1 in your BPM calcs maybe?)
- The song EXUDTITL.S3M plays with a slightly uneven tempo. It's noticable starting at pattern 5. BPM miscalc maybe?
- My M24 mouse driver uses the text cursor as the pointer when in text modes, but you disable the cursor so I can't see the pointer, making the mouse useless. (I got around this by using JOYOUS which is a joystick-as-a-mouse driver so I could test the other options.)
- The bottom status bar of the main screen is occasionally corrupt. Bad pointer reference probably.
- The total play time for some mods that use looping and many speed changes is not correct (TECHMARU.MOD is showing as being 33 minutes long when it's only 11 minutes long). Not really important, but technically a bug so I thought I'd mention it :)
- S3M files with FM instruments don't play. (You probably know this already)
- The samples list shows corrupted info for empty instrument slots for .FAR modules.
- I tried to load some ULT files but got "ULT format error" which led to an error that there wasn't enough memory to load them -- then it corrupted the memory map, because on exit I got the DOS error message "Memory error, cannot load COMMAND.COM, system halted". So I'm guessing maybe ULT support isn't finished?
- Provide an option to not disable the hardware cursor (see above)
- Show the number of active playing voices onscreen somewhere -- something like "8/6" to indicate that the module is trying to play 8 simultaneous voices, but MM is only able to produce 6 at the current mixing speed, and the "6" can be in flashing red or something). Priority should be given to updating these numbers so that they'll be visible even if the entire screen is repainting very slowly.
- /E for English isn't complete (shows "Charge xxxxxxxx.xxx" instead of "Loading xxxxxxxx.xxx"). Minor quibble.
- You don't support E0 ;-) Believe it or not, some modules use it (TECHMARU.MOD, AIRBOR.MOD), and you can hear it on a real Amiga. I never implemented E0 either, but a simple averaging filter on the final mixed buffer before it is output would do the trick. No need for an FFT-based lowpass filter. Just think, you could be the first PC modplayer in history to support E0...
I hope someday you'll open-source the code. I'm fluent in both pascal and assembler, and would be very curious to read it someday. Heck, maybe use it in porting an arcade game to 8088+CGA or something...