Document MidiPlay 1. INTRODUCTION 1.1. VERSION midiplay v1.2b 17-Oct-93 1.2. DISCLAIMER The author of this program can not be held responsible for any damage directly or indirectly caused by the use of the program. Use it at your own risk. 1.3. COPYRIGHT This program is copyright 1993 Janne Syväniemi. All Rights Reserved. The program is GIFTWARE. It is freely distributable as long as all files are included in their original form and no extra fee is charged. Midiplay may not be included in any commercial package without a permission of the author. If you use midiplay, send me anything worth of it (especially I would like to hear your own compositions in midi format). See also `Author' 1.4. WHAT IS MIDIPLAY ? Midiplay is a program that can play format 0 and 1 midi files (format 2 has not been tested). It can also print their contents. Other features include: - tempo can be changed - midi channels can be muted or played solo - midi events can be transposed (plus drum channel option) - program change and pitch bender message filter - endless loop option - format 1 files can be played like format 0 files (= format 2) - external or internal sync 1.5. REQUIREMENTS Midiplay should run on any Amiga from version 1.2 and up. Midiplay has been tested only on Amiga 500+ with 3Mb ram, but it has been compiled with Lattice/SAS C compiler v5.04 with KS 1.3 includes, so no >2.0 specific code has been used. 2. INSTALLATION Copy midi.library v2.0 to your LIBS: directory and midiplay wherever you like. Bill Barton's midi.library is Copyright (C) 1987, 1988, Pregnant Badger Music. More info about midi.library can be found on FredFish disk 227. 3. STARTING MIDIPLAY 3.1. CLI TYPE: midiplay [options] [filename] Only one file is allowed. If no filename has been given, midiplay expects input from current input stream, so redirection can be used. Options: -? usage message -f prints details of the midi file: format, the number of the tracks and the division of a quarter-note. -x prints all meta events in the file. A meta event can express tempo, time signature, key signature or text event (copyright notice, sequence/track name, instrument name, lyric etc.) -n prevents midiplay from sending events to midi port. Using this option you can print all the events without any delay between events. -tXXX sets playing tempo to XXX (BPM). Tempo change messages in the midi file are ignored. -d prints all real midi events in the file. -mC mutes all events on channel C. -sC sends only events on channel C. -rX transposes all note on/off messages by X (see also -u option). -uX sets drum channel to X. If this option is given, no transpose will happen on this channel. -c program change messages are not sent. -b pitch bender messages are not sent. -l loop. Plays the file infinite times. -pXXX sets program priority to XXX (default is 30) -q plays tracks (in format 1 files) in sequence. -g merges midi input to midi output (actually, it routes the MidiIn port to the MidiOut port) -e receives clock signals from an external source and synchronizes with it. Tempo can be controlled in real time from the source. The program waits a Start or Continue message from that source before starting. Midiplay can be stopped by sending a Stop message. If this option is not given, Midiplay transmits clock signals and Start and Stop messages. Thus an external source can be synchronized with Midiplay. Simple options can be given together like: -dcbl. Options with numbers must be given separate from the following options like: -u10 -lbp35 -m1 -m2 -dm4. 3.2. WORKBENCH DOUBLE CLICK Midi file icon (= project icon with default tool midiplay) or SELECT midi file icon and DOUBLE CLICK midiplay icon. Following tooltypes in a project icon are allowed: FILEINFO=ON prints details of the midi file: format, the number of the tracks and the division of a quarter-note. TEXTINFO=ON prints all meta events in the file. A meta event can express tempo, time signature, key signature or text event (copyright notice, sequence/track name, instrument name, lyric etc.) DONOTPLAY=ON prevents midiplay from sending events to midi port. Using this option you can print all the events without any delay between events. TEMPO=XXX sets playing tempo to XXX (BPM). Tempo change messages in the midi file are ignored. DATAINFO=ON prints all real midi events in the file. MUTE=C1 or MUTE=C1|C2|C3... mutes all events on channel C1 (and channel C2 ...). SOLO=C sends only events on channel C. TRANSPOSE=X transposes all note on/off messages by X (see also -u option). DRUMCHANNEL=X sets drum channel to X. If this option is given, no transpose will happen on this channel. NOPC=ON program change messages are not sent. NOPB=ON pitch bender messages are not sent. LOOP=ON loop. Plays the file infinite times. PRIORITY=XXX sets program priority to XXX (default is 30) SEQUENCE=ON plays tracks (in format 1 files) in sequence. MERGE=ON merges midi input to midi output (actually, it routes the MidiIn port to the MidiOut port) EXT=ON receives clock signals from an external source and synchronizes with it. Tempo can be controlled in real time from the source. The program waits a Start or Continue message from that source before starting. Midiplay can be stopped by sending a Stop message. If this option is not given, Midiplay transmits clock signals and Start and Stop messages. Thus an external source can be synchronized with Midiplay. 4. OTHER INFORMATION -When started from Workbench, midiplay opens its own console window. -Midiplay can be stopped using CONTROL-C. -Midiplay opens one midi source named "midiplay". Source is connected to MIDI library's resident node "MidiOut". If an external sync option is given, Midiplay will open also one midi destination named "midiplayin". 5. TODO -GUI -midi2text and text2midi (for addition of lyrics and other text) -singer: speech synthesizer :-))) -midi mixing -Amiga's internal sounds played on midi channels -AREXX port 6. PROBLEMS AND LIMITATIONS On smaller Amigas (500 & 600) Midiplay does not multitask very well. Files are played in time, but sometimes tempo is quite jerky. But I am happy with it on my A500 28Mhz and over 30 processes running. If you have something to complain, please let me know. There are still some problems in external sync mode. MidiIn may lose some clock signals on smaller Amigas and the midiplayer is then out of sync. If this happens, use slower tempo and do not print anything. Because Midiplay uses normal console windows, printing (and thus playing) can be stopped by pressing any key other than enter. Command ls (and maybe some other programs too) doesn't work correctly after Midiplay has been started first time from the CLI. I don't know why. Limitations: -SYSEX messages are not analysed nor printed. 7. HISTORY v1.0: 29-Jun-93, first version, only DOS, format 0 files. v1.1: 23-Jul-93, first public release, WB and tooltypes, format 1 files. v1.2: 29-Aug-93, external/internal sync and midi merge added, SYSEX messages now transmitted correctly, too slow tempo problem fixed. v1.2b:17-Oct-93, some corrections, smaller code 8. AUTHOR Programs, postcards, midi files, bug reports, requests, suggestions, questions to: Janne Syväniemi Lintuviidankatu 15 C 10 FIN-33340 TAMPERE FINLAND E-mail:csjasy@vehka.cs.uta.fi or csjasy@uta.fi Hardware: Amiga500+, SupraTurbo28, SupraDrive500XP 52Mb(+2Mb Fast Mem), MIDI interface, ROLAND D-10. Software: Dr T's KCS v3.57 (the best sequencer program) 9. CREDITS Thanks to: JBM for MIDI files and comments