Dear All, I can confirm that this has been discovered upstream and patched in the master at the alsa project. Version 1.0.24 of alsa-utils changed the default behaviour of aplay.
This has broken ( at least on some installations including mine) - the festival package. Jean-Phillipe Mengual and I have moved to maintaining festival in the last week after a request from the previous maintainers (Kumar and Kartik). The festival package by default drives aplay for its sound output. I have successfully tested the upstream patch which went into the master and it repairs aplay and thus the default festival sound output method. The festival reference for this is bug #638691. I attach the patch which was added at the upstream alsa project by Takashi Iwai. His discussion can be found at http://permalink.gmane.org/gmane.linux.alsa.devel/85332 Is there any chance that we can ensure that wheezy does not freeze (when that time comes) without either this patch being applied or a more recent version of alsa-utils shipping (if it has been shipped)? If not should we at festival be changing the default sound output of festival (to something like native alsa or pulse) to circumvent the need for aplay? with the very best of regards, Peter
diff --git a/aplay/aplay.1 b/aplay/aplay.1 index b6caf0b..8cd1d56 100644 --- a/aplay/aplay.1 +++ b/aplay/aplay.1 @@ -137,6 +137,10 @@ by typing aplay. Record. This is the default if the program is invoked by typing arecord. .TP +\fI\-i, \-\-interactive\fP +Allow interactive operation via stdin. +Currently only pause/resume via space key is implemented. +.TP \fI\-\-disable\-resample\fP Disable automatic rate resample. .TP diff --git a/aplay/aplay.c b/aplay/aplay.c index c09f23c..04959b8 100644 --- a/aplay/aplay.c +++ b/aplay/aplay.c @@ -103,6 +103,7 @@ static int avail_min = -1; static int start_delay = 0; static int stop_delay = 0; static int monotonic = 0; +static int interactive = 0; static int can_pause = 0; static int verbose = 0; static int vumeter = VUMETER_NONE; @@ -200,6 +201,7 @@ _("Usage: %s [OPTION]... [FILE]...\n" "-v, --verbose show PCM structure and setup (accumulative)\n" "-V, --vumeter=TYPE enable VU meter (TYPE: mono or stereo)\n" "-I, --separate-channels one file for each channel\n" +"-i, --interactive allow interactive operation from stdin\n" " --disable-resample disable automatic rate resample\n" " --disable-channels disable automatic channel conversions\n" " --disable-format disable automatic format conversions\n" @@ -404,7 +406,7 @@ enum { int main(int argc, char *argv[]) { int option_index; - static const char short_options[] = "hnlLD:qt:c:f:r:d:MNF:A:R:T:B:vV:IPC"; + static const char short_options[] = "hnlLD:qt:c:f:r:d:MNF:A:R:T:B:vV:IPCi"; static const struct option long_options[] = { {"help", 0, 0, 'h'}, {"version", 0, 0, OPT_VERSION}, @@ -442,6 +444,7 @@ int main(int argc, char *argv[]) {"max-file-time", 1, 0, OPT_MAX_FILE_TIME}, {"process-id-file", 1, 0, OPT_PROCESS_ID_FILE}, {"use-strftime", 0, 0, OPT_USE_STRFTIME}, + {"interactive", 0, 0, 'i'}, {0, 0, 0, 0} }; char *pcm_name = "default"; @@ -608,6 +611,9 @@ int main(int argc, char *argv[]) if (file_type == FORMAT_DEFAULT) file_type = FORMAT_WAVE; break; + case 'i': + interactive = 1; + break; case OPT_DISABLE_RESAMPLE: open_mode |= SND_PCM_NO_AUTO_RESAMPLE; break; @@ -1206,6 +1212,8 @@ static void init_stdin(void) struct termios term; long flags; + if (!interactive) + return; tcgetattr(fileno(stdin), &term); term_c_lflag = term.c_lflag; if (fd == fileno(stdin)) @@ -1221,6 +1229,8 @@ static void done_stdin(void) { struct termios term; + if (!interactive) + return; if (fd == fileno(stdin) || term_c_lflag == -1) return; tcgetattr(fileno(stdin), &term); @@ -1258,6 +1268,8 @@ static void check_stdin(void) { unsigned char b; + if (!interactive) + return; if (fd != fileno(stdin)) { while (read(fileno(stdin), &b, 1) == 1) { if (b == ' ' || b == '\r') {