10/28/93 Preliminary version 0.4u

	Fixed gettimeofday()-related bug which caused pauses in music.

	Added command line options to mp to set reverberation on
	all channels, -R reverb, and to set chorus depth on all
	channels, -C chdepth.

	mp can play some .mod files now, but it plays only the notes
	without the patches on synths other than the gus.  The code
	is extracted from Hannu's program gmod.c.  Mod files must
	be named with the suffix .mod in order to be played from xmp.
	This is an experiment.

10/18/93 Preliminary version 0.4t

	Single letter command line flags can now be combined; e.g.,
	"mp -vf ..." is like "mp -v -f ...".

	xmp plungers now work consistently to set percussion channel
	pan, reverberation, and chorus depth.

	Fixed a bug in 'ad -midi' pointed out by Shannon Hendrix.

	Further revision of output to driver to prevent some
	complicated songs from hanging the driver.  Vibrato is
	now turned off at especially busy times.

	Implemented fm stereo reverberation.

	Fixed bug: fm "other voice" was not loaded, causing
	driver complaints.

	Reverberation for fm and gus is now controlled individually
	for each patch with two parameters: "echo delay" and
	"echo attenuation" (kept in std.*, drums.*, editable
	with glib 1.9f).

	mp just issues note-off commands at ^C instead of stopping
	immediately; hit ^C again to stop sooner.

10/9/93 Preliminary version 0.4s

	Still trying to get songs to end gracefully -- not too
	soon, not too late, no spurious notes at end.  This
	version's maybe a little better at that.

	Revised tuning of gus notes with vibrato.

	Output to driver sequencer queue is managed better
	(I hope), but it takes up more cpu time.

	Pitch bends are delayed for reverberation notes.  (Try
	"Bad Love" from awesome.zip -- sounds better.)

	The spread of chorus depth notes for percussion is
	much larger; spread is settable individually for
	each patch (using glib).

	Decay portions of gus volume envelopes are shortened
	for some percussive melodic instruments: pianos, acoustic
	guitars, string basses, banjo, sitar.  If the 3rd env.
	rate has been changed in std.gus, the data in std.gus
	is used for the 2nd and 3rd rates, and the 3rd rate is
	adjusted for reverberation.

	"mp -v" shows lyrics/notes/markers with the music.

9/25/93 Preliminary version 0.4r

	Only midi files go onto xmp's file menus or into the
	carousel.

	Using Kenneth Osterberg's port of Xview 3.2 for xmp,
	available from sunsite in /pub/Linux/lib/xview3L5.tar.gz.
	Note that to compile xmp, you need to put the file
	ucontext.h from the patches subdirectory in the
	distribution into /usr/include/sys.

	Gus can do reverb notes for external synth (#define
	HELP_EXT_REVERB to enable).

	Reduced unnecessarily (with Xview 3.2) high cpu usage.

	Hannu cleared up a couple of problems with the patch manager
	-- now it loads fm voices ok.

	Vibrato now has opposite phase for the 2 chorus depth notes.

	Gus voices with vibrato sounded sharp at high pitches -- shifted
	pitch down a little, arbitrarily.

	Gus percussion and melodic voices were confused in doing
	reverberation.

	Added track-count and playing-time gizmo to xmp main screen.

	Improved counting of notes for determining when to shift voices
	from one device to another when polyphony exceeded (but it
	still doesn't really work well for multi-track files).

9/15/93 Preliminary version 0.4q

	This version is for the 1.99.9 sound driver (required for patch
	manager); the changes to the driver mentioned below in notes for
	previous versions have now been made, with the exception of
	the change required for stereo fm and the suggested change
	of SEQ_MAX_QUEUE from 512 to 1024.

	Added test version of Hannu's patch manager: pmgr.  midithru2.c
	is Hannu's midithru.c with a few small changes.  Loading
	of fm patches does not work.  (ad/mp/xmp do not use the
	patch manager; note warnings in pmgr.c file.)

	Fixed a bug in voice allocation; caused new bugs for output
	to external synth: hanging notes and missing notes.

	At Hannu's suggestion, eliminated dependence on a particular
	value of driver SEQ_MAX_QUEUE.

	Channel assignments to an external program in cfg files now have
	priority over other channels that might be sent to the external
	synth.

	Now using Gravis/Forte patch values for vibrato depth and period
	(guessing at interpretation).  Mod wheel and GS vibrato
	rate & depth are implemented for cards.

9/6/93 Preliminary version 0.4p

	Please change the #define of SEQ_MAX_QUEUE in driver
	1.99.8 sound_config.h from 512 to 1024 and recompile
	the kernel.  Without this, ad/mp/xmp will hang at the
	end of every song.

	Routines for loading patches to an external synth are separated
	out in extvoice.c to make it easier to add support for other
	synths than Kawaii K1.

	Thanks to Istvan, found and fixed a bug in the treatment of the
	midi sustain controller, which was affecting all channels
	instead of just its own.

	A file "ultrasnd.ini" is no longer looked for in the
	gus patch directories, but instead a file <name>".cfg"
	is looked for there.

	Gus now has priority over fm for percussion.  Sending
	voices to fm when gus polyphony would be exceeded now
	actually works.

	Extended drums sets, tone banks, cfg-files, loading of
	special individual patches to fm and Kawaii K1.  Fm patches have
	file suffix ".sbi" and if not in the same directory as the
	file being played, live in /usr/midi/Plib.  In cfg files,
	a line "FM" signals that subsequent patches referred to
	are fm patches, rather than gus patches, and a line
	"EXTERNAL" initiates references to external synth patches.
	Corresponding to /etc/default.cfg, there may be a /etc/fm.cfg
	and a /etc/external.cfg.

	Fixed a bug that made fm percussion sound worse than it
	needs to.  The wrong note numbers were being used.

	Pseudo-stereo no longer works for fm.  (It will when
	the driver gets an fm pan control.)

	Fixed pan, chorus depth and reverberation of indidvidual
	drums.  Added more depth to chorus depth and changed
	default chorus depth from 25 to 16.

8/28/93 Preliminary version 0.4o

	Changing expression within a note is disabled, since it is
	not working properly.  (It could be enabled by commenting
	out the #define at the beginning of phase2.c.)

	Fixed yet another bug in timing and tempo, but I think
	it's still not quite right.  Thanks to Istvan Bernath and
	Michael Kronvold for their help in finding the problem.

	Reduced amount of information produced by the -v command
	line flag and added a -vv flag for getting more info
	displayed.

	Started implementing use of different drum sets and tone
	banks, which are reported in mp verbose output.  Patches
	for tone banks are assigned in cfg files (ordinarily,
	/etc/default.cfg -- an example is given in CFG-FORMAT).

	Strip msdos path from patch names in cfg files, and accept
	volume and detuning numbers given after patch name.  Can
	give names instead of numbers for GM voices and drums
	in gus patch assignments.

	Provided for putting gus .pat files in a second directory,
	/dos/ultrasnd/midi2, to keep custom patches separate from
	Gravis patches -- an administrative convenience.

	Reverberation is improved.  Redid volume and expression
	(new gus_vol.c required for driver).

	Added channel assignment for cfg files.

	Moved positions of voices in drums.gus to avoid file seek
	error when low (non-existent patch) drum note occurs.

8/14/93 Preliminary version 0.4n

	Added duration and transposition controls to std.gus and
	drums.gus (require glib 1.9f to edit).

	Reverberation is improved.

	Non-GM drum notes below #35 are now played on the gus,
	provided there is a patch for them (formerly, they were
	discarded).  Non-GM drum notes above #81 are now played as
	notes (rather than being interpreted as rolls) when the
	option "drum rolls" in the xmp settings window is turned
	off, provided again that there is a patch for them.

	Gus patches are looked for first in the same directory as
	the midi file being played -- this allows non-standard
	patches.  Gus patches can also be changed with configuration
	files: a .cfg file with a patch list, like the Gravis .cfg
	files, is looked for in the same directory, then a file
	"ultrasnd.ini" in this directory, and finally a file with
	the latter name in the default patch directory.  Mp's
	verbose listing gives the names of these substitute .pat
	files instead of the GM instrument names.  The Gravis
	format is extended to allow track and other assignments
	and settings (see CFG-FORMAT).

	Polyphony to gus is kept track of and programs are shifted to
	the fm card to avoid exceeding value of setting_gus_voices
	(32 default).

	Refined midi time calculations; generalized tm to accept
	times given in seconds and fractions (as produced by "midt -s").

	xmp meter shows stereo percussion.

7/31/93 Preliminary version 0.4m

	The Makefile by default now assumes "-lipc" is not necessary
	(i.e., that you have libc-4.4.1 or later).

	Percussion voices are now panned individually.  Fm channels
	were not correctly panned -- fixed.

	Istvan Bernath observed inaccuracies in percussion timing.
	The calculation of midi times is more accurate now, and it
	seems to help.

	Adjusted vibrato data; added vibrato controls to xmp.  Added
	vibrato to echo notes generated for reverb.

	Added controls to bottom of xmp meter; can write controller
	information to a file.

7/27/93 Preliminary version 0.4l

	Added plungers for midi controllers to xmp meter.

	Fixed errors in vibrato and tempo.  Improved K1 volume control.

	Forgot to add spaces into file names put into carousel
	by "add *" -- fixed.  Window now widens to accommodate
	widened carousel list after "add *" when names are long.

7/23/93 Preliminary version 0.4k

	midifile functions now permit trailing 0 padding.

	Added pop-up menu to xmp carousel.

	It was possible for midifile routines to accept a controller
	value > 127.  Fixed by "correcting" to max 127.  Messages
	with invalid controller numbers > 127 are now skipped over.

	Tsk, tsk, Dan.  Fixed xmp to close directories.

	Increased values of some constants to accommodate 512 tempo
	changes and 128 program changes/track.

	More work on fm op2 patches.

7/18/93 Preliminary version 0.4j

	Implemented fm stereo (static).  Change line 493 in opl3.c of
	1.99.7 version of driver to hear it:
  opl3_command (map->ioaddr, FEEDBACK_CONNECTION + map->voice_num, instr->operators[10]/* | 0x30*/);

	Redid fm voices.

	Speeded up reading midifiles by about 10%, but mp can no
	longer take a file on stdin, and there is no prompting for
	corrected file names.

	Added recycle and auto options to xmp carousel.

	Added xmp vibrato depth setting.

7/14/93 Preliminary version 0.4i

	Phase 4 of gus note envelopes are set by value of midi
	reverberation controller.

	Echo notes done for reverb are now less likely to be cut off;
	when a chorused note is cut off early, both voices are cut off
	at the same time.

	Fixed bugs in interpretation of tempo tracks and program
	tracks -- now tempo and program are treated globally with
	respect to midi tracks.

	Temporarily fixed main-volume control for fm voices (make-do
	until this works in driver).

	Use drivers volume calculation for gus.  (Dynamic expression
	changes no longer work.  Gus volume slider no longer works.)

	Reversed meter colors for reverberation.

7/9/93	Preliminary version 0.4h

	Improved gus volume calculation; restored xmp gus volume slider.

	Added another pseudo-stereo effect to pan channels.

	Changed patch format to be consistent with driver 1.99.6.

	Added alternate patch library oldstd.gus with honktonk.pat
	and without charang.pat.

	Added xmp setting to display pitch or instrument group instead
	of channel in the meter bars.

7/6/93	Preliminary version 0.4g

	Xmp uses shared memory to communicate with child player;
	some settings made dynamic.

	Misc. changes to be consistent with driver.

7/3/93	Preliminary version 0.4f

	Raised gus volume; default number of voices is now 32.

	Added meter color (select which controller affect color)
	and gus tuning to xmp settings.  Removed gus volume.

	Xmp meter display no longer flashes; uses more colors.

6/27/93 Preliminary version 0.4e

	Loading gus patches is now consistent with driver 1.99.5;
	attempts at envelope control are disabled, since the driver
	will be doing this.

	Improved synchronization of xmp display; added some
	settings.

	When a file is playing, the xmp 'quit' button now just
	stops it; a second click is necessary to quit xmp.

6/21/93 Preliminary version 0.4d

	Added carousel and meter to xmp.

6/16/93
	Added XView front end (xmp) to mp.

	Redid std.sb voices (still not very good).  Disabled use of
	cells 6-11 for fm opl3, since they don't work.

6/8/93	Preliminary version 0.4c

	Implemented pitch vibrato for some gus and fm voices (hardcoded
	in phase2.c -- constants in tremulo.h).

	Fixed bug which caused wrong midi program to be used in
	certain circumstances.

	Put honky.pat and charang.pat from Gravis 2.05 into std.gus.

	Toned down chorus effect a little.

	Finished commenting phase2.c.

	Refined pseudo-stereo to keep some stereo location for pianos;
	move instruments around a little less.

5/25/93 Preliminary version 0.4b

	Commented first part of phase2.c.

	Extended dynamic voice allocation to external synth -- preempt
	its decisions about which notes to cut off when there are
	too many.

	Changed open of /dev/sequencer to non-blocking to keep more
	events in driver queue.

	Took steps to reduce data rate to /dev/sequencer (chorusing
	was getting us bogged down) -- now we remember program, pitch bend,
	and pan associated with voice and don't reset them when it is not
	necessary.

	Implemented layering under control of chorus depth controller
	93 for fm and gus.

	Added pseudo-stereo effects for fm and gus.

5/19/93 Preliminary version 0.4a

	Reworked gus channel pressure.

	Added overall loudness control for gus: compiled in with
	-DGUS_LOUDNESS=<n> (sort of a percentage).

	Extended echo notes with reverberation controller 91 from
	fm to gus.

	Changed meaning of "-s" command line option to "no-solo";
	i.e., never cut off notes when a new (different) note begins.

	Verbose output loading gus voice now shows patch name from
	*.gus library.

	Allow gus note overlap on non-polyphonic instrument when
	notes come from different directions.  (Cf. "Le Cygne";
	is it a good idea?)

	Revised midifile.c to handle tempo tracks (not sure it
	works correctly).

	mp.c: count volume and expression controls; guess when
	volume is being used dynamically, and then substitute
	expression control.

	Redid gus volume function.  Maybe there's a little less
	clicking?

	Changed voice-like patches to polyphonic in vname.h.

5/9/93
	Moved enter_prog() routine from phase1.c to mp.c to reduce
	duplication.

	Removed display of cell diagnostics in phase2.c (except
	as an ifdef'd option).

	Set end loop points to 0 in std.gus and drums.gus for all
	patches that have loop flag 0 in patch header.

5/8/93
	Changed WAKETHRESH at beginning of phase2.c from
	128 to 32 -- seems to help with stuck notes on external
	synth (but still get some playing Kimiwinosete and others).

	Started using XPOLYPHANY=8 for K1.  Changed so that gus is
	first alternative choice here too, when program is shifted
	to card (and made verbose message look less like an error).
	Prevented shift if neither fm card nor gus present or when
	gus has unsufficient memory (nowhere to shift to).

	Cleaned up code of getdur() in mp.c a little.

	Commented most code in mp.c.

5/7/93	Preliminary 0.4 version announced to gus mailing list.

	Cleaned up code: reduced duplication between ad & mp,
	used indent -kr on ad & mp C-code, added -Wall for compile
	and fixed for all warnings.  Fixed an "=" for intended "=="
	in midi input routine (thank you, gcc).

	Reduced compensation for "grace period" in phase2.c -- gus now
	more legato.

	Discovered that strings are at least sometimes polyphonic
	instruments and changed vname.h accordingly.

	Added fm reverberation, but it uses cells so fast it can
	hardly ever be used.
