G S P L A Y MIDI File Player for DOS Version 1.0 by Mark A. Fontana Released May 29, 1996 Freeware GSPLAY is a Standard MIDI File player for IBM-compatible computers running MSDOS. The program has been specially designed for playing General MIDI and Roland GS Standard MIDI files, but it will work fine for non-GM/GS files as well. GSPLAY also includes special support for the Roland SC-88. Feature summary: - GM/GS patchnames displayed according to device's capabilities, including all SC-88 patches and variations - Configurable GS/GM/MT32 reset (or user-defined reset) before playing each file - Playback starts immediately; no preprocessing delay - Karaoke-style lyric display - Shuffle play, sort by date/time, and alphabetized modes - Fast-forward, skip ahead, and back up during playback - Hotkeys provide quick access to any file in the playlist - Supports seven popular MIDI interfaces - Built-in OMNI mode and event filter for playing MIDI files on simple MIDI devices (digital piano, etc.) - Onscreen display of all notes on all channels - Piano keyboard display - MIDI files may be easily moved, renamed, or copied during playback - Flexible command line/script file format; wildcards & directory recursion supported - Elapsed time and bar graph show position in current file - Onscreen display of embedded Sound Canvas graphics and text messages - Uses textmode display; quick, compact, and fast - Panic button to kill hung/stuck notes - User-defined patchname tables - Tempo, velocity, transposition adjustable during playback - Solo of individual tracks or channels - Plays type 0/1/2 standard MIDI files with up to 256 tracks - Supports up to four MIDI interfaces at once, easily selected during playback - Runs on any IBM compatible machine... 8086->Pentium - Freeware MIDI interfaces supported: Roland MPU401-compatible interfaces (UART mode) Soundblaster (and compatibles) MIDI port/daughterboard Proaudio Spectrum MIDI port Gravis Ultrasound MIDI port MusicQuest SE parallel port interfaces Serial port MIDI (Roland SC-88, Miracle Piano, and others) Key Midiator (serial port) IMPORTANT: GSPLAY requires a MIDI interface and at least one MIDI device (most daughterboards are MIDI devices). It will NOT play music on a plain PC soundcard using the FM synthesizer or digital audio capabilities. (You may be able to use GSPLAY with such a soundcard by running a software driver program such as MegaEm on the GUS or AWEUTIL on the Soundblaster AWE32. But I can't guarantee that such solutions will work satisfactorily.) COMPUTER requirements: GSPLAY should run on any IBM compatible, even old PC and XT machines. (If you're using a machine this old, see the DISPLAY_TYPE and OLD_PC lines in GSPLAY.CFG.) For best results, I recommend a 286/8 MHz or better CPU under MSDOS 3.3 or later. GSPLAY uses only 80x25 textmode and should work on any display adapter. If a VGA/MCGA card is detected, GSPLAY will use a custom font and nicer colors. GSPLAY is designed to be run under plain MSDOS (or a fullscreen DOS box). Running GSPLAY in a window will generally not produce acceptable results. One of my goals in writing GSPLAY was to create a small, standalone MIDI player that would run on pretty much any IBM-compatible machine, even computers lacking the speed and memory to run Windows. A Windows or X/Motif version may happen eventually... SETTING UP GSPLAY --------------------------------------------------------- 1. Read the rest of this file. 2. Copy GSPLAY.EXE and GSPLAY.CFG into a directory together. 3. Edit GSPLAY.CFG with a text editor and specify the type of MIDI interface you're using. Also specify the kind of MIDI device or GS/GM soundcard, tone module, or daughterboard you have. 4. Read the notes in GSPLAY.CFG for your type of MIDI interface and make sure the required conditions are satisfied and the appropriate parameters have been correctly set. (BLASTER environment variable set for Soundblaster, address and IRQ specified for MPU401, etc.) 5. Adjust the other parameters in GSPLAY.CFG as you prefer. THE CONFIGURATION FILE ---------------------------------------------------- GSPLAY expects to find its configuration file "GSPLAY.CFG" in the same directory where GSPLAY.EXE is located. Edit GSPLAY.CFG with a text editor (MSDOS "edit" will suffice) to view and change the various parameters. Documentation for these parameters is included in the form of comment lines in the config file. You can remove the comment lines or any parts of the config file that don't apply to your system configuration. But I recommend that you keep a copy of the original file around in case you need to use the parameters later. You do NOT need to comment out unused parameters. COMMAND LINE OPTIONS AND SPECIFYING FILES TO PLAY ------------------------- GSPLAY has a simple but flexible syntax for specifying files to play. Basically, it expects a sequence of parameters on the command line in the form: [options] [filespec] [options] [filespec] ... Filespecs may contain the wildcards * and ?, and files are not assumed to have an extension of .MID. If you specify the option "REC" before a filespec, GSPLAY will recurse into the filespec's subdirectories, adding all matching files. Examples: gsplay rec c:\midi\*.mid Play all files matching "*.mid" in c:\midi and its subdirectories. gsplay rec c:\midi\foo.mid Play all files called "foo.mid" in c:\midi and its subdirectories. GSPLAY supports type 0, 1, and 2 standard MIDI files containing up to 256 tracks. (In the case of type 2 (multi-song) MIDI files, the TRACK option (described below) specifies which song to play. If you don't specify a track, GSPLAY will play each of the songs in the type 2 file in order, starting with song number 1.) You can also specify .SYX (SYSEX) files in filespecs, causing GSPLAY to transmit the contents of these files at the appropriate points in the playlist. (SYSEX files must have the extension ".SYX" so that GSPLAY will know not to process them as MIDI files.) The options preceding a filespec are applied ONLY to the files included by that filespec. That is, if you specify several different filenames, GSPLAY only considers the options that you place right before a particular filename. Before each group of options is processed, GSPLAY restores the default configuration specified in GSPLAY.CFG. Example: gsplay seconds 5 dir1\*.mid wait dir2\myfile.mid ^^^^^^^^^ ^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^ option filespec option filespec This command line would instruct gsplay to play the first 5 seconds of all MIDI files in directory dir1, then play "myfile.mid" in directory dir2, pausing before starting playback. The "seconds 5" command only applies to the files in dir1, and the "wait" command only applies to the file "dir2\myfile.mid". Here are the options you can specify to GSPLAY. These will override the default options in GSPLAY.CFG when applicable. Options followed by an 'n' accept a single argument, and there must be a space between the command and its argument. (You can get a quick summary of these options by running GSPLAY with no arguments.) MT32 Reset MIDI device to MT32-emulation mode, if MIDI device supports it. GS Reset MIDI device to GS Standard mode. GM Initialize General MIDI system. NORESET Don't send a reset sequence, even if one is specified in GSPLAY.CFG. INT n Use the specified MIDI interface (1-4, corresponding to the order the interfaces are defined in GSPLAY.CFG in the MIDI_INTERFACE parameter). If you only have one MIDI interface, you'll never need to use this option. SECONDS n Play only the first n seconds of each MIDI file. TEMPO n Play the MIDI file at n percent of the original tempo, where n is an integer between 1 and 1000 (n < 100 is slower, n = 100 is normal speed, n > 100 is faster). GSPLAY will limit the resulting tempos to between 10 and 300 BPM. TRANS n Transpose the music by n half steps, where n = -48 to 48. (Notes on drum channels will NOT be transposed.) VEL n Adjust the velocities (volume) of all notes in the MIDI file by adding n, where n is an integer from -64 to 64. TRACK n Play only track number n of a multitrack (type 1 or type 2) MIDI file. (Tracks are numbered starting with 1.) You can also specify "ALL" instead of a number; this will play all of the tracks in the file one at a time, in order. KEYBD Use piano keyboard display mode (overriding default in GSPLAY.CFG) NOTES Use note/channel display mode (overriding default in GSPLAY.CFG) NODISP Do not show a note display during playback. WAIT Wait for a keypress before starting playback. DELAY n Pause for n seconds between MIDI files. REPEAT Repeat each MIDI file until told to quit or to move to the next/previous file. REC Recurse into a filespec, adding all matching files. @filename Read filespecs/options from textfile "filename". The filespecs and/or options in this file will be processed just as if you had specified them at this point on the command line. (Note: You cannot nest this command.) *** The following options, if specified, will affect ALL files on the *** *** command line. The position of the option does not matter. *** LOOP Repeat the entire playlist until told to quit. NOQUIT Disable keyboard input during playback; playback cannot be aborted. ALPHA Alphabetize the list of MIDI files before playback (ascending order). BYTIME Sort the list of MIDI files by time before playback (most recent first). SHUFFLE Shuffle the list of MIDI files before playback. Naturally, you should only specify one of ALPHA, BYTIME, or SHUFFLE, since each of these options reorders the playlist! DURING PLAYBACK ----------------------------------------------------------- During playback, the following keys provide special functions. Note that pressing CTRL with certain keys will provide a faster way of making the adjustment. (The exact effects are described below.) PLAYBACK CONTROL COMMANDS SPACE Pause/resume ! Panic button; turn off all notes and reset controllers without stopping playback. (Useful when notes get stuck) F Fast forward (half volume, 4x normal speed) Press CTRL-F for faster fast-forwarding (8x normal speed) J Jump forward by 10 seconds B Jump backward by 10 seconds (takes slightly longer, since a seek from the beginning is required) Up Increase velocity of all notes on all channels (volume +) Press CTRL-Up to increase the velocity 10 steps at a time Down Decrease velocity of all notes on all channels (volume -) Press CTRL-Down to decrease the velocity 10 steps at a time PgUp Transpose up by 1 half step Press CTRL-PgUp to transpose up by one octave (12 half steps) PgDn Transpose down by 1 half step Press CTRL-PgDn to transpose down by one octave (12 half steps) + Increase tempo by 1% of original tempo Press CTRL- + to increase tempo by 10% of original tempo - Decrease tempo by 1% of original tempo Press CTRL- - to decrease tempo by 10% of original tempo O Restore original tempo, velocity, and transposition settings Home Restart the current file from the beginning Enter If you've specified a maximum number of seconds to play for each file (giving an "intro scan" effect) pressing Enter during the introduction will remove the time restriction so that the rest of the file will play. S Solo individual channel; press S repeatedly to change which channel is soloed. F1-F4 Select MIDI interface 1, 2, 3, or 4 as defined in GSPLAY.CFG PLAYLIST COMMANDS A Alphabetize playlist (ascending order) Press CTRL-A to alphabetize in descending order T Sort files by time (descending order; most recent first) Press CTRL-T to sort by time in ascending order (oldest first) $ Shuffle the playlist and start at the first file C Copy the current file M Move or rename the current file P Display the full path and filename of the current file Del Delete the current file Left Move to the previous MIDI file in the list Press CTRL-Left to jump to the first song in the playlist Right Move to the next MIDI file in the list Press CTRL-Right to jump to the last song in the playlist Tab Display hotkey table, a page-by-page menu of all the files in the playlist. You can jump immediately to any file, and when you exit this page, the hotkey assignments will remain in effect for you to use during normal playback. 1..0 Jump immediately to song number 1..10 in the hotkey list Alt-1..0 Jump immediately to song number 11..20 in the hotkey list DISPLAY COMMANDS D Toggle note display mode between no note display, note/channel display, and piano keyboard display (Piano keyboard display requires a VGA adapter and will not display properly when running in a window under Windows.) N Toggle patch display between patch names and patch numbers Patch numbers are displayed in the format xxx / yyy, where xxx is the patch number (0-127) and yyy is the variation (CC0) number R Toggle patch display between showing patches requested by the file and patches actually playing on your sound module X Show other settings (which tracks are playing, what reset mode is enabled, whether loop or repeat modes are active) MISC COMMANDS ?,H Display help screen I GSPLAY information ESC Exit GSPLAY If the command line option NOQUIT is specified, GSPLAY will ignore all of the above commands. Note: The "M" command is great for sorting out a directory of assorted MIDI files freshly downloaded from the net. Using the "DIR" parameters in GSPLAY.CFG, you can specify up to 12 target directories to which you can quickly move/copy files while using GSPLAY. This will allow you to organize your files during playback with as few as two keystrokes! COMMAND-LINE OPTIONS VS. KEYBOARD COMMANDS -------------------------------- When using the tempo, velocity, and transposition functions, it's important to understand the difference between the way GSPLAY handles keyboard commands and the way it handles the command line options. If you play a file, and say, change the tempo using +/-, go to the next file, then go back to the file where you changed the tempo, the tempo change you made will not be there anymore. But if you specify a tempo adjustment on the COMMAND LINE, that adjustment WILL be there every time you go to the file to which it applies. Think of it as, the command line switch is a stronger way of setting the tempo than pressing +/-, which provides a temporary adjustment effective only during a particular use of the file. Note that in either situation, pressing "O" will ALWAYS set the file back to its original tempo and velocity settings (exactly as specified in the MIDI file), with NO transposition. But like +/-, pressing "O" only has an effect for the current playback of the file. If you used command line options to modify the tempo/velocity/transposition, those settings will still apply the next time you play the file. PATCH DISPLAY ------------------------------------------------------------- The patches currently playing are displayed on the left side of the screen. Note that the numbers 1-16 correspond to MIDI channels, not tracks in the MIDI file (or Roland "parts"). If a patch entry is shown in dim text, this indicates that either the patch is the default patch assigned to that channel or that the patch was set using SYSEX messages (which is nonstandard and not recommended). Patches shown in bright text were set using patch change messages in the MIDI file. Between the MIDI channel numbers and patch entries, you will sometimes see one of the symbols below. These provide extra information about the patch or channel and are similar to the notation used on Roland Sound Canvas devices: * = Drum channel + = Patch is a Roland GS or SC-88 variation supported by your device (If no + is displayed, the displayed patchname is a capital patch.) # = Patch is an MT-32 emulation patch (not available on all GS devices) - = Patch shown is the patch to which your device automatically defaulted because the requested patch is not supported by your device ! = Patch shown is not available on your MIDI device ~ = Patch shown is not available and no sound is being produced, even though notes may show on this channel The symbols shown will vary depending on the settings of SHOW_PATCHES and MIDI_DEVICE in GSPLAY.CFG. Make sure you've set these options as you prefer. Details are in GSPLAY.CFG. NOTE DISPLAY--------------------------------------------------------------- To the right of the patch entry for each MIDI channel is a display of all 128 notes available on that channel. Notes that are currently playing are marked with a bar. If you have a color display, you will see an alternating pattern of light and dark columns in the background. These mark off the octaves; the leftmost note in a column corresponds to the note of C. (Due to hardware limitations, the octave bars will not be visible on a monochrome display adapter.) You can solo individual channels by pressing "S". This will cause the corresponding channel number to blink and the note display to emphasize the soloed channel. If you have a VGA adapter, you can also get a piano keyboard display showing all 128 MIDI notes on all channels (combined) as well as the status of the soft, sostenuto and sustain pedals. This mode is particularly good for examining piano sequences. Press "D" to toggle the display between the normal note display and the piano keyboard display. If you are playing a MIDI file with embedded bitmapped graphics, you will see the 16x16 pixel graphics displayed in the background of the note display. Only certain Roland GS files contain these images. TEXT WINDOW --------------------------------------------------------------- The narrow window immediately below the note display is the text window. It displays most of the printable text information in the MIDI file, including song names, track names, copyright information, generic text messages, and lyrics. The text window will store and cycle through the most important messages during playback. Occasionally you will see the text window cycling through unimportant data like instrument or patch names; this happens because the software that created the MIDI file did not conform to the standard uses of various text messages. Blocks of text larger than the window size will be displayed in chunks. The text window will also display any Roland GS text messages in the file (These events show as a scrolling marquee display on an external Sound Canvas module. They will appear as bright text in GSPLAY.). KARAOKE LYRICS If lyrics are present in a MIDI file, the text window will attempt to display them in a karaoke-style manner, anticipating each phrase and highlighting each syllable. GSPLAY should do a reasonable job with most MIDI files, as long as the lyrics use the normal printable ASCII characters. However, there doesn't seem to be much of a standard for encoding lyrics in MIDI files, except for in certain commercially- produced files. To make matters worse, some files include multiple sets of lyrics encoded in more than one format! If you come across a file that GSPLAY makes a total mess of, email it to me and I'll see what I can do. During playback of a MIDI file with lyrics, the text window will display "(Introduction)" or "(Instrumental)" at the appropriate places in the music (where no lyrics are being sung). After the last lyric is displayed, the text window will cycle through any title or copyright information for the song. INFORMATION WINDOW -------------------------------------------------------- Immediately below the text window is a 2-line window showing various bits of information about GSPLAY's current state, including the filenames for the next and previous files in the playlist, the number of the current file, and the total number of files in the list. Also shown are the current transposition, tempo offset, and velocity offset settings, the size (in bytes) of the current MIDI file, and the maximum polyphony (number of notes on simultaneously) of the current file. MESSAGE WINDOW ------------------------------------------------------------ Located at the bottom right of the screen is a message window. This window displays various status information and provides feedback for some of the commands available during playback. It also notifies you of any SYSEX messages embedded in MIDI files and identifies whether they are GS or non-GS messages. During playback, the background of the message window will form a bar graph growing from the left. This graph provides a visual display of how much of the current file has been played. DAMAGED MIDI FILES -------------------------------------------------------- Although GSPLAY is good about trapping errors, there will be unpredictable results when playing damaged MIDI files. If you experience long delays or garbage notes during playback, the MIDI file is probably damaged. One of the key symptoms of a bad MIDI file is that the delta times (times between events during playback) seem unreasonably long. GSPLAY can be set to detect enormous delta times and abort playback of such files automatically. The MAX_DELTA option in GSPLAY.CFG specifies the longest delta time (in seconds) that GSPLAY will allow before giving up on a particular file. If this value is set too low, GSPLAY may give up on files that aren't really damaged. I recommend that you use a value of 20 seconds or more. GSPLAY automatically removes damaged files from the playlist as they're detected. This prevents you from getting the same error message more than once. Note: Damaged file detection is disabled when playing a type 1 MIDI file with the TRACK option specified, since individual tracks in a multitimbral file may contain large delta times when instruments are silent (tacet). USING MULTIPLE MIDI INTERFACES AND MULTIPLE SOUND MODULES ------------------ You can use up to 4 MIDI interfaces with GSPLAY by specifying multiple interface names on the MIDI_INTERFACE line in GSPLAY.CFG. During playback, you can switch between the interfaces by pressing F1-F4 (defined in the order you listed the interfaces in GSPLAY.CFG). The first interface listed will always be the default interface, but this can be overridden using the "INT n" option on the command line. Only one interface can be sending data at once, and you can only have one instance of each type of interface. (Users with one multi-port interface can therefore use only one of the ports. If there is sufficient demand, I'll implement support for multiple ports in a future version of GSPLAY.) If you're using multiple interfaces, you can also specify multiple MIDI devices on the MIDI_DEVICE line in GSPLAY.CFG. This will cause GSPLAY to use the appropriate reset sequences and patch name displays for whichever interface is currently selected. (Note that if you switch interfaces in the middle of a file, you must restart the current file by pressing "Home" in order for the new MIDI device configuration to take effect.) You can also specify different reset and patchname display parameters for each interface in GSPLAY.CFG. Example: MIDI_INTERFACE MPU401 PAS GUS MIDI_DEVICE A GM SC_88 RESET_MODE GS GM NONE GS_SYSEX Y N Y NON_GS_SYSEX Y Y Y PATCH_NAMES Y N N SHOW_PATCHES REQUESTED REQUESTED REQUESTED PARTIAL_ALLOC_RESET Y N Y You can specify multiple MIDI interfaces even if you only have one actual interface. If you list the same interface tag twice, eg. MIDI_INTERFACE MPU401 MPU401 then pressing F1 and F2 will both refer to the same MPU401. This permits you to change the MIDI device configuration without modifying GSPLAY.CFG, since all of the parameters in GSPLAY.CFG supporting multiple interfaces will still work normally. For example, suppose you have an MPU401 as your MIDI interface, and two different MIDI devices connected to it- a Roland SC55 Sound Canvas and a generic General MIDI tone module. You could do the following: MIDI_INTERFACE MPU401 MPU401 MIDI_DEVICE A GM RESET_MODE GS GM GS_SYSEX Y N NON_GS_SYSEX Y Y PATCH_NAMES Y N SHOW_PATCHES REQUESTED PLAYING PARTIAL_ALLOC_RESET Y N ...etc. This will permit you to switch GSPLAY's configuration between the Sound Canvas and the General MIDI device by simply pressing F1 and F2. (Remember, you can also do this by specifying "INT 1" and "INT 2" on the command line.) The function keys will cause the data stream to switch to the selected interface immediately. However, the device configuration won't update until you either press Home to restart playback or use the arrow keys to play a different file. DEFINING YOUR OWN PATCHNAMES ----------------------------------------------- If you have a non-GS/GM MIDI device, you can define custom patch lists so that GSPLAY will display the correct patchnames for your device. Here's what you need to do: 1. Create a plain DOS text file listing the patches your MIDI device supports, one patchname per line, in order from 0-127. (patch 0 on the first line, patch 1 on the second line, etc.) Each patchname can be up to 12 characters long (longer names will be truncated). You do not need to define all 128 patch names. If you only define the first 30, for example, GSPLAY will display "Unknown" if any of the undefined patches are selected. 2. On the MIDI_DEVICE line, specify the filename of the textfile with your custom patch list (in place of one of the usual tags allowed for this parameter). Example: MIDI_DEVICE c:\midi\patchlst.txt You can have different custom patch tables for each MIDI interface, and the custom patchnames will be used for all channels except the drum channel (10). At the present time, you can only specify a single patchname for each patch number (0-127); variations and bank-switching are not supported. DEFINING YOUR OWN RESET SEQUENCES ------------------------------------------ GSPLAY includes built-in GS, GM, and MT32 reset sequences. However, you can instruct GSPLAY to send a custom reset sequence instead before playing each file. You can have different reset sequences for each MIDI device. Here's what you need to do: 1. Create a binary file of the bytes you want to send (SYSEX messages, etc.) ".SYX" files can be used without modification. There is no maximum size for this file. 2. On the RESET_MODE line, specify the filename of this data file in place of one of the usual tags (GS, GM, MT32). RESET_MODE c:\midi\reset.syx GSPLAY will then send the entire contents of this file to the current MIDI device before playing each file. After sending the sequence, GSPLAY will pause for 40 ms to give the device time to react to the message. You can add additional delays in the middle of a reset sequence by inserting byte FF (255 decimal) in the data; each FF will cause GSPLAY to pause for 60 ms. (This byte will not be sent to MIDI out, of course.) You can use multiple FF's to achieve longer delays if necessary. You can also specify .SYX files on the command line along with MIDI files, and GSPLAY will transmit them at the appropriate points in the playlist. (Note that the file extension *must* be ".SYX".) Two sample .syx files are included for use with Sound Canvas devices: ARABIAN.SYX - Performs a GS reset, then tunes the Sound Canvas to the Arabian scale on all channels. JUSTTEMP.SYX - Performs a GS reset, then tunes the Sound Canvas to just temperament (keytone = C) on all channels. Try using these instead of GSPLAY's built-in GS reset and you'll hear some really funky tuning! Since some GS MIDI files contain their own GS reset messages, you'll probably want to set ALLOW_RESET to "N" in GSPLAY.CFG. This will prevent the MIDI files from undoing the changes made by your custom .SYX files. USING GSPLAY TO RESET MIDI DEVICES ----------------------------------------- If you specify the option "GS", "GM", or "MT32" on the command line without specifying any MIDI files, GSPLAY will send the appropriate reset sequence and then exit. This is very useful in batch files when you want to reset a MIDI device before starting a program that expects the device to be in a certain state, such as a game or sequencer. You can only use one of these reset options at a time. If you specify more than one, GSPLAY will use the last one. Note that when using GSPLAY for this purpose, you can still specify "INT n" if you have multiple MIDI interfaces. GSPLAY will act according to the MIDI_INTERFACE and MIDI_DEVICE lines in GSPLAY.CFG, as usual. MISCELLANEOUS NOTES -------------------------------------------------------- Ctrl-Alt-Del, Ctrl-Break, and Ctrl-C are disabled while GSPLAY is running. This is because GSPLAY installs various interrupt handlers and changes the rate of timer 0 during operation. Exiting the program improperly would leave your computer in an undesirable state and cause it to hang. GSPLAY.EXE contains built-in virus protection. If the program detects that it has been modified, it will automatically terminate. If you're using an older CGA display, you may experience the infamous "snow" effect due to numerous direct writes to the screen. I avoided BIOS routines in the interest of speed. I figure most people with MIDI and soundcards in their PC's probably have something better than an ancient CGA card. GSPLAY assumes that channel 10 is a drum part, but it also monitors SYSEX messages and tries to detect when other channels are configured as drum parts. It tries to do this with bulk dump data, too. However, since I can't find any documentation on Roland's bulk dump data format, GSPLAY might not always detect when channels other than 10 are set to drum parts. If you find a MIDI file that's clearly playing drums on a channel other than 10 and GSPLAY doesn't detect it, please let me know. Some PC soundcards have MIDI interface hardware that doesn't work reliably (older Proaudio Spectrum cards are notoriously bad). This will sometimes result in stuck notes, notes not sounding, and similar kinds of problems. There is no way for GSPLAY to detect when these problems occur, but you can fix things temporarily by pressing "!", GSPLAY's "panic button". Presently, SC-88 owners will experience incorrect results when using GSPLAY to play dual-port MIDI files that have data for more than 16 channels. You can identify these easily: Roland's SC-88 demos usually have 33 tracks; one control track, and 32 music tracks. Another hint is visible when playback begins: you'll see the patches being set, and then another set of patches will sort of "wash over" the first set. All this happens because MIDI only supports 16 channels. Files with more than 16 channels in them use sort of a kludge. I'll work on including support for these files (using multiple MIDI ports) in the next version of GSPLAY. (In the meantime, please email me any such files you come across, and I'll use them for testing.) If you are using GSPLAY to play a MIDI device that operates mechanically (for example, a solenoid-driven player piano), be careful about using really fast tempos (this includes the fast-forward feature). While most solenoid piano systems have protection against really short MIDI events, I don't think it's a good idea to force a real instrument to play this fast; mechanical damage could result. Use common sense. (This warning doesn't apply to electronic MIDI devices, of course.) The piano keyboard display mode will not show properly if you run GSPLAY in a window under Windows. The problem is that GSPLAY uses custom VGA characters to draw the keyboard, and Windows' textmode emulation does not support custom characters. However, keyboard mode will work fine if you run GSPLAY fullscreen. FAQ TIME ------------------------------------------------------------------ Q: When running GSPLAY in a window under Windows, there are pauses in the music and the music only plays when the window is selected. A: You can improve the performance a little by turning off the note display (press "D"). However, GSPLAY was not designed for Windows and only happens to work somewhat. For best results, run GSPLAY exclusively fullscreen. ---- Q: I have an MPU401-compatible interface, and GSPLAY gives me the message "MPU401 transmission timeout". What should I do? A: Check that the MPU_ADDR and MPU_IRQ settings in GSPLAY.CFG are correct. You may get this message if either setting is wrong. ---- Q: How come GSPLAY doesn't have a file selector like every other PC program these days? I hate using command-line utilities! A: I recommend using GSPLAY with a shell program that lets you specify a particular program to run when you click on a file with a certain extension. I use Norton Commander this way with GSPLAY, and it's great. There are also a few shareware file selector shells that will do the job just as well. Using an external shell keeps GSPLAY small and provides you with a more consistent user interface for file selection. ---- Q: I have a Sound Canvas, and when I use the "B" key to scan backwards, sometimes all the instruments change back to piano, even though they show correctly on the screen. What's going on? A: GSPLAY is sending control messages too quickly for your equipment. Increase the value of SEND_DELAY in GSPLAY.CFG. ---- Q: When I press certain "ctrl" functions during playback, the keyboard locks up until the end of the song. A: This will happen with certain older PC's (IBM XT, for example), because they don't support extended keyboard functions. Set the parameter "OLD_PC" in GSPLAY.CFG to "Y" and the lockup problem won't happen anymore. You will not be able to use the commands CTRL-UP, CTRL-DOWN, CTRL-PLUS, and CTRL-MINUS, but everything else should be fine. (If you have a PC manufactured after, say, 1986, you shouldn't experience this problem.) ---- Q: I have a Roland LAPC-1 soundcard (or MT-32 external tone module). GSPLAY doesn't show the right patchnames. A: Specify "MT32" for the RESET_MODE parameter in GSPLAY.CFG. This won't fix everything, and it won't be correct if your MIDI files have SYSEX messages to redefine the patches, but it's better than nothing. GSPLAY was designed mostly for GS/GM MIDI devices, not the older MT-32. In any case, the actual music should play properly if the MIDI files were designed for the MT-32. ---- Q: GSPLAY crashes when I use both interface XXX and interface YYY at the same time. I thought you said it supports multiple interfaces! A: Since I don't own all the interfaces GSPLAY supports, I'm not able to test all the possible combinations. Most combinations should work okay, but if you find a case where using more than one interface locks up the machine, make sure there are no IRQ conflicts between the two devices, and try various alternative address/IRQ settings for them. If you still have problems, send me email. FUTURE PLANS -------------------------------------------------------------- I am thinking of implementing the following features in future versions: - A mode in which you can "pump" or "conduct" MIDI files just like old-fashioned piano rolls. This will complement a hardware/software system I've been working on to scan player piano rolls into MIDI files. This mode may include a scrolling piano roll display. - Support for playing up to 32-channel MIDI files using multiple (or multi-port) MIDI interfaces. I'll use 50-line VGA text mode to display all 32 parts at once. - Support for controlling GSPLAY from external keyboard controllers, such as the Roland A-80, by sending feedback messages to the keyboard's text display and responding to button presses on the A-80. This may tie into the "conducting" function, making GSPLAY useful for pit orchestra work. - The capability to play Disklavier and PianoDisc diskettes directly. I'm open to your suggestions; read on for information on how to contact me. DISCLAIMER, DISTRIBUTION, AND HOW TO REACH ME ----------------------------- DISCLAIMER: Use this program at your own risk. I accept no responsibility for hardware damage, data loss, natural disasters, or other mishaps that may or may not be related to your use of GSPLAY. DISTRIBUTION: You may freely distribute GSPLAY as long as you include GSPLAY.EXE, GSPLAY.CFG, and GSPLAY.DOC in their original formats. If you will be including GSPLAY on a disk or CDROM shareware compilation to be sold for profit, please notify me in advance. You may not charge any fees beyond reasonable duplication and media costs for GSPLAY. If you wish to bundle GSPLAY along with a GM/GS MIDI device or other hardware product, please contact me and we'll work something out. NAG-FREE SOFTWARE! GSPLAY is freeware. The version you have received is fully functional and you may use the program indefinitely with no obligation to register. There are no nag messages, delays, or other hassles in the program. But if you like GSPLAY and wish to encourage me to expand the program and do similar projects, I will gratefully accept your contribution. $10 is suggested, and users paying this amount will receive future updates of GSPLAY automatically by email, so be sure to include your email address. If you have limited funds, a postcard with your comments would be appreciated. If you have comments, contributions, or suggestions, or if you need technical assistance, I can be reached at the following addresses: mfontana@freenet.columbus.oh.us Mark Fontana 5353 N. High St. #1003 Columbus, OH 43214-1252 U.S.A. OTHER PROJECTS I'M WORKING ON --------------------------------------------- In 1994, I developed a hardware-software system to optically scan 88-note piano rolls into MIDI files. The system is functional, but it needs work. Lately, I've been working on a software utility to convert Marantz/Superscope Pianocorder data cassettes into MIDI files. The software is finished, and I'm now in the process of converting several hundred Pianocorder tapes to MIDI format. I'm also developing software to create new Pianocorder tapes from MIDI files. Besides player pianos and automatic music, I'm interested in computer graphics and animation. When I actually have free time, I enjoy working as an accompanist for opera and musical theater. I've also worked as a theater manager and cinema projectionist for several years. I hope to pursue a career in visual effects for the entertainment industry. I'm currently working on my M.S. in computer science at the Ohio State University. I received my B.S. in computer engineering from Ohio State in December 1994. SPECIAL THANKS TO --------------------------------------------------------- Radames Bernath, my primary beta tester, who has provided an amazing amount of help in debugging all aspects of GSPLAY, especially the multi-interface support, karaoke lyrics, and SC-88 features. Jim Heyworth, who worked with me to get GSPLAY running satisfactorily on older machines. Steve Cole, who helped me track down a bug with MPU401 interfaces. Bob Carwell, who tested GSPLAY on several old machines and loaned me his Key Midiator so that I could implement Midiator support. Mike Kent (Third Party Developer Liaison, Roland Corporation) who provided documentation on Roland GS products and the official GS Standard specifications. Roger Stern, who's provided much support over the course of GSPLAY's development. And to these other fine beta testers: Mervyn Kong, Irving Dekterev, Thomas Jay Swan, Krunoslav Leljak, Duncan Cambridge, Archana S. Prasad, John Grant, David Abramsky, Rob Lynch, Joe Linn, and Dave Lames. OBLIGATORY ACKNOWLEDGEMENTS ----------------------------------------------- Roland, GS, and GS Format are registered trademarks of Roland Corporation U.S. Soundblaster is a registered trademark of Creative Technologies. Proaudio Spectrum is a registered trademark of MediaVision. Gravis Ultrasound is a registered trademark of Gravis. Midiator is a registered trademark of Key Technologies. MusicQuest and MidiEngine are registered trademarks of MusicQuest, now a division of Opcode Corporation. PianoDisc is a registered trademark of Music Systems Research, Inc. Disklavier is a registered trademark of Yamaha Corp. Norton Commander is a registered trademark of Symantec Corp. GSPLAY was developed with the aid of code derived from the Standard MIDI File Programmer's Toolkit, Copyright (c) 1990 by MusicQuest, Inc. (Highly recommended, and now FREE on the net at http://www.opcode.com) Support for MusicQuest MidiEngine interfaces was implemented using libraries provided by MusicQuest. Support for the Proaudio Spectrum and GUS was implemented using code derived from the PAS and GUS software development kits available on the net. I am not affiliated with any of the companies mentioned above. -- END OF GSPLAY.DOC ------------------------------------------------------