diff -ruN TiMidity++-2.6.0/AUTHORS TiMidity++-2.6.1/AUTHORS --- TiMidity++-2.6.0/AUTHORS Mon Mar 29 19:28:06 1999 +++ TiMidity++-2.6.1/AUTHORS Mon Sep 27 21:40:40 1999 @@ -2,7 +2,7 @@ Tuukka Toivonen Vincent Pagel Takashi Iwai - Davide Moretti + Davide Moretti Chi Ming HUNG Riccardo Facchetti diff -ruN TiMidity++-2.6.0/ChangeLog TiMidity++-2.6.1/ChangeLog --- TiMidity++-2.6.0/ChangeLog Tue Sep 21 21:51:36 1999 +++ TiMidity++-2.6.1/ChangeLog Mon Sep 27 22:21:16 1999 @@ -1,20 +1,53 @@ -1999-09/21 Masanao Izumo +1999-09-27 Masanao Izumo + + * Version 2.6.1 released. + +1999-09-27 Masanao Izumo + + * AUTHORS,timidity/timidity.c,timidity/w32g_i.c: + Changed E-mail address of Davide Moretti from + to + +1999-09-27 Eric A. Welsh + + * timidity/{playmidi.h,playmidi.c}: Fixed bug of random panning. + Added new Channel structure member `int pan_random' for random pan flag. + Note that all of dynamic interfaces must be re-compiled, + because the size of `Channel' structure is changed. + +1999-09-26 Eric A. Welsh + + * timidity/readmidi.c (XG SysEx): Support for XG Multi Part Data + parameter change SysEx events. + +1999-09-25 Masanao Izumo + + * timidity/{readmidi.c,playmidi.c}: + Set MSB/LSB bank zero by default, except that XG MSB Bank of channel 10 + is 127 by default. + +1999-09-21 Eric A. Welsh + + * timidity/timidity.c (-EFchorus=2): Bug fix. + Typo in timidity.c 2.6.0, opt_surround_chorus never set. + +1999-09-21 Masanao Izumo * Version 2.6.0 released. -1999-09/21 Masanao Izumo +1999-09-21 Masanao Izumo * timidity/rcp.c: Bug fix of SameMeassure. * interface/vt100_c.c (ctl_current_time): Bug fix of displaying bold. -1999-09/20 Masanao Izumo +1999-09-20 Masanao Izumo * timidity/aq.c (aq_samples): Save PM_REQ_GETSAMPLES value if the acntl() succeeds. * timidity/sun_a.c: Implement PM_REQ_GETFILLED and PM_REQ_GETSAMPLES of acntl(). -1999-09/17 Eric A. Welsh +1999-09-17 Eric A. Welsh * timidity/{timidity.c,playmidi.c,playmidi.h} (new_chorus_voice_alternate): To use the surround sound instead of detuned chorus. diff -ruN TiMidity++-2.6.0/Makefile.in TiMidity++-2.6.1/Makefile.in --- TiMidity++-2.6.0/Makefile.in Tue Sep 21 23:18:00 1999 +++ TiMidity++-2.6.1/Makefile.in Wed Sep 22 23:00:00 1999 @@ -350,7 +350,6 @@ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook - info-am: info: info-recursive dvi-am: diff -ruN TiMidity++-2.6.0/NEWS TiMidity++-2.6.1/NEWS --- TiMidity++-2.6.0/NEWS Tue Sep 21 19:11:58 1999 +++ TiMidity++-2.6.1/NEWS Mon Sep 27 22:21:18 1999 @@ -1,3 +1,11 @@ +9/27, 1999 + * Version 2.6.1 released. + * Support for XG Multi Part Data parameter change SysEx events. + * Added new Channel structure member `int pan_random' for random pan flag. + Note that all of dynamic interfaces must be re-compiled, + because the size of `Channel' structure is changed. + * Bug fix. + 9/21, 1999 * Version 2.6.0 released. * Some configurations and installations are changed. diff -ruN TiMidity++-2.6.0/configs/msc-config.h TiMidity++-2.6.1/configs/msc-config.h --- TiMidity++-2.6.0/configs/msc-config.h Tue Sep 21 23:18:29 1999 +++ TiMidity++-2.6.1/configs/msc-config.h Mon Sep 27 22:29:14 1999 @@ -217,7 +217,7 @@ #define HAVE_MMSYSTEM_H /* In VDS Macro AAA=BBB is not available. */ -#define TIMID_VERSION "2.6.0" +#define TIMID_VERSION "2.6.1" #define DEFAULT_PATH ".\\" #define AU_W32 #define WINSOCK diff -ruN TiMidity++-2.6.0/configure TiMidity++-2.6.1/configure --- TiMidity++-2.6.0/configure Mon Sep 20 18:44:15 1999 +++ TiMidity++-2.6.1/configure Wed Sep 22 23:00:02 1999 @@ -881,7 +881,7 @@ PACKAGE=TiMidity++ -VERSION=2.6.0 +VERSION=2.6.1 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } diff -ruN TiMidity++-2.6.0/configure.in TiMidity++-2.6.1/configure.in --- TiMidity++-2.6.0/configure.in Mon Sep 20 18:44:08 1999 +++ TiMidity++-2.6.1/configure.in Wed Sep 22 22:59:56 1999 @@ -55,7 +55,7 @@ AC_INIT(timidity/timidity.c) SHELL=${CONFIG_SHELL-/bin/sh} AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE(TiMidity++, 2.6.0, no-define) +AM_INIT_AUTOMAKE(TiMidity++, 2.6.1, no-define) dnl To use CONTAINS() macro (See acinclude.m4) CONTAINS_INIT diff -ruN TiMidity++-2.6.0/interface/w32g_i.c TiMidity++-2.6.1/interface/w32g_i.c --- TiMidity++-2.6.0/interface/w32g_i.c Fri Sep 3 03:01:05 1999 +++ TiMidity++-2.6.1/interface/w32g_i.c Mon Sep 27 21:44:31 1999 @@ -2826,7 +2826,7 @@ sprintf(VersionText, "TiMidity++ version %s" NLS NLS "TiMidity-0.2i by Tuukka Toivonen ." NLS -"TiMidity Win32 version by Davide Moretti ." NLS +"TiMidity Win32 version by Davide Moretti ." NLS "TiMidity Windows 95 port by Nicolas Witczak." NLS "TiMidity Win32 GUI by Daisuke Aoki ." NLS "TiMidity++ by Masanao Izumo ." NLS diff -ruN TiMidity++-2.6.0/timidity/playmidi.c TiMidity++-2.6.1/timidity/playmidi.c --- TiMidity++-2.6.0/timidity/playmidi.c Mon Sep 20 12:19:38 1999 +++ TiMidity++-2.6.1/timidity/playmidi.c Mon Sep 27 22:14:02 1999 @@ -422,6 +422,7 @@ event */ channel[i].program = default_program[i]; channel[i].panning = NO_PANNING; + channel[i].pan_random = 0; /* tone bank or drum set */ if(ISDRUMCHANNEL(i)) { @@ -435,7 +436,9 @@ else channel[i].bank = default_tonebank; } - channel[i].bank_lsb = channel[i].bank_msb = -1; + channel[i].bank_lsb = channel[i].bank_msb = 0; + if(play_system_mode == XG_SYSTEM_MODE && i % 16 == 9) + channel[i].bank_msb = 127; /* Use MSB=127 for XG */ update_rpn_map(i, RPN_ADDR_FFFF, 0); channel[i].special_sample = 0; channel[i].key_shift = 0; @@ -1626,6 +1629,11 @@ for(i = 0; i < nv; i++) { v = vlist[i]; + if(channel[ch].pan_random) + { + channel[ch].panning = int_rand(128); + ctl_mode_event(CTLE_PANNING, 1, ch, channel[ch].panning); + } start_note(e, v, vid, nv - i - 1); if(channel[ch].chorus_level && voice[v].sample->sample_rate) { @@ -1960,13 +1968,10 @@ default: break; } - if(channel[ch].bank_msb >= 0) - newbank = channel[ch].bank_msb; + newbank = channel[ch].bank_msb; break; case XG_SYSTEM_MODE: /* XG */ - if(channel[ch].bank_lsb == -1) - return; switch(channel[ch].bank_msb) { case 0: /* Normal */ @@ -1993,8 +1998,7 @@ break; default: - if(channel[ch].bank_msb >= 0) - newbank = channel[ch].bank_msb; + newbank = channel[ch].bank_msb; break; } @@ -2279,7 +2283,12 @@ if(channel[ch].drums[note] == NULL) play_midi_setup_drums(ch, note); if(val == 0) + { val = int_rand(128); + channel[ch].pan_random = 1; + } + else + channel[ch].pan_random = 0; channel[ch].drums[note]->drum_panning = val; if(update_now) adjust_drum_panning(ch, note); @@ -2354,7 +2363,8 @@ break; case ME_PAN: - channel[ch].panning=current_event->a; + channel[ch].panning = current_event->a; + channel[ch].pan_random = 0; break; case ME_EXPRESSION: @@ -2472,6 +2482,7 @@ case ME_RANDOM_PAN: channel[ch].panning = int_rand(128); + channel[ch].pan_random = 1; break; case ME_SET_PATCH: @@ -3747,6 +3758,7 @@ case ME_PAN: channel[ch].panning = ev->a; + channel[ch].pan_random = 0; if(adjust_panning_immediately) adjust_panning(ch); ctl_mode_event(CTLE_PANNING, 1, ch, ev->a); @@ -3885,9 +3897,9 @@ /* TiMidity Extensionals */ case ME_RANDOM_PAN: channel[ch].panning = int_rand(128); + channel[ch].pan_random = 1; if(adjust_panning_immediately) adjust_panning(ch); - ctl_mode_event(CTLE_PANNING, 1, ch, channel[ch].panning); break; case ME_SET_PATCH: diff -ruN TiMidity++-2.6.0/timidity/playmidi.h TiMidity++-2.6.1/timidity/playmidi.h --- TiMidity++-2.6.0/timidity/playmidi.h Mon Sep 20 12:19:44 1999 +++ TiMidity++-2.6.1/timidity/playmidi.h Mon Sep 27 22:06:40 1999 @@ -229,6 +229,9 @@ int mapID; /* Program map ID */ AlternateAssign *altassign; /* Alternate assign patch table */ int32 lasttime; /* Last sample time of computed voice on this channel */ + + /* flag for random pan */ + int pan_random; } Channel; /* Causes the instrument's default panning to be used. */ diff -ruN TiMidity++-2.6.0/timidity/readmidi.c TiMidity++-2.6.1/timidity/readmidi.c --- TiMidity++-2.6.0/timidity/readmidi.c Tue Sep 21 19:55:19 1999 +++ TiMidity++-2.6.1/timidity/readmidi.c Mon Sep 27 22:06:00 1999 @@ -509,6 +509,91 @@ return 0; } +/* XG SysEx parsing function by Eric A. Welsh + * + * This function provides basic support for XG Multi Part Data + * parameter change SysEx events + * + * NOTE - val[1] is documented as only being 0x10, but this rule is not + * followed in real life, since I have midi that set it to 0x00 and are + * interpreted correctly on my SW60XG ... + */ +int parse_sysex_event_xg(uint8 *val, int32 len, MidiEvent *ev, int32 at) +{ + int num_events = 0; /* Number of events added */ + + if(current_file_info->mid == 0 || current_file_info->mid >= 0x7e) + current_file_info->mid = val[0]; + + if(len >= 10 && + val[0] == 0x43 && /* Yamaha ID */ + val[2] == 0x4C && /* XG Model ID */ + val[4] == 0x29 && /* Total size of data body to be analyzed */ + val[5] == 0x08) /* Multi Part Data parameter change */ + { + uint8 addhigh, addmid, addlow; /* Addresses */ + uint8 *body; /* SysEx body */ + uint8 p; /* Channel part number [0..15] */ + int ent; /* Entry # of sub-event */ + uint8 *body_end; /* End of SysEx body */ + + addhigh = val[3]; + addmid = val[4]; + addlow = val[5]; + body = val + 8; + p = val[6]; + body_end = val + len-3; + + for (ent=0; body <= body_end; body++, ent++) { + switch(ent) { + + case 0x01: /* bank select MSB */ + MIDIEVENT(at+ent, ME_TONE_BANK_MSB, p, *body, 0); + break; + + case 0x02: /* bank select LSB */ + MIDIEVENT(at+ent, ME_TONE_BANK_LSB, p, *body, 0); + break; + + case 0x03: /* program number */ + MIDIEVENT(at+ent, ME_PROGRAM, p, *body, 0); + break; + + case 0x08: /* note shift ? */ + MIDIEVENT(at+ent, ME_KEYSHIFT, p, *body, 0); + + case 0x0B: /* volume */ + MIDIEVENT(at+ent, ME_MAINVOLUME, p, *body, 0); + break; + + case 0x0E: /* pan */ + if(*body == 0) { + MIDIEVENT(at+ent, ME_RANDOM_PAN, p, 0, 0); + } + else { + MIDIEVENT(at+ent, ME_PAN, p, *body, 0); + } + break; + + case 0x12: /* chorus send */ + MIDIEVENT(at+ent, ME_CHORUS_EFFECT, p, *body, 0); + break; + + case 0x13: /* reverb send */ + MIDIEVENT(at+ent, ME_REVERB_EFFECT, p, *body, 0); + break; + + default: + continue; + break; + } + num_events++; + } + } + +return(num_events); +} + int parse_sysex_event(uint8 *val, int32 len, MidiEvent *ev) { if(current_file_info->mid == 0 || current_file_info->mid >= 0x7e) @@ -812,6 +897,8 @@ ev.time = at; readmidi_add_event(&ev); } + parse_sysex_event_xg(val, len, &ev, at); + reuse_mblock(&tmpbuffer); return 0; @@ -1529,7 +1616,9 @@ } } - bank_lsb[j] = bank_msb[j] = -1; + bank_lsb[j] = bank_msb[j] = 0; + if(play_system_mode == XG_SYSTEM_MODE && j % 16 == 9) + channel[j].bank_msb = 127; /* Use MSB=127 for XG */ current_program[j] = default_program[j]; } @@ -1586,7 +1675,9 @@ if(tonebank[current_set[j]] == NULL) current_set[j] = 0; } - bank_lsb[j] = bank_msb[j] = -1; + bank_lsb[j] = bank_msb[j] = 0; + if(play_system_mode == XG_SYSTEM_MODE && j % 16 == 9) + channel[j].bank_msb = 127; /* Use MSB=127 for XG */ current_program[j] = default_program[j]; } break; @@ -1628,13 +1719,10 @@ ch, bank_lsb[ch]); break; } - if(bank_msb[ch] >= 0) - newbank = bank_msb[ch]; + newbank = bank_msb[ch]; break; case XG_SYSTEM_MODE: /* XG */ - if(bank_lsb[ch] == -1) - goto end_of_event_switch; switch(bank_msb[ch]) { case 0: /* Normal */ @@ -1666,13 +1754,11 @@ ch, bank_msb[ch]); break; } - if(bank_lsb[ch] >= 0) - newbank = bank_lsb[ch]; + newbank = bank_lsb[ch]; break; default: - if(bank_msb[ch] >= 0) - newbank = bank_msb[ch]; + newbank = bank_msb[ch]; break; } diff -ruN TiMidity++-2.6.0/timidity/timidity.c TiMidity++-2.6.1/timidity/timidity.c --- TiMidity++-2.6.0/timidity/timidity.c Mon Sep 20 12:19:30 1999 +++ TiMidity++-2.6.1/timidity/timidity.c Mon Sep 27 21:43:46 1999 @@ -307,7 +307,7 @@ " TiMidity is free software and comes with ABSOLUTELY NO WARRANTY.", "", #ifdef __W32__ -" Win32 version by Davide Moretti ", +" Win32 version by Davide Moretti ", " and Daisuke Aoki ", #endif /* __W32__ */ "", @@ -2175,7 +2175,7 @@ case '1': case '2': - opt_surround_chorus = (*effect_opts == 2); + opt_surround_chorus = (*effect_opts == '2'); if(*(effect_opts + 1) == ',') opt_chorus_control = -(atoi(effect_opts + 2) & 0x7f); else