Adding timidity++, midi converter for kmid2

This commit is contained in:
abveritas 2010-09-04 04:22:54 +00:00
parent 8c560427a7
commit 73b0203d5e
8 changed files with 1252 additions and 0 deletions

View File

@ -0,0 +1,30 @@
diff -ur TiMidity++-2.13.2-orig/interface/xaw_i.c TiMidity++-2.13.2/interface/xaw_i.c
--- TiMidity++-2.13.2-orig/interface/xaw_i.c 2005-06-25 21:55:19.000000000 -0400
+++ TiMidity++-2.13.2/interface/xaw_i.c 2005-06-25 21:56:01.000000000 -0400
@@ -261,7 +261,7 @@
String bitmapdir = XAW_BITMAP_DIR;
Boolean arrangetitle,savelist;
static char **current_flist = NULL;
-static int voices = 0, last_voice = 0, voices_num_width;
+static int xaw_i_voices = 0, last_voice = 0, voices_num_width;
static int maxentry_on_a_menu = 0,submenu_n = 0;
#define OPTIONS_WINDOW 1
#define FLIST_WINDOW 2
@@ -1329,7 +1329,7 @@
c= *(local_buf+1);
n= atoi(local_buf+2);
if(c == 'L')
- voices = n;
+ xaw_i_voices = n;
else
last_voice = n;
if(IsTracePlaying()) drawVoices();
@@ -2070,7 +2070,7 @@
XSetForeground(disp, gct, tracecolor);
XFillRectangle(disp,XtWindow(trace),gct,voices_num_width +4,
MAX_XAW_MIDI_CHANNELS*BAR_SPACE+TRACEV_OFS+1,VOICENUM_WIDTH,TRACE_FOOT);
- sprintf(local_buf, "%3d/%d", last_voice, voices);
+ sprintf(local_buf, "%3d/%d", last_voice, xaw_i_voices);
XSetForeground(disp, gct, capcolor);
XDrawString(disp, XtWindow(trace),gct,voices_num_width+6,
MAX_XAW_MIDI_CHANNELS*BAR_SPACE+TRACEV_OFS+16,local_buf,strlen(local_buf));

58
timidity++/PKGBUILD Normal file
View File

@ -0,0 +1,58 @@
#
# Chakra Packages for Chakra, part of chakra-project.org
#
# maintainer (i686): Phil Miller <philm[at]chakra-project[dog]org>
# maintainer (x86_64): Manuel Tortosa <manutortosa[at]chakra-project[dot]org>
# include global config
source ../_buildscripts/${current_repo}-${_arch}-cfg.conf
pkgname=timidity++
pkgver=2.13.2
pkgrel=10
pkgdesc="A MIDI to WAVE converter and player"
arch=('i686' 'x86_64')
url="http://timidity.sourceforge.net"
license=('GPL')
depends=('libao' 'libvorbis' 'jack' 'ncurses')
makedepends=('tk' 'libxaw')
optdepends=('gtk2: for using the GTK+ interface' 'tk: for using the Tk interface' \
'xaw3d: for using the Xaw interface')
backup=('etc/timidity++/timidity.cfg')
source=(http://downloads.sourceforge.net/timidity/TiMidity++-${pkgver}.tar.bz2 \
timidity.cfg timidity++.sh 2.13.2-gcc4.patch TiMidity++-2.13.2+flac-1.1.3.patch \
timidity++-2.13.2-exiterror.patch timidity++-2.13.2-gtk26.patch \
timidity++-2.13.2-polling.patch)
md5sums=('a82ceeb2245e22f4de2b41da21eaee32' '3fcc8f065c959205113fa7e9ab2be3c6'\
'35606c12af9c6be9361d64fc536f046f' '0868926c5290817cacb9a1849bc043c2'\
'fcbd27ff83066f69a3f8bd2442a3b3e2' '31bdaea612f18e2c3d45a8a73ab44c81'\
'16a4adec164836d4390dc6b0f9a69ce9' '3f0034ead451cdd1078868e9e9b0494c')
sha1sums=('8e603146e1164335303a5ac5dff291f369241b4e' '660b3afbb720d26e8f008034cee66dd8da082d6e'\
'9f3e732a7ca1e97119a76df62ecf154df04d4f77' '8d50618a2379c078b07e8d0fc59457855c16106c'\
'59b0dbe3cde8f7b41d83676d8c37809255d3fb36' '7cd697b4f7cb1ce45cec46c2e0f6e5e8bf1d9d60'\
'ce115e84d99708f0bdb5b57bd98b0c3514fa2bf4' '6abaedaecdecabf9dc76c062f7157571aed53984')
build() {
cd "${srcdir}/TiMidity++-${pkgver}"
patch -p1 < ../2.13.2-gcc4.patch
patch -p1 < ../TiMidity++-2.13.2+flac-1.1.3.patch
patch -p1 < ../timidity++-2.13.2-exiterror.patch
patch -p0 < ../timidity++-2.13.2-gtk26.patch
patch -p0 < ../timidity++-2.13.2-polling.patch
sed -i 's/tcl8.4/tcl8.5/' configure
sed -i 's/tk8.4/tk8.5/' configure
./configure --prefix=/usr --mandir=/usr/share/man --with-default-path=/etc/timidity++/ \
--enable-server --enable-alsaseq --enable-spectrogram \
--enable-audio=alsa,oss,ao,vorbis,flac,esd,jack \
--enable-dynamic=ncurses,tcltk,vt100,xaw, \
--disable-gtktest
make
}
package() {
cd "${srcdir}/TiMidity++-${pkgver}"
make DESTDIR="${pkgdir}" install
install -D -m644 ../timidity.cfg "${pkgdir}/etc/timidity++/timidity.cfg"
install -D -m755 ../timidity++.sh "${pkgdir}/etc/rc.d/timidity++"
}

View File

@ -0,0 +1,349 @@
diff -urN TiMidity++-2.13.2.orig/configure.in TiMidity++-2.13.2/configure.in
--- TiMidity++-2.13.2.orig/configure.in 2004-10-03 15:39:52 +0300
+++ TiMidity++-2.13.2/configure.in 2007-02-19 13:06:42 +0200
@@ -1216,11 +1216,39 @@
EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBFLAC_CFLAGS)
LIBS="$LIBS $LIBFLAC_LIBS"
])
- AM_PATH_LIBOGGFLAC([
- EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC"
- EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS)
- LIBS="$LIBS $LIBOGGFLAC_LIBS"
- ])
+ # in FLAC-1.1.3, libOggFLAC was merged into libFLAC
+ # FLAC_API_VERSION_CURRENT first appears in FLAC-1.1.3
+ AC_MSG_CHECKING(for legacy libFLAC (<1.1.13))
+ ac_save_LIBS="$LIBS"
+ LIBS=
+ AC_TRY_RUN([
+ #include <FLAC/export.h>
+ int main () { return FLAC_API_VERSION_CURRENT<8; }
+ ],legacy_flac=no,legacy_flac=yes,legacy_flac=no)
+ AC_MSG_RESULT($legacy_flac)
+ LIBS="$ac_save_LIBS"
+ if test "x$legacy_flac" = xyes; then
+ AM_PATH_LIBOGGFLAC([
+ EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC"
+ EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS)
+ LIBS="$LIBS $LIBOGGFLAC_LIBS"
+ ])
+ else
+
+ AC_MSG_CHECKING(for Ogg support in libFLAC )
+ ac_save_LIBS="$LIBS"
+ LIBS="-lFLAC -lm -logg"
+ AC_TRY_RUN([
+ #include <FLAC/export.h>
+ int main () { return !FLAC_API_SUPPORTS_OGG_FLAC; }
+ ],ogg_flac=yes,ogg_flac=yes,ogg_flac=no)
+ AC_MSG_RESULT($ogg_flac)
+ LIBS="$ac_save_LIBS"
+ if test "x$ogg_flac" = xyes; then
+ LIBS="$LIBS -logg"
+ CFLAGS="$CFLAGS -DAU_OGGFLAC"
+ fi
+ fi
else
AC_MSG_RESULT(no)
fi
diff -urN TiMidity++-2.13.2.orig/timidity/flac_a.c TiMidity++-2.13.2/timidity/flac_a.c
--- TiMidity++-2.13.2.orig/timidity/flac_a.c 2004-05-23 07:35:44 +0300
+++ TiMidity++-2.13.2/timidity/flac_a.c 2007-02-19 13:06:55 +0200
@@ -38,14 +38,22 @@
#if defined(AU_FLAC_DLL) || defined(AU_OGGFLAC_DLL)
#include <windows.h>
-#define FLAC__EXPORT_H /* don't include "OggFLAC/export.h" */
-#define FLAC_API
-#define OggFLAC__EXPORT_H /* don't include "FLAC/export.h" */
-#define OggFLAC_API
+#include <FLAC/export.h> /* need export.h to figure out API version from FLAC_API_VERSION_CURRENT */
+#undef FLAC_API
+#undef OggFLAC_API
#endif
#include <FLAC/all.h>
-#ifdef AU_OGGFLAC
+
+/* by LEGACY_FLAC we mean before FLAC 1.1.3 */
+/* in FLAC 1.1.3, libOggFLAC is merged into libFLAC and all encoding layers are merged into the stream encoder */
+#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
+#define LEGACY_FLAC
+#else
+#undef LEGACY_FLAC
+#endif
+
+#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
#include <OggFLAC/stream_encoder.h>
#endif
@@ -100,17 +108,21 @@
unsigned long out_bytes;
union {
FLAC__StreamEncoderState flac;
+#ifdef LEGACY_FLAC
FLAC__SeekableStreamEncoderState s_flac;
#ifdef AU_OGGFLAC
OggFLAC__StreamEncoderState ogg;
#endif
+#endif
} state;
union {
union {
FLAC__StreamEncoder *stream;
+#ifdef LEGACY_FLAC
FLAC__SeekableStreamEncoder *s_stream;
+#endif
} flac;
-#ifdef AU_OGGFLAC
+#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
union {
OggFLAC__StreamEncoder *stream;
} ogg;
@@ -158,7 +170,7 @@
static long serial_number = 0;
FLAC_ctx *flac_ctx = NULL;
-#ifdef AU_OGGFLAC
+#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
static FLAC__StreamEncoderWriteStatus
ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
@@ -168,8 +180,13 @@
static FLAC__StreamEncoderWriteStatus
flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
+#ifdef LEGACY_FLAC
unsigned bytes, unsigned samples,
+#else
+ size_t bytes, unsigned samples,
+#endif
unsigned current_frame, void *client_data);
+#ifdef LEGACY_FLAC
static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder,
const FLAC__StreamMetadata *metadata,
void *client_data);
@@ -181,6 +198,7 @@
static void flac_seekable_stream_encoder_metadata_callback(const FLAC__SeekableStreamEncoder *encoder,
const FLAC__StreamMetadata *metadata,
void *client_data);
+#endif
/* preset */
void flac_set_compression_level(int compression_level)
@@ -281,7 +299,11 @@
#ifdef AU_OGGFLAC
void flac_set_option_oggflac(int isogg)
{
+#ifdef LEGACY_FLAC
flac_options.isogg = isogg;
+#else
+ flac_options.isogg = (FLAC_API_SUPPORTS_OGG_FLAC && isogg);
+#endif
}
#endif
@@ -295,6 +317,7 @@
dpm.fd = -1;
if (ctx != NULL) {
+#ifdef LEGACY_FLAC
#ifdef AU_OGGFLAC
if (flac_options.isogg) {
if (ctx->encoder.ogg.stream) {
@@ -317,6 +340,12 @@
FLAC__stream_encoder_delete(ctx->encoder.flac.stream);
}
}
+#else
+ if (ctx->encoder.flac.stream) {
+ FLAC__stream_encoder_finish(ctx->encoder.flac.stream);
+ FLAC__stream_encoder_delete(ctx->encoder.flac.stream);
+ }
+#endif
free(ctx);
flac_ctx = NULL;
}
@@ -329,6 +358,9 @@
FLAC__StreamMetadata padding;
FLAC__StreamMetadata *metadata[4];
int num_metadata = 0;
+#ifndef LEGACY_FLAC
+ FLAC__StreamEncoderInitStatus init_status;
+#endif
FLAC_ctx *ctx;
@@ -371,6 +403,7 @@
metadata[num_metadata++] = &padding;
}
+#ifdef LEGACY_FLAC
#ifdef AU_OGGFLAC
if (flac_options.isogg) {
if ((ctx->encoder.ogg.stream = OggFLAC__stream_encoder_new()) == NULL) {
@@ -542,6 +575,67 @@
return -1;
}
}
+#else /* !LEGACY_FLAC */
+ if ((ctx->encoder.flac.stream = FLAC__stream_encoder_new()) == NULL) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC stream");
+ flac_session_close();
+ return -1;
+ }
+
+#ifdef AU_OGGFLAC
+ if (flac_options.isogg) {
+ /* set sequential number for serial */
+ serial_number++;
+ if (serial_number == 1) {
+ srand(time(NULL));
+ serial_number = rand();
+ }
+ FLAC__stream_encoder_set_ogg_serial_number(ctx->encoder.flac.stream, serial_number);
+ }
+#endif /* AU_OGGFLAC */
+ FLAC__stream_encoder_set_channels(ctx->encoder.flac.stream, nch);
+ /* 16bps only */
+ FLAC__stream_encoder_set_bits_per_sample(ctx->encoder.flac.stream, 16);
+
+ FLAC__stream_encoder_set_verify(ctx->encoder.flac.stream, flac_options.verify);
+
+ if (!FLAC__format_sample_rate_is_valid(dpm.rate)) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "invalid sampling rate %d", dpm.rate);
+ flac_session_close();
+ return -1;
+ }
+ FLAC__stream_encoder_set_sample_rate(ctx->encoder.flac.stream, dpm.rate);
+
+ FLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision);
+ /* expensive! */
+ FLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision_search);
+
+ if (nch == 2) {
+ FLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.flac.stream, flac_options.mid_side);
+ FLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.flac.stream, flac_options.adaptive_mid_side);
+ }
+
+ FLAC__stream_encoder_set_max_lpc_order(ctx->encoder.flac.stream, flac_options.max_lpc_order);
+ FLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.flac.stream, flac_options.min_residual_partition_order);
+ FLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.flac.stream, flac_options.max_residual_partition_order);
+
+ FLAC__stream_encoder_set_blocksize(ctx->encoder.flac.stream, flac_options.blocksize);
+
+ if (0 < num_metadata)
+ FLAC__stream_encoder_set_metadata(ctx->encoder.flac.stream, metadata, num_metadata);
+
+#ifdef AU_OGGFLAC
+ if (flac_options.isogg)
+ init_status = FLAC__stream_encoder_init_ogg_stream(ctx->encoder.flac.stream, NULL, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx);
+ else
+#endif
+ init_status = FLAC__stream_encoder_init_stream(ctx->encoder.flac.stream, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx);
+ if (init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC encoder (init status: %s)", FLAC__StreamEncoderInitStatusString[init_status]);
+ flac_session_close();
+ return -1;
+ }
+#endif
return 0;
}
@@ -638,7 +732,7 @@
return 0;
}
-#ifdef AU_OGGFLAC
+#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
static FLAC__StreamEncoderWriteStatus
ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
@@ -658,7 +752,11 @@
static FLAC__StreamEncoderWriteStatus
flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
+#ifdef LEGACY_FLAC
unsigned bytes, unsigned samples,
+#else
+ size_t bytes, unsigned samples,
+#endif
unsigned current_frame, void *client_data)
{
FLAC_ctx *ctx = (FLAC_ctx *)client_data;
@@ -670,6 +768,7 @@
else
return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
}
+#ifdef LEGACY_FLAC
static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder,
const FLAC__StreamMetadata *metadata,
void *client_data)
@@ -695,6 +794,7 @@
void *client_data)
{
}
+#endif
static int output_data(char *buf, int32 nbytes)
{
@@ -723,6 +823,7 @@
oggbuf[i] = *s++;
}
+#ifdef LEGACY_FLAC
#ifdef AU_OGGFLAC
if (flac_options.isogg) {
ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream);
@@ -793,6 +894,29 @@
return -1;
}
}
+#else /* !LEGACY_FLAC */
+ ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream);
+ if (ctx->state.flac != FLAC__STREAM_ENCODER_OK) {
+ if (ctx->state.flac == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR |
+ FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream verify error (%s)",
+ FLAC__StreamDecoderStateString[FLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.flac.stream)]);
+ }
+ else {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream (%s)",
+ FLAC__StreamEncoderStateString[ctx->state.flac]);
+ }
+ flac_session_close();
+ return -1;
+ }
+
+ if (!FLAC__stream_encoder_process_interleaved(ctx->encoder.flac.stream, oggbuf,
+ nbytes / nch / 2 )) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream");
+ flac_session_close();
+ return -1;
+ }
+#endif
ctx->in_bytes += nbytes;
free(oggbuf);
@@ -813,6 +937,7 @@
return;
}
+#ifdef LEGACY_FLAC
if (flac_options.isogg) {
#ifdef AU_OGGFLAC
if ((ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream)) != OggFLAC__STREAM_ENCODER_OK) {
@@ -838,6 +963,13 @@
/* fall through */
}
}
+#else /* !LEGACY_FLAC */
+ if ((ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream)) != FLAC__STREAM_ENCODER_OK) {
+ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream encoder is invalid (%s)",
+ FLAC__StreamEncoderStateString[ctx->state.flac]);
+ /* fall through */
+ }
+#endif
ctl->cmsg(CMSG_INFO, VERB_NORMAL, "Wrote %lu/%lu bytes(%g%% compressed)",
ctx->out_bytes, ctx->in_bytes, ((double)ctx->out_bytes / (double)ctx->in_bytes) * 100.);

View File

@ -0,0 +1,695 @@
diff -ur TiMidity++-2.13.2/interface/alsaseq_c.c TiMidity++-2.13.2-new/interface/alsaseq_c.c
--- TiMidity++-2.13.2/interface/alsaseq_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/alsaseq_c.c 2005-01-02 03:39:15.968158520 +0100
@@ -177,7 +177,7 @@
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
-static void ctl_pass_playing_list(int n, char *args[]);
+static int ctl_pass_playing_list(int n, char *args[]);
/**********************************/
/* export the interface functions */
@@ -308,7 +308,7 @@
return 0;
}
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
{
double btime;
int i, j;
@@ -323,7 +323,7 @@
if (alsa_seq_open(&alsactx.handle) < 0) {
fprintf(stderr, "error in snd_seq_open\n");
- return;
+ return 1;
}
alsactx.queue = -1;
alsactx.client = snd_seq_client_id(alsactx.handle);
@@ -342,7 +342,7 @@
int port;
port = alsa_create_port(alsactx.handle, i);
if (port < 0)
- return;
+ return 1;
alsactx.port[i] = port;
alsa_set_timestamping(&alsactx, port);
printf(" %d:%d", alsactx.client, alsactx.port[i]);
@@ -411,6 +411,7 @@
server_reset();
doit(&alsactx);
}
+ return 0;
}
/*
diff -ur TiMidity++-2.13.2/interface/emacs_c.c TiMidity++-2.13.2-new/interface/emacs_c.c
--- TiMidity++-2.13.2/interface/emacs_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/emacs_c.c 2005-01-02 03:02:02.000000000 +0100
@@ -78,7 +78,7 @@
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_event(CtlEvent *e);
static int read_ready(void);
static int emacs_type = 0; /* 0:emacs, 1:mule, 2:??
@@ -249,7 +249,7 @@
return s;
}
-static void ctl_pass_playing_list(int argc, char *argv[])
+static int ctl_pass_playing_list(int argc, char *argv[])
{
int i;
char cmd[BUFSIZ];
@@ -274,7 +274,7 @@
{
for(i = 1; i < argc; i++)
play_midi_file(argv[i]);
- return;
+ return 0;
}
/* Main Loop */
@@ -296,11 +296,11 @@
ctl_refresh();
break;
case RC_QUIT:
- return;
+ return 0;
} /* skipping others command */
}
else if(!strncmp(cmd, "QUIT", 4))
- return;
+ return 0;
else
continue; /* skipping unknown command */
}
diff -ur TiMidity++-2.13.2/interface/gtk_c.c TiMidity++-2.13.2-new/interface/gtk_c.c
--- TiMidity++-2.13.2/interface/gtk_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/gtk_c.c 2005-01-02 03:35:53.447946272 +0100
@@ -57,7 +57,7 @@
static int ctl_open(int using_stdin, int using_stdout);
static void ctl_close(void);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
@@ -528,7 +528,7 @@
#endif
}
-static void
+static int
ctl_pass_playing_list(int number_of_files, char *list_of_files[])
{
int i=0;
@@ -558,7 +558,7 @@
}
else {
if (command==RC_QUIT)
- return;
+ return 0;
if (command==RC_ERROR)
command=RC_TUNE_END; /* Launch next file */
@@ -580,6 +580,7 @@
command = ctl_blocking_read(&val);
}
}
+ return 0;
}
/*
diff -ur TiMidity++-2.13.2/interface/mac_c.c TiMidity++-2.13.2-new/interface/mac_c.c
--- TiMidity++-2.13.2/interface/mac_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/mac_c.c 2005-01-02 03:04:13.000000000 +0100
@@ -71,7 +71,7 @@
static void ctl_pitch_bend(int channel, int val);
static void ctl_reset(void);
static int ctl_open(int using_stdin, int using_stdout);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
@@ -955,7 +955,7 @@
}
-static void ctl_pass_playing_list(int init_number_of_files,
+static int ctl_pass_playing_list(int init_number_of_files,
char * /*init_list_of_files*/ [])
{
EventRecord event;
@@ -983,6 +983,7 @@
mac_HandleEvent(&event);
}
Do_Quit();
+ return 0;
}
static Boolean UserWantsControl()
diff -ur TiMidity++-2.13.2/interface/motif_c.c TiMidity++-2.13.2-new/interface/motif_c.c
--- TiMidity++-2.13.2/interface/motif_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/motif_c.c 2005-01-02 03:05:04.000000000 +0100
@@ -60,7 +60,7 @@
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_event(CtlEvent *e);
static int motif_ready = 0;
@@ -346,12 +346,13 @@
return(ctl_blocking_read(valp));
}
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
{
int i=0;
char file_to_play[1000];
int command;
int32 val;
+ int retval;
motif_ready = 1;
@@ -381,12 +382,13 @@
else
{
if (command==RC_QUIT)
- return;
+ return 0;
switch(command)
{
case RC_ERROR:
m_pipe_int_write(ERROR_MESSAGE);
+ retval=1;
break;
case RC_NONE:
break;
@@ -411,6 +413,7 @@
command = ctl_blocking_read(&val);
}
}
+ return retval;
}
/*
diff -ur TiMidity++-2.13.2/interface/ncurs_c.c TiMidity++-2.13.2-new/interface/ncurs_c.c
--- TiMidity++-2.13.2/interface/ncurs_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/ncurs_c.c 2005-01-02 03:05:48.000000000 +0100
@@ -174,7 +174,7 @@
static int ctl_open(int using_stdin, int using_stdout);
static void ctl_close(void);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
@@ -3100,7 +3100,7 @@
reuse_mblock(&tmpbuffer);
}
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
{
int i;
int act_number_of_files;
@@ -3128,7 +3128,7 @@
if (file_list.number<0) {
cmsg(CMSG_FATAL, VERB_NORMAL, "No MIDI file to play!");
- return;
+ return 1;
}
ctl_listmode_max=1;
@@ -3169,7 +3169,7 @@
if(!(ctl.flags & CTLF_LIST_LOOP) || stdin_check)
{
aq_flush(0);
- return;
+ return 0;
}
i = 0;
if(rc == RC_TUNE_END)
@@ -3187,7 +3187,7 @@
/* else fall through */
case RC_QUIT:
- return;
+ return 0;
}
ctl_reset();
}
diff -ur TiMidity++-2.13.2/interface/portmidisyn_c.c TiMidity++-2.13.2-new/interface/portmidisyn_c.c
--- TiMidity++-2.13.2/interface/portmidisyn_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/portmidisyn_c.c 2005-01-02 03:13:05.000000000 +0100
@@ -96,7 +96,7 @@
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
-static void ctl_pass_playing_list(int n, char *args[]);
+static int ctl_pass_playing_list(int n, char *args[]);
#ifndef __W32__
static void init_keybord(void);
@@ -215,17 +215,17 @@
#ifdef IA_W32G_SYN
extern void w32g_syn_doit(void);
-extern void w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
+extern int w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
{
- w32g_syn_ctl_pass_playing_list ( n, args );
+ return w32g_syn_ctl_pass_playing_list ( n, args );
}
#endif
#ifndef IA_W32G_SYN
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
#else
// 0: OK, 2: Require to reset.
int ctl_pass_playing_list2(int n, char *args[])
@@ -241,7 +241,7 @@
#ifndef IA_W32G_SYN
if(n > MAX_PORT ){
printf( "Usage: timidity -iW [Midi interface No s]\n");
- return;
+ return 1;
}
#endif
@@ -347,11 +347,7 @@
#endif /* USE_GTK_GUI */
rtsyn_close();
-#ifdef IA_W32G_SYN
return 0;
-#else
- return;
-#endif
}
diff -ur TiMidity++-2.13.2/interface/server_c.c TiMidity++-2.13.2-new/interface/server_c.c
--- TiMidity++-2.13.2/interface/server_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/server_c.c 2005-01-02 03:07:38.000000000 +0100
@@ -176,7 +176,7 @@
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
-static void ctl_pass_playing_list(int n, char *args[]);
+static int ctl_pass_playing_list(int n, char *args[]);
/**********************************/
/* export the interface functions */
@@ -356,14 +356,14 @@
static void compute_sample_increment(void);
static void server_reset(void);
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
{
int sock;
if(n != 2 && n != 1)
{
fprintf(stderr, "Usage: timidity -ir control-port [data-port]\n");
- return;
+ return 1;
}
#ifdef SIGPIPE
@@ -379,7 +379,7 @@
if (control_port) {
sock = pasv_open(&control_port);
if(sock == -1)
- return;
+ return 1;
}
opt_realtime_playing = 1; /* Enable loading patch while playing */
allocate_cache_size = 0; /* Don't use pre-calclated samples */
@@ -404,7 +404,7 @@
continue;
perror("accept");
close(sock);
- return;
+ return 1;
}
}
else control_fd = 0;
@@ -446,6 +446,7 @@
if (!control_port)
break;
}
+ return 0;
}
#define MAX_GETCMD_PARAMS 8
diff -ur TiMidity++-2.13.2/interface/tk_c.c TiMidity++-2.13.2-new/interface/tk_c.c
--- TiMidity++-2.13.2/interface/tk_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/tk_c.c 2005-01-02 03:08:48.000000000 +0100
@@ -86,7 +86,7 @@
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static int ctl_blocking_read(int32 *valp);
static void ctl_note(int status, int ch, int note, int vel);
static void ctl_event(CtlEvent *e);
@@ -587,7 +587,7 @@
return(ctl_blocking_read(valp));
}
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
{
int i=0;
char local[1000];
@@ -618,7 +618,7 @@
/* if really QUIT */
k_pipe_gets(local, sizeof(local)-1);
if (*local == 'Z')
- return;
+ return 0;
/* only stop playing..*/
}
if (command==RC_CHANGE_VOLUME) /* init volume */
@@ -646,6 +646,7 @@
command = ctl_blocking_read(&val);
}
}
+ return 0;
}
diff -ur TiMidity++-2.13.2/interface/w32g_c.c TiMidity++-2.13.2-new/interface/w32g_c.c
--- TiMidity++-2.13.2/interface/w32g_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/w32g_c.c 2005-01-02 03:10:03.000000000 +0100
@@ -86,7 +86,7 @@
static int ctl_open(int using_stdin, int using_stdout);
static void ctl_close(void);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_event(CtlEvent *e);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
@@ -662,7 +662,7 @@
}
extern BOOL SetWrdWndActive(void);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
{
static int init_flag = 1;
int rc;
@@ -779,7 +779,7 @@
if(ctl.flags & CTLF_AUTOEXIT) {
if(play_mode->fd != -1)
aq_flush(0);
- return;
+ return 0;
}
break;
}
@@ -803,7 +803,7 @@
if(ctl.flags & CTLF_AUTOEXIT){
if(play_mode->fd != -1)
aq_flush(0);
- return;
+ return 0;
}
if((ctl.flags & CTLF_LIST_LOOP) && w32g_nvalid_playlist())
{
@@ -839,7 +839,7 @@
case RC_QUIT:
if(play_mode->fd != -1)
aq_flush(1);
- return;
+ return 0;
case RC_CHANGE_VOLUME:
amplification += value;
@@ -868,6 +868,7 @@
PrefSettingApplyReally();
rc = RC_NONE;
}
+ return 0;
}
static void ctl_lcd_mark(int flag, int x, int y)
diff -ur TiMidity++-2.13.2/interface/w32g_syn.c TiMidity++-2.13.2-new/interface/w32g_syn.c
--- TiMidity++-2.13.2/interface/w32g_syn.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/w32g_syn.c 2005-01-02 03:10:49.000000000 +0100
@@ -281,7 +281,7 @@
static int wait_for_termination_of_syn_thread ( void );
int w32g_message_set ( int cmd );
int w32g_message_get ( w32g_syn_message_t *msg );
-void w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] );
+int w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] );
int w32g_syn_do_before_pref_apply ( void );
int w32g_syn_do_after_pref_apply ( void );
@@ -1403,7 +1403,7 @@
}
}
-void w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] )
+int w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] )
{
int i;
#ifndef TWSYNSRV
@@ -1471,6 +1471,7 @@
}
#endif
if ( w32g_syn.quit_state < 2 ) w32g_syn.quit_state = 2;
+ return 0;
}
int w32g_syn_do_before_pref_apply ( void )
diff -ur TiMidity++-2.13.2/interface/winsyn_c.c TiMidity++-2.13.2-new/interface/winsyn_c.c
--- TiMidity++-2.13.2/interface/winsyn_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/winsyn_c.c 2005-01-02 03:11:36.000000000 +0100
@@ -88,7 +88,7 @@
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
static void ctl_event(CtlEvent *e);
-static void ctl_pass_playing_list(int n, char *args[]);
+static int ctl_pass_playing_list(int n, char *args[]);
#ifndef __W32__
static void init_keybord(void);
@@ -207,17 +207,17 @@
#ifdef IA_W32G_SYN
extern void w32g_syn_doit(void);
-extern void w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
+extern int w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
{
- w32g_syn_ctl_pass_playing_list ( n, args );
+ return w32g_syn_ctl_pass_playing_list ( n, args );
}
#endif
#ifndef IA_W32G_SYN
-static void ctl_pass_playing_list(int n, char *args[])
+static int ctl_pass_playing_list(int n, char *args[])
#else
// 0: OK, 2: Require to reset.
int ctl_pass_playing_list2(int n, char *args[])
@@ -233,7 +233,7 @@
#ifndef IA_W32G_SYN
if(n > MAX_PORT ){
printf( "Usage: timidity -iW [Midi interface No s]\n");
- return;
+ return 1;
}
#endif
@@ -339,11 +339,7 @@
#endif /* USE_GTK_GUI */
rtsyn_close();
-#ifdef IA_W32G_SYN
return 0;
-#else
- return;
-#endif
}
diff -ur TiMidity++-2.13.2/interface/xaw_c.c TiMidity++-2.13.2-new/interface/xaw_c.c
--- TiMidity++-2.13.2/interface/xaw_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/xaw_c.c 2005-01-02 03:11:57.000000000 +0100
@@ -55,7 +55,7 @@
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_event(CtlEvent *e);
static void a_pipe_open(void);
@@ -463,7 +463,7 @@
}
}
-static void ctl_pass_playing_list(int init_number_of_files,
+static int ctl_pass_playing_list(int init_number_of_files,
char *init_list_of_files[]) {
int current_no,command=RC_NONE,i,j;
int32 val;
diff -ur TiMidity++-2.13.2/interface/xskin_c.c TiMidity++-2.13.2-new/interface/xskin_c.c
--- TiMidity++-2.13.2/interface/xskin_c.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/interface/xskin_c.c 2005-01-02 03:12:31.000000000 +0100
@@ -55,7 +55,7 @@
static void ctl_close(void);
static int ctl_read(int32 *valp);
static int cmsg(int type, int verbosity_level, char *fmt, ...);
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
static void ctl_event(CtlEvent *e);
static void ctl_speana_data(double *val, int size);
static void initialize_exp_hz_table( void );
@@ -342,7 +342,7 @@
}
}
-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]) {
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]) {
int current_no,command,i;
int32 val;
@@ -403,7 +403,7 @@
command=play_midi_file(list_of_files[file_table[current_no]]);
} else {
/* Quit timidity*/
- if (exitflag) return;
+ if (exitflag) return 0;
/* Stop playing */
if (command==RC_QUIT) {
sprintf(local_buf,"T 00:00");
@@ -461,6 +461,7 @@
command=ctl_blocking_read(&val);
}
}
+ return 0;
}
/* ------ Pipe handlers ----- */
diff -ur TiMidity++-2.13.2/timidity/controls.h TiMidity++-2.13.2-new/timidity/controls.h
--- TiMidity++-2.13.2/timidity/controls.h 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/timidity/controls.h 2005-01-02 02:59:37.000000000 +0100
@@ -147,7 +147,7 @@
int (*open)(int using_stdin, int using_stdout);
void (*close)(void);
- void (*pass_playing_list)(int number_of_files, char *list_of_files[]);
+ int (*pass_playing_list)(int number_of_files, char *list_of_files[]);
int (*read)(int32 *valp);
int (*cmsg)(int type, int verbosity_level, char *fmt, ...);
void (*event)(CtlEvent *ev); /* Control events */
diff -ur TiMidity++-2.13.2/timidity/playmidi.c TiMidity++-2.13.2-new/timidity/playmidi.c
--- TiMidity++-2.13.2/timidity/playmidi.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/timidity/playmidi.c 2005-01-02 03:15:55.000000000 +0100
@@ -8562,7 +8562,7 @@
return rc;
}
-void dumb_pass_playing_list(int number_of_files, char *list_of_files[])
+int dumb_pass_playing_list(int number_of_files, char *list_of_files[])
{
#ifndef CFG_FOR_SF
int i = 0;
@@ -8586,12 +8586,12 @@
aq_flush(0);
if(!(ctl->flags & CTLF_LIST_LOOP))
- return;
+ return 0;
i = 0;
break;
case RC_QUIT:
- return;
+ return 0;
}
}
#endif
diff -ur TiMidity++-2.13.2/timidity/playmidi.h TiMidity++-2.13.2-new/timidity/playmidi.h
--- TiMidity++-2.13.2/timidity/playmidi.h 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/timidity/playmidi.h 2005-01-02 03:16:07.000000000 +0100
@@ -577,7 +577,7 @@
extern int opt_pan_delay;
extern int play_midi_file(char *fn);
-extern void dumb_pass_playing_list(int number_of_files, char *list_of_files[]);
+extern int dumb_pass_playing_list(int number_of_files, char *list_of_files[]);
extern void default_ctl_lyric(int lyricid);
extern int check_apply_control(void);
extern void recompute_freq(int v);
diff -ur TiMidity++-2.13.2/timidity/sndfont.c TiMidity++-2.13.2-new/timidity/sndfont.c
--- TiMidity++-2.13.2/timidity/sndfont.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/timidity/sndfont.c 2005-01-02 03:15:27.000000000 +0100
@@ -1893,7 +1893,7 @@
#if CFG_FOR_SF_SUPPORT_FFT
int check_apply_control(void) { return 0; } // not pass
-void dumb_pass_playing_list(int number_of_files, char *list_of_files[]) {}
+int dumb_pass_playing_list(int number_of_files, char *list_of_files[]) {return 0;}
void recompute_freq(int v) {} // not pass
int32 control_ratio = 0;
int reduce_quality_flag = 0;
diff -ur TiMidity++-2.13.2/timidity/timidity.c TiMidity++-2.13.2-new/timidity/timidity.c
--- TiMidity++-2.13.2/timidity/timidity.c 2005-01-02 02:53:01.000000000 +0100
+++ TiMidity++-2.13.2-new/timidity/timidity.c 2005-01-02 02:59:29.000000000 +0100
@@ -5291,6 +5291,7 @@
int need_stdin = 0, need_stdout = 0;
int i;
int output_fail = 0;
+ int retval;
if(nfiles == 0 && !strchr(INTERACTIVE_INTERFACE_IDS, ctl->id_character))
return 0;
@@ -5410,7 +5411,7 @@
ctl->cmsg(CMSG_INFO, VERB_DEBUG_SILLY,
"pass_playing_list() nfiles=%d", nfiles);
- ctl->pass_playing_list(nfiles, files);
+ retval=ctl->pass_playing_list(nfiles, files);
if(intr)
aq_flush(1);
@@ -5451,7 +5452,7 @@
url_news_connection_cache(URL_NEWS_CLOSE_CACHE);
#endif /* SUPPORT_SOCKET */
- return 0;
+ return retval;
}
#ifdef IA_W32GUI

View File

@ -0,0 +1,19 @@
--- interface/gtk_i.c 2004/12/21 16:59:33 1.1
+++ interface/gtk_i.c 2004/12/21 16:59:41
@@ -365,6 +365,7 @@ void
Launch_Gtk_Process(int pipe_number)
{
int argc = 0;
+ gchar **argv = NULL;
GtkWidget *button, *mbar, *swin;
GtkWidget *table, *align, *handlebox;
GtkWidget *vbox, *hbox, *vbox2, *scrolled_win;
@@ -373,7 +374,7 @@ Launch_Gtk_Process(int pipe_number)
/* enable locale */
gtk_set_locale ();
- gtk_init (&argc, NULL);
+ gtk_init (&argc, &argv);
ttip = create_yellow_tooltips();
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

View File

@ -0,0 +1,34 @@
--- interface/alsaseq_c.c 2006/12/13 23:22:53 1.28
+++ interface/alsaseq_c.c 2008/04/16 00:14:45 1.29
@@ -501,6 +501,8 @@
static void doit(struct seq_context *ctxp)
{
+ fd_set rfds;
+ struct timeval timeout;
for (;;) {
while (snd_seq_event_input_pending(ctxp->handle, 1)) {
if (do_sequencer(ctxp))
@@ -528,15 +530,17 @@
play_event(&ev);
aq_fill_nonblocking();
}
- if (! ctxp->active || ! IS_STREAM_TRACE) {
- fd_set rfds;
- struct timeval timeout;
- FD_ZERO(&rfds);
- FD_SET(ctxp->fd, &rfds);
+
+ FD_ZERO(&rfds);
+ FD_SET(ctxp->fd, &rfds);
+ if (ctxp->active) {
timeout.tv_sec = 0;
timeout.tv_usec = 10000; /* 10ms */
if (select(ctxp->fd + 1, &rfds, NULL, NULL, &timeout) < 0)
goto __done;
+ } else {
+ if (select(ctxp->fd + 1, &rfds, NULL, NULL, NULL) < 0)
+ goto __done;
}
}

38
timidity++/timidity++.sh Normal file
View File

@ -0,0 +1,38 @@
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
PID=`pidof -o %PPID /usr/bin/timidity`
case "$1" in
start)
stat_busy "Starting Timidity++ ALSA Daemon"
[ -z "$PID" ] && /usr/bin/timidity -iAD > /dev/null
if [ $? -gt 0 ]; then
stat_fail
else
echo $PID > /var/run/timidity.pid
add_daemon timidity++
stat_done
fi
;;
stop)
stat_busy "Stopping Timidity++ ALSA Daemon"
[ ! -z "$PID" ] && kill $PID &> /dev/null
if [ $? -gt 0 ]; then
stat_fail
else
rm /var/run/timidity.pid
rm_daemon timidity++
stat_done
fi
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "usage: $0 {start|stop|restart}"
esac
exit 0

29
timidity++/timidity.cfg Normal file
View File

@ -0,0 +1,29 @@
# details on this file and other examples see here:
# http://www.onicos.com/staff/iz/timidity/dist/cfg/sndfont.cfg
# http://www.onicos.com/staff/iz/timidity/dist/cfg/
#----------------------------------------------------------------
# SoundFont extension configuration
#
# soundfont <filename> [order={0|1}] [remove]
# <filename> is the path of SoundFont file.
# order: 0(preload) or 1(load after GUS).
# remove: disable specified soundfont.
#
# font exclude <tonebank> [<preset> [<keynote>]]
# font order {0|1} <tonebank> [<preset> [<keynote>]]
# <tonebank>: 0-127
#
# font exclude 128 [<drumset> [<key>]]
# font order {0|1} 128 [<drumset> [<key>]]
#----------------------------------------------------------------
# change the next line to point to a soundfont you have
# soundfonts can be found e.g. here: http://www.hammersound.net/
# soundfont /usr/share/soundfonts/DX7Piano.SF2
# you can do manipulations of the soundfont you load like this:
# e.g. removing drumset 99
# font exclude 128 99
# load drum samples after GUS patches
# font order 1 128