diff -ruN TiMidity++-2.9.3/ChangeLog TiMidity++-2.9.4/ChangeLog --- TiMidity++-2.9.3/ChangeLog Mon May 8 15:26:08 2000 +++ TiMidity++-2.9.4/ChangeLog Wed May 24 14:23:26 2000 @@ -1,3 +1,26 @@ +2000-05-24 Masanao Izumo + + * Version 2.9.4 released. + +2000-05-17 Masanao Izumo + + * Fixed automake 1.4 bug, and updated Makfile.in files using this fixed + version of automake. The automake patch is available from: + http://www.goice.co.jp/member/mo/timidity/dist/automake-1.4-bugfix1.pat + +2000-05-17 Eric A. Welsh + + * resample.c: Fixed drum portament bug. + * timidity/{instrum.c,sndfont.c}: Enable pre_resampling(). + +2000-05-12 Katsuhiro Ueno + + * timidity/alsa_a.c: Support for ALSA 0.6 + +2000-05-09 Masanao Izumo + + * timidity/resample.c: Fixed drum portament bug. + 2000-05-08 Masanao Izumo * Version 2.9.3 released. diff -ruN TiMidity++-2.9.3/Makefile.in TiMidity++-2.9.4/Makefile.in --- TiMidity++-2.9.3/Makefile.in Mon May 8 15:26:26 2000 +++ TiMidity++-2.9.4/Makefile.in Wed May 24 23:30:31 2000 @@ -240,7 +240,7 @@ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ + test "$$dot_seen" = "no" && rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ @@ -332,7 +332,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/NEWS TiMidity++-2.9.4/NEWS --- TiMidity++-2.9.3/NEWS Mon May 8 13:29:58 2000 +++ TiMidity++-2.9.4/NEWS Wed May 24 14:25:31 2000 @@ -1,3 +1,7 @@ +05/24, 2000 + * Version 2.9.4 released. + * Support ALSA 0.6 + 05/08, 2000 * Version 2.9.3 released. * Enable drum bends. This fix also enables drum chorus, mod-wheel, diff -ruN TiMidity++-2.9.3/configs/msc-config.h TiMidity++-2.9.4/configs/msc-config.h --- TiMidity++-2.9.3/configs/msc-config.h Mon May 8 15:27:00 2000 +++ TiMidity++-2.9.4/configs/msc-config.h Wed May 24 23:31:05 2000 @@ -261,7 +261,7 @@ /* In VDS Macro AAA=BBB is not available. */ #define __W32__ -#define TIMID_VERSION "2.9.3" +#define TIMID_VERSION "2.9.4" #define DEFAULT_PATH ".\\" #define AU_W32 #define WINSOCK diff -ruN TiMidity++-2.9.3/configure TiMidity++-2.9.4/configure --- TiMidity++-2.9.3/configure Wed Apr 26 14:07:02 2000 +++ TiMidity++-2.9.4/configure Tue May 9 11:11:15 2000 @@ -884,7 +884,7 @@ PACKAGE=TiMidity++ -VERSION=2.9.3 +VERSION=2.9.4 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.9.3/configure.in TiMidity++-2.9.4/configure.in --- TiMidity++-2.9.3/configure.in Wed Apr 26 14:06:56 2000 +++ TiMidity++-2.9.4/configure.in Tue May 9 11:11:06 2000 @@ -55,7 +55,7 @@ AC_INIT(timidity/timidity.c) SHELL=${CONFIG_SHELL-/bin/sh} AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE(TiMidity++, 2.9.3, no-define) +AM_INIT_AUTOMAKE(TiMidity++, 2.9.4, no-define) dnl To use CONTAINS() macro (See acinclude.m4) CONTAINS_INIT diff -ruN TiMidity++-2.9.3/doc/C/Makefile.in TiMidity++-2.9.4/doc/C/Makefile.in --- TiMidity++-2.9.3/doc/C/Makefile.in Mon May 8 15:26:57 2000 +++ TiMidity++-2.9.4/doc/C/Makefile.in Wed May 24 23:31:01 2000 @@ -145,7 +145,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/doc/Makefile.in TiMidity++-2.9.4/doc/Makefile.in --- TiMidity++-2.9.3/doc/Makefile.in Mon May 8 15:26:55 2000 +++ TiMidity++-2.9.4/doc/Makefile.in Wed May 24 23:31:00 2000 @@ -254,7 +254,7 @@ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ + test "$$dot_seen" = "no" && rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ @@ -313,7 +313,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/doc/ja_JP.ujis/Makefile.in TiMidity++-2.9.4/doc/ja_JP.ujis/Makefile.in --- TiMidity++-2.9.3/doc/ja_JP.ujis/Makefile.in Mon May 8 15:26:58 2000 +++ TiMidity++-2.9.4/doc/ja_JP.ujis/Makefile.in Wed May 24 23:31:03 2000 @@ -145,7 +145,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/interface/Makefile.in TiMidity++-2.9.4/interface/Makefile.in --- TiMidity++-2.9.3/interface/Makefile.in Mon May 8 15:26:35 2000 +++ TiMidity++-2.9.4/interface/Makefile.in Wed May 24 23:30:40 2000 @@ -284,7 +284,7 @@ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ + test "$$dot_seen" = "no" && rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ @@ -343,7 +343,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/interface/bitmaps/Makefile.in TiMidity++-2.9.4/interface/bitmaps/Makefile.in --- TiMidity++-2.9.3/interface/bitmaps/Makefile.in Mon May 8 15:26:42 2000 +++ TiMidity++-2.9.4/interface/bitmaps/Makefile.in Wed May 24 23:30:47 2000 @@ -147,7 +147,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/interface/motif_bitmaps/Makefile.in TiMidity++-2.9.4/interface/motif_bitmaps/Makefile.in --- TiMidity++-2.9.3/interface/motif_bitmaps/Makefile.in Mon May 8 15:26:40 2000 +++ TiMidity++-2.9.4/interface/motif_bitmaps/Makefile.in Wed May 24 23:30:45 2000 @@ -147,7 +147,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/interface/pixmaps/Makefile.in TiMidity++-2.9.4/interface/pixmaps/Makefile.in --- TiMidity++-2.9.3/interface/pixmaps/Makefile.in Mon May 8 15:26:44 2000 +++ TiMidity++-2.9.4/interface/pixmaps/Makefile.in Wed May 24 23:30:49 2000 @@ -147,7 +147,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/libarc/Makefile.in TiMidity++-2.9.4/libarc/Makefile.in --- TiMidity++-2.9.3/libarc/Makefile.in Mon May 8 15:26:32 2000 +++ TiMidity++-2.9.4/libarc/Makefile.in Wed May 24 23:30:37 2000 @@ -241,7 +241,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/libunimod/Makefile.in TiMidity++-2.9.4/libunimod/Makefile.in --- TiMidity++-2.9.3/libunimod/Makefile.in Mon May 8 15:26:46 2000 +++ TiMidity++-2.9.4/libunimod/Makefile.in Wed May 24 23:30:51 2000 @@ -234,7 +234,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ diff -ruN TiMidity++-2.9.3/timidity/Makefile.in TiMidity++-2.9.4/timidity/Makefile.in --- TiMidity++-2.9.3/timidity/Makefile.in Mon May 8 15:26:49 2000 +++ TiMidity++-2.9.4/timidity/Makefile.in Wed May 24 23:30:54 2000 @@ -259,7 +259,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ @@ -280,7 +280,6 @@ ../libarc/arc.h ../utils/nkflib.h wrd.h ../utils/strtab.h controls.o: controls.c ../config.h ../interface.h timidity.h \ ../utils/support.h controls.h -debug.o: debug.c effect.o: effect.c ../config.h timidity.h ../utils/support.h instrum.h \ playmidi.h output.h reverb.h filter.o: filter.c ../config.h timidity.h ../utils/support.h common.h \ diff -ruN TiMidity++-2.9.3/timidity/alsa_a.c TiMidity++-2.9.4/timidity/alsa_a.c --- TiMidity++-2.9.3/timidity/alsa_a.c Wed Apr 12 12:23:37 2000 +++ TiMidity++-2.9.4/timidity/alsa_a.c Wed May 17 13:13:07 2000 @@ -2,6 +2,7 @@ TiMidity++ -- MIDI to WAVE converter and player Copyright (C) 1999,2000 Masanao Izumo Copyright (C) 1995 Tuukka Toivonen + ALSA 0.[56] support by Katsuhiro Ueno This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,9 +18,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - linux_audio.c + alsa_a.c - Functions to play sound on the VoxWare audio driver (Linux or FreeBSD) + Functions to play sound on the ALSA audio driver */ @@ -51,7 +52,6 @@ typedef void snd_pcm_t; #endif - #include "timidity.h" #include "common.h" #include "output.h" @@ -222,7 +222,9 @@ const int32 extra_param[5]) { int ret_val = 0; +#if ALSA_LIB < 5 const int32 orig_encoding = *encoding__; +#endif const int32 orig_rate = *rate__; int tmp; #if ALSA_LIB >= 5 @@ -400,14 +402,35 @@ /* Set buffer fragments (in extra_param[0]) */ #if ALSA_LIB >= 5 +#if ALSA_LIB >= 6 + pparams.frag_size = tmp; + if (extra_param[0] == 0) + pparams.buffer_size = pinfo.buffer_size; + else + { + int frags = extra_param[0] - (extra_param[0] % pinfo.fragment_align); + if (frags > pinfo.max_fragment_size) + frags = pinfo.max_fragment_size; + if (frags < pinfo.min_fragment_size) + frags = pinfo.min_fragment_size; + pparams.buffer_size = tmp * frags; + } + pparams.buf.block.frags_xrun_max = 0; + pparams.buf.block.frags_min = 1; +#else pparams.buf.block.frag_size = tmp; pparams.buf.block.frags_max = (extra_param[0] == 0) ? -1 : extra_param[0]; pparams.buf.block.frags_min = 1; +#endif pparams.mode = SND_PCM_MODE_BLOCK; pparams.channel = SND_PCM_CHANNEL_PLAYBACK; pparams.start_mode = SND_PCM_START_GO; +#if ALSA_LIB >= 6 + pparams.xrun_mode = SND_PCM_XRUN_FLUSH; +#else pparams.stop_mode = SND_PCM_STOP_STOP; +#endif pparams.format.interleave = 1; snd_pcm_channel_flush (handle__, SND_PCM_CHANNEL_PLAYBACK); @@ -417,10 +440,18 @@ pparams.fragments_max = (extra_param[0] == 0) ? -1 : extra_param[0]; pparams.fragments_room = 1; tmp = snd_pcm_playback_params (handle__, &pparams); -#endif +#endif /* ALSA_LIB >= 5 */ if (tmp < 0) { -#if ALSA_LIB >= 5 +#if ALSA_LIB >= 6 + ctl->cmsg(CMSG_WARNING, VERB_NORMAL, + "%s doesn't support buffer fragments" + ":request frag_size=%d, buffer_size=%d, min=%d\n", + dpm.name, + pparams.frag_size, + pparams.buffer_size, + pparams.buf.block.frags_min); +#elif ALSA_LIB == 5 ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "%s doesn't support buffer fragments" ":request size=%d, max=%d, min=%d\n", @@ -464,8 +495,13 @@ dpm.rate = psetup.format.rate; ret_val = 1; } +#if ALSA_LIB >= 6 + frag_size = psetup.frag_size; + total_bytes = frag_size * psetup.frags; +#else frag_size = psetup.buf.block.frag_size; total_bytes = frag_size * psetup.buf.block.frags; +#endif bytes_to_go = total_bytes; } #else /* ALSA_LIB < 5 */ @@ -550,12 +586,11 @@ static int output_data(char *buf, int32 nbytes) { int n; - #if ALSA_LIB >= 5 snd_pcm_channel_status_t status; n = snd_pcm_write (handle, buf, nbytes); - if (n < 0) + if (n <= 0) { memset (&status, 0, sizeof(status)); status.channel = SND_PCM_CHANNEL_PLAYBACK; @@ -565,17 +600,27 @@ "%s: could not get channel status", dpm.name); return -1; } +#if ALSA_LIB >= 6 + if (status.status == SND_PCM_STATUS_XRUN) +#else if (status.status == SND_PCM_STATUS_UNDERRUN) +#endif { +#if ALSA_LIB >= 6 + ctl->cmsg(CMSG_INFO, VERB_DEBUG, + "%s: underrun at %d", dpm.name, status.pos_io); + output_counter += status.pos_io; +#else ctl->cmsg(CMSG_INFO, VERB_DEBUG, "%s: underrun at %d", dpm.name, status.scount); output_counter += status.scount; +#endif snd_pcm_channel_flush (handle, SND_PCM_CHANNEL_PLAYBACK); snd_pcm_channel_prepare (handle, SND_PCM_CHANNEL_PLAYBACK); bytes_to_go = total_bytes; n = snd_pcm_write (handle, buf, nbytes); } - if (n < 0) + if (n <= 0) { ctl->cmsg(CMSG_WARNING, VERB_DEBUG, "%s: %s", dpm.name, @@ -648,7 +693,11 @@ #if ALSA_LIB >= 5 if (snd_pcm_channel_status(handle, &pstatus) < 0) return -1; +#if ALSA_LIB >= 6 + i = pstatus.bytes_free; +#else i = pstatus.free; +#endif #else /* ALSA_LIB < 5 */ if (snd_pcm_playback_status(handle, &pstatus) < 0) return -1; @@ -665,7 +714,11 @@ #if ALSA_LIB >= 5 if (snd_pcm_channel_status(handle, &pstatus) < 0) return -1; +#if ALSA_LIB >= 6 + i = pstatus.bytes_used; +#else i = pstatus.count; +#endif #else /* ALSA_LIB < 5 */ if (snd_pcm_playback_status(handle, &pstatus) < 0) return -1; @@ -682,7 +735,11 @@ #if ALSA_LIB >= 5 if (snd_pcm_channel_status(handle, &pstatus) < 0) return -1; +#if ALSA_LIB >= 6 + i = output_counter + pstatus.pos_io; +#else i = output_counter + pstatus.scount; +#endif #else if (snd_pcm_playback_status(handle, &pstatus) < 0) return -1; diff -ruN TiMidity++-2.9.3/timidity/instrum.c TiMidity++-2.9.4/timidity/instrum.c --- TiMidity++-2.9.3/timidity/instrum.c Wed Apr 26 14:27:20 2000 +++ TiMidity++-2.9.4/timidity/instrum.c Wed May 17 13:17:32 2000 @@ -723,10 +723,8 @@ /* If this instrument will always be played on the same note, and it's not looped, we can resample it now. */ -#ifdef DISALLOW_DRUM_BENDS if (sp->note_to_use && !(sp->modes & MODES_LOOPING)) pre_resample(sp); -#endif #ifdef LOOKUP_HACK /* Squash the 16-bit data into 8 bits. */ diff -ruN TiMidity++-2.9.3/timidity/resample.c TiMidity++-2.9.4/timidity/resample.c --- TiMidity++-2.9.3/timidity/resample.c Wed Apr 26 15:07:48 2000 +++ TiMidity++-2.9.4/timidity/resample.c Wed May 17 13:15:30 2000 @@ -207,7 +207,7 @@ { FINALINTERP; vp->timeout = 1; - *countptr-=count+1; + *countptr-=count; } #else /* PRECALC_LOOPS */ while (count--) @@ -218,7 +218,7 @@ { FINALINTERP; vp->timeout = 1; - *countptr-=count+1; + *countptr-=count; break; } } @@ -546,7 +546,7 @@ { FINALINTERP; vp->timeout = 1; - *countptr-=count+1; + *countptr-=count; break; } } @@ -834,7 +834,7 @@ resampler(v, &i, mode); resample_buffer_offset += i; - if(!loop && vp->status == VOICE_FREE) + if(!loop && (i == 0 || vp->status == VOICE_FREE)) break; cc -= i; } @@ -873,7 +873,7 @@ if(vp->sample->sample_rate == play_mode->rate && vp->sample->root_freq == freq_table[vp->sample->note_to_use] && - (vp->frequency == vp->orig_frequency || vp->porta_control_ratio)) + vp->frequency == vp->orig_frequency) { int32 ofs; diff -ruN TiMidity++-2.9.3/timidity/sndfont.c TiMidity++-2.9.4/timidity/sndfont.c --- TiMidity++-2.9.3/timidity/sndfont.c Wed Apr 26 14:27:20 2000 +++ TiMidity++-2.9.4/timidity/sndfont.c Wed May 17 13:17:44 2000 @@ -687,11 +687,9 @@ sample->sample_rate, play_mode->rate); -#ifdef DISALLOW_DRUM_BENDS /* resample it if possible */ if (sample->note_to_use && !(sample->modes & MODES_LOOPING)) pre_resample(sample); -#endif #ifdef LOOKUP_HACK /* squash the 16-bit data into 8 bits. */ diff -ruN TiMidity++-2.9.3/utils/Makefile.in TiMidity++-2.9.4/utils/Makefile.in --- TiMidity++-2.9.3/utils/Makefile.in Mon May 8 15:26:29 2000 +++ TiMidity++-2.9.4/utils/Makefile.in Wed May 24 23:30:34 2000 @@ -245,7 +245,7 @@ @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ - cp -pr $$/$$file $(distdir)/$$file; \ + cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \