For the early days before TiMidity 0.2i, see the file CHANGES in the src/ directory. Since then, I modified 0.2i to serve as output driver for the music programming system Adagio. Then I adapted the code for KDE's kmidi. Then later as a plugin for Alsaplayer. Along the way, at various times I've incorporated bits of code and some tables from Timidity++, mostly marked off in the code with "#ifdef tplus". For the current version called "gt", I ripped out a lot of stuff, because I couldn't test it, or didn't want to be responsible for getting it to work, because it never worked very well, or just to reduce my confusion level. If there's an interface or output driver you'd like to have put back in, as a basis for your work on the code, let me know. Maybe I can put it back. -- Greg Jul 04 2004 or thereabouts Initial distribution Jul 09 2004 Changed name of midi player from "timidity" to "gt" Sat Jul 10 01:58:45 HST 2004 Fiddled with -X and -V expression and volume options. Added -W <degrees> option to adjust surround sound. Added man pages for gt, sf2cfg, unsf. Fixed last major known bug in unsf. (There are still bugs in volume balance and volume envelopes.) Sat Jul 10 13:43:26 HST 2004 Imported defs of int32, etc. from Timidity++. (gtim.h) Sun Jul 11 12:12:57 HST 2004 Changed "int" to "int32" in resample.c, hoping to get it working on Mark Constable's Alpha64. Removed resample with filter. Doesn't work. (resample_f.c) Fixed modulation envelope delay. (resample.c) Imported output buffer control from old version. (alsa_a.c) Tue Jul 13 03:37:32 HST 2004 For RMID files, read past RIFF chunk. (readmidi.c) Wed Jul 14 12:13:51 HST 2004 Disabled pan-delay. It's not working, and benefit is unclear. Enabled more compiler warnings. (Makefile.am) Starting to clean up types in resample code. Thu Jul 15 11:01:59 HST 2004 Using T++ resample_t int32 now. pre_resample no longer works. But who cares? Fixed silly bug in surround panning routine. (playmidi.c) In resampling, check overshoot divisor not 0. Fri Jul 16 02:50:18 HST 2004 unsf: set panning to 7 always and add an extended byte for true panning 0-255. Made "wet" the default with "dry" as an option. (timidity.c) Fri Jul 16 10:42:57 HST 2004 Redid panning for stereo instruments; now separation is much less: 12 midi units. Added 20 milliseconds of delay to right channel of instrument. (playmidi.c) Removed delay for chorusing echo notes. (playmidi.c) Sat Jul 17 11:42:29 HST 2004 Removed max/min data checks from resample. Fixed Alsa flush_output(). (alsa_a.c) Sun Jul 18 09:22:26 HST 2004 Indented all .c files. Added ncurses interface. (ncurs_c.c) unsf: give names to banks in config file. I have to give the name after "#N " to be compatible with Timidity++. So cfg.l is now modified to scan past the "#N ". Mon Jul 19 20:14:34 HST 2004 Blue voices bar for ncurses interface. Added utility patcat to make stereo GUS patches. Tue Jul 20 06:28:27 HST 2004 ncurses tracing: Stereo notes now magenta. Blue sustains now visible. Added karaoke lyrics. Added play list. Wed Jul 21 05:38:59 HST 2004 ncurses: Show initial message from driver. Show loading progress. Behave better when window is resized. Default buffer fragments no longer 2. Tracing mode is now the default. ncurses is now the default interface. With no file arguments, gt now constructs a play list of midi files in the current directory. With a single directory argument, it constructs a play list from that directory. (Tuukka Toivonen's interesting message is gotten with "-v".) Thu Jul 22 06:06:24 HST 2004 Edited gt.man and other documents. Added some box characters to ncurses display, and made a prettier help window. Mouse click on play list selects next song. Play list displayed before first song starts. Added user input check while loading extended GUS patches. Removed delay between right and left of a stereo patch, and increased separation from 12 to 24. Fri Jul 23 07:09:05 HST 2004 Fixed up autoconf stuff to detect alsa and ncurses. ncurses screen is now white if that's the default background. Added some optimization flags. Asked for more compiler warnings (and got them). Fixed most. Sat Jul 24 09:37:56 HST 2004 Use sf2 initial attenuation to adjust sample volume. (Some instruments are now too faint, but this is better than what I was doing before.) ncurses: Use left of voices bar to show state of Alsa buffer. Add "Ceiling" control to adjust permitted polyphony with shifted left and right arrow keys. Reverted to a black background display -- it looks better. Added beep for mouse clicks outside the play list. Display midi time signature and key signature. (Last part of time signature might not be accurate.) Sun Jul 25 09:23:07 HST 2004 Display midi tempo. ncurses tracing: show GS/XG/GM type. A bunch more midi controllers are now recognized, but they mostly don't do anything yet. Celeste has some effect, but probably not at all like real celeste. Mon Jul 26 14:31:57 HST 2004 Implmented mono and poly controllers (just guessing); Imported Timidity++ implementation of sostenuto. Reduced stereo voices amplitude by 25%. Should I? ncurses: added * in B column for mod wheel. Tue Jul 27 18:37:05 HST 2004 Fixed bugs in clone note killing. ncurses: Added 4 columns for other controllers. Cropped file name for display. opt_dry now turns off reverb and chorus requested in patch. brightness raises reverb echoes by an octave harmonic content raises chorus echoes by a fifth Thu Jul 29 14:45:27 HST 2004 ncurses: Sometimes song title and author are shown. Replaced surround panning algorithm with old version, but with volumes adjusted logarithmically. Update help, gt.man. In adjust_amplitude(), don't cut center volume in half when doing 5.1, since it's for only one speaker. Removed flanger and phaser delays. Sound terrible. ncurses: Added ESC to quit. Sun Aug 1 01:20:35 HST 2004 Adjust output frame count with delay from alsa driver (alsa_a.c). ncurses: In 'S' sustain column, portamento ('P') and legato ('L') are also shown. Also soft pedal ('s') and sostenuto ('O'). Added clips display. -p command line option now sets voices_ceiling rather than voices. Removed -F fast panning option (timidity.c). (Always do fast panning.) Fixed master volume -- forget to multiply it in in rev. of Thurs. Added option to turn off celeste. For ncurses, add mouse click to toggle reverb, chorus, and celeste. ncurses: Clear controller display on reset. Sun Aug 1 16:06:01 HST 2004 Made expression table for panning. Mon Aug 2 06:03:32 HST 2004 XG variation bank is now a timed midi event and can be set to 0. ncurses: Added banks to display. Kill percussion notes to reduce polyphony. Tue Aug 3 00:33:56 HST 2004 ncurses: Increased size of ring to avoid stuck notes in display. Reenabled optimization in src/Makefile.am Wed Aug 4 05:49:52 HST 2004 ncurses: Fixed help window. Reduced amount of default info on display. Added mixer window -- prel. version. Set alsa driver start threshhold to full buffer. Fri Aug 6 07:32:39 HST 2004 Play-pause toggle implemented, but ncurses display doesn't yet sync up correctly. ... Now it does. Experiment with alsa snd_pcm_pause() was not successful. Updated gt man page. Added -v verbose option to patinfo. Disabled interpretation of keynumToVolEnvHold, hoping to hear Halopad of Fluid sf. Still can't hear it. ncurses: Added surround separation to mixer window. Sun Aug 8 06:42:52 HST 2004 Fixed bug in playing velocity layers. Options in config files can be preceded by "#option", for compatibility with Timidity++. Found 2 bugs in treatment of XG sfx banks: 1. Bank 120 is not substituted for the sfx bank. 2. When an sfx bank voice is loaded, the corresponding voice in bank 0 is also loaded (but not played). ncurses i.f. now shows sfx bank (in magenta). Added Fluid_GM.cfg to the examples directory. Mon Aug 9 04:13:10 HST 2004 ncurses i.f. now shows rhythm sfx bank. ncurses: Do initial reset to show bullets. Fixed previous incorrect change to note terminations in resampling. Added info to verbose display of patinfo. Added pitch modulation for XG variation banks 40-42. It's different, anyway. Tue Aug 10 03:49:28 HST 2004 ncurses: Show patch memory instead of loading bar. Added fast load option to load only first layer. ncurses: Don't scroll playlist near bottom. XG variation banks 40-45 now play mallet. Wed Aug 11 17:58:40 HST 2004 Fixed bug in channel number coming from XG sysex dumps by ignoring port. Implemented XG sysex assignment of receive channel. ncurses: Notes on channels above 16 are shown in cyan. Thu Aug 12 02:10:31 HST 2004 Worked around bug in ext. GUS patch for synthdrum freq. center(?). Added some more XG controller assignments in sysex dumps. For variation banks 40-45, linked up mallet notes -- perhaps not necessary. Do not make all looping voices sustained (instrum.c). (XG doc says horse sfx is looping but not sustained.) Removed fast attack feature (instrum.c). Fixed help page to show correct default max patch memory. Adopted T++ random pan for XG sysex. Fixed loading of patches for percussion XG receive channels. Fixed ncurses display of drumset for receive channels. Fri Aug 13 06:19:55 HST 2004 Refixed yesterday's workaround for SynthDrum problem. ncurses: Clear notes display when restart. Implemented XG variation effect for cases that overlap reverb and chorus (to the extent the latter are implemented). Sat Aug 14 14:08:25 HST 2004 Made tremolo parameters local to voice. Added tremolo for a couple of chorus/variation types. Worked around bug that segfaults due to non-existent rhythm sfx banks. Fixed bug caused by reflexive receive channels. Expanded room for play list, so that a console window can show one. Mon Aug 16 00:32:30 HST 2004 Nicer tracing messages, in cyan. Avoid with -inq; get more with -invv. bhangra.mid, jungle.mid required too much polyphony; had to start killing notes that are not decaying. Tue Aug 17 06:33:13 HST 2004 Dusted off a midi disassembler "dim" and put it in utils directory. Reverb delay for XG is now as specified in the XG spec. (For reverb system only -- variation reverb not fixed yet.) Wed Aug 18 07:13:21 HST 2004 All XG basic effect parameters now have defaults according to spec and are probably correctly set by sysexes. Hardly anything is actually implemented, though. Implemented various attack/release/decay controls from sysex and nrpn, for drums and melodic. Thu Aug 19 07:28:27 HST 2004 Implemented data initialization for insertion effects 1 and 2. Fri Aug 20 04:59:24 HST 2004 Fixed alsa driver to get max fragments for period = AUDIO_BUFFER_SIZE, which turns out to be 8 on my system. Inserted check for user input before pcm_wait -- more responsive now. Added extra stereo notes for some insertion effects. Reverb notes now controlled by these XG effect parameters: reverb time (parm 1) initial delay (parm 3) dry level (identified with reverb send) (parm 10) er/rev balance (parm 13) Sat Aug 21 13:49:05 HST 2004 Get some debugging info with -invv to see what info is reaching the effects processor. XG chorus block parameters LFO freq, LFO depth, feedback are given some sort of interpretation now. Sat Aug 28 09:22:33 HST 2004 ncurses: Revamped colors. Implemented velocity sense depth/offset (from T++) and XG dry level. Sun Aug 29 04:45:54 HST 2004 Throttled allocation of clone notes. Fixed drum panning bug. Implemented drum coarse pitch assignment. ncurses: Added magenta part to voices bar for non-reverb effects. Redid velocity calculation. Fixed bug in transposition; allow transposition for drums. Sat Sep 4 05:22:48 HST 2004 Added ac3 output -- output device "d" for "Dolby". Sun Sep 5 10:15:15 HST 2004 Extracted ac3 encoder from ffmpeg. Made default names for wave and ac3 output files. Mon Sep 6 14:18:03 HST 2004 Added system configure for ac3 encoder. Finally got interpolation+lp-filter to work. Reworked treatment of filter cutoff freq. Tue Sep 7 05:51:48 HST 2004 Implemented 2 levels of filter resonance. Added 100Hz filter to lfe for wave and ac3 output. Removed command line option -P to set default instrument. Cfg reader now accepts "\" to continue line before option. Stop default stripping loops and envelopes for percussion (for non-eawpats). Wed Sep 8 03:13:17 HST 2004 4 levels of filter resonance. Decreased mod wheel depth. Thu Sep 9 13:47:24 HST 2004 Added 3 bytes to extended GUS format for lfo parameters -- affects GUSSF2-SPEC, unsf.c, patinfo.c, as well as gt. Disabled filter interpolation for soundfonts because of bug. (See Sep 12 note.) Changed default volume and expression curves to linear. Sat Sep 11 09:55:44 HST 2004 Moved choice of interpolation algorithm to the voice level. Added cutoff=n option in config files. Added default cutoff frequencies for GUS patches. Implemented drum cutoff, resonance, and variation send. Added sanity check for cutoff frequency to unsf. File README.controllers lists letters shown in ncurses i.f. Sun Sep 12 03:44:25 HST 2004 Made choice of linear/nonlinear interpolation and filter/nofilter orthogonal. Redid function key interpolation choice for ncurses i.f. Echo notes now use linear interpolation with no filter. Cut down resonance effect of harmonic content controller to make ambient.mid sound better. Filter for soundfonts doesn't show bug now, but can't really hear it at all any more. What's wrong? Fixed bug in mapping rhythm sfx to regular bank numbers. Amalgamated some ac3*.h files. Mon Sep 13 02:57:19 HST 2004 Fixed ncurses misc controllers colors for signed values. Tue Sep 14 04:09:47 HST 2004 Filter for soundfonts fixed by disabling lfo parameters. Fixed lfo (needs work though). Fixed lfo parameter calculation in unsf. Now soundfonts and extended GUS patches work the same. Thu Sep 16 14:00:30 HST 2004 unsf could segfault on small .sf2 files. Fixed. Sat Sep 18 09:59:16 HST 2004 Added banks 52-54 as tutti voices. Now for XG midis, all melodic banks below 17 count as variation banks, and if there is no patch for a voice in the requested bank, that bank counts as a variation bank and bank 0 is used, whether or not the midi is XG. Sun Sep 19 07:13:15 HST 2004 unsf: Fixed problem with some names ending in spaces. Added options -s to extract only one velocity layer and -s to extract left channels only from stereo patches. Also -d to force assumption that the .sf2 is a drum kit. Added lfo modulation of filter cutoff for variation bank 4. Mon Sep 20 10:27:28 HST 2004 To use more sfx percussion banks, changed cfg syntax so that old "drumsfx1", e.g., now becomes "drumsfx 0", where the number after "drumsfx" can be 0-127. Tested using "drumsfx 33" for the "Small Latin" set used in a Richard Dudeney xg midi "krust.mid". Also, now names can be assigned to such kits in the cfg file. See examples/Latin_Hand_Perc.cfg. Wed Sep 22 04:21:17 HST 2004 Fixed some bugs in kit assignments. Made percussion sfx magenta in ncurses i.f. Added mu100 voices. Not working 100% yet. Sat Sep 25 08:30:50 HST 2004 Added vl voices. Redid sndfont sample volume calculation. Speeded up sndfont loading. Fixed some config interpretation bugs. Sun Sep 26 16:46:18 HST 2004 Now have distinct (though incongruous) patches for most pianos and basses, annotated in .cfg files in examples/ directory. Mon Sep 27 05:39:43 HST 2004 Unsf shouldn't use "-B0" suffix when there is only one bank. Implemented mod wheel control of tremolo, and xg sysex controls that connect mod wheel to pitch and tremolo (and filter, but that's not implemented yet). Tue Sep 28 03:26:37 HST 2004 Mod wheel control finished now. Seems ok for pitch. Maybe ok for tremolo. Can't tell for frequency -- no good midi test files. Should make sure filter cutoff is not too high when harmonic content controller is used. cfg reader now checks for out-of-range bank numbers Wed Sep 29 03:59:58 HST 2004 New "bankxg" keyword for variation banks 1-16. Some error reporting for out of range bank numbers in cfg files. Thu Sep 30 08:23:02 HST 2004 Added "-b number" command line argument for auditioning upper banks. Fri Oct 1 04:46:02 HST 2004 Used the last byte in the extended GUS sample header for a soundfont generator (#59) used in APS Emu fonts. Function unknown. unsf added options -n (no write), -V (adjust sample volumes), -F (flag sustain adjust) Added "keep/strip = sustain" user config option Sun Oct 3 04:37:42 HST 2004 Ad hoc fix for soundfont attack and sustain calculation. Gave up on trying to get looping-but-no-sustain patches. Extended patcat to combine extended patches. Tue Oct 5 09:37:56 HST 2004 Revised soundfont treatment of stereo voices to use mono patches for both left and right in the case of partially stereo instruments. Likewise for extended GUS patches. Wed Oct 6 11:13:28 HST 2004 unsf: Fixed some major bugs. Still have to handle percussion pools, somehow. Thu Oct 7 00:34:16 HST 2004 unsf: Percussion pools done. The "-L" suffix for stereo drum names is now trimmed off. Mon Oct 11 03:35:47 HST 2004 Added utility program sfz2pat (replaces old wav2pat program). Wed Oct 13 06:20:07 HST 2004 Extended sfz2pat to read aiff files. Added sfz patch reader. Very primitive, so far. Fri Oct 15 11:09:16 HST 2004 Implemented keyboard splits in sfz2pat/sfz-loader. Sun Oct 17 05:39:12 HST 2004 Changed default rate to 48000 after learning that Audigy resamples to this. Sfz-loader works now, at a primitive level. See examples/BbClar.sfz. Mon Oct 18 06:10:18 HST 2004 Redid purging of instruments from memory, so that sample data pointers don't have to point to the start of allocated memory. Tue Oct 19 11:46:18 HST 2004 Reading oggs for sfz samples. Thu Oct 21 03:53:01 HST 2004 Speeded up loading GUS patches by using mmap. This takes more memory, and I seem to have lost some polyphony. Much faster. Fixed change of song title in ncurses non-tracing mode. Implemented "soundfont" command for cfg files. Fri Oct 22 08:29:32 HST 2004 Playing 24 bit samples from sfz patches now, but I can't tell whether it's working. Changed FRACTION_BITS to fit Easyrider samples. Some samples are still too long. Sat Oct 23 04:30:44 HST 2004 It's working ok, but percussion envelopes for sfz are not right. Changed sfz to allocation system to be able to free groups. Sun Oct 24 03:33:54 HST 2004 Updated sfz2pat for allocation. Implemented sfz sw_hikey, sw_lokey, sw_up, sw_down. Made arbitrary amplitude adjustment for 24-bit samples: *8. Implemented sfz hirand, lorand, amp_random. The soundfont config command didn't reset cfg_condition. Fixed. Tue Oct 26 09:26:07 HST 2004 Revised surround panning for 6 channels. Now midi pan 0-127 goes from equal amplitude for left rear & front, for 0, to equal amplitude for right rear and front, for 127. 32 other pan values for surround effects pan between the two rears. It makes more sense, but does it sound better? Yet to do: fix 4 channel case similarly. Wed Oct 27 06:54:48 HST 2004 Tried setting sample length bits to 64. It works ok, but takes too much cpu. Tue Nov 2 03:51:06 HST 2004 Added legato -- arbitrary cut of first 32ms of sample. Now adjust panning immediate of all but reverb notes. Arbitrary reduction of center volume by half. (Retracted.) Wed Nov 3 11:07:00 HST 2004 One note of a stereo pair may pan slightly to the rear. Sun Nov 7 12:20:51 HST 2004 Revised lp filter yet again. Made minor improvements to patinfo utility. Made major improvements to unsf utility. Now it looks at end of sample name to allot samples to left and right channels. Now filter resonance from soundfonts is left in centibels. Tue Nov 9 03:09:38 HST 2004 Redid polyphony reduction routine. Works better for busy midis, but sometimes turns off reverberation unnecessarily. Lowered rate of lfo controlling the lf filter. Wed Nov 10 08:28:46 HST 2004 Halved resonance specified in soundfont. Tried adding an lfo for resonance -- doesn't sound right. Wed Nov 17 09:34:58 HST 2004 Implmented new lp filters: variable state, moog vcf. Not yet in use, though. Lowered lp cutoff frequency to make resonance sound better. Thu Nov 18 07:26:23 HST 2004 Implemented XG bank 27, rezo sweep.