Package: sox
Version: 14.0.0-5
Severity: normal
Hi,
When I play a wav file using play(1), it doesn't work and shows following error.
$ play /usr/share/sounds/startup3.wav
play soxio: Failed writing `default': unknown file type `ao'
According to source code of sox,
$ play foo
is almost same as
$ sox foo -t ao default
So that, above command will be treated as following command.
$ sox /usr/share/sounds/startup3.wav -t ao default
sox soxio: Failed writing `default': unknown file type `ao'
On my system, aptitude says libsox-fmt-alsa is installed, but libsox-fmt-ao is
not installed.
I have confirmed that wav file can be played correctly with this command (I
changed "ao" to "alsa"):
$ sox /usr/share/sounds/startup3.wav -t alsa default
It seems the problem is that libsox-fmt-ao is not installed.
I have installed libsox-fmt-ao,
$ aptitude install libsox-fmt-ao
and play(1) works fine.
$ play /usr/share/sounds/startup3.wav
.... and, Here is my opinion about this problem.
I think the problem is, when installing sox package, libsox-fmt-alsa will be
installed instead of libsox-fmt-ao.
Actually,
sox recommends libsox-fmt-alsa | libsox-fmt-ao | libsox-fmt-oss,
therefore libsox-fmt-alsa seems get higher priority than libsox-fmt-ao.
Hmmm...
rather important thing is that the audio device play(1) use is determined at
compiled-time.
It cannot be changed at run-time.
Look at this code (defined in sox-14.0.0/src/sox.c):
static void set_device(file_t f, sox_bool recording UNUSED)
{
#ifdef HAVE_LIBAO
if (!recording) {
f->filetype = "ao";
f->filename = xstrdup("default");
return;
}
#endif
#if defined(HAVE_ALSA)
f->filetype = "alsa";
f->filename = xstrdup("default");
#elif defined(HAVE_SYS_SOUNDCARD_H) || defined(HAVE_MACHINE_SOUNDCARD_H)
f->filetype = "ossdsp";
f->filename = xstrdup("/dev/dsp");
#elif defined(HAVE_SYS_AUDIOIO_H) || defined(HAVE_SUN_AUDIOIO_H)
char *device = getenv("AUDIODEV");
f->filetype = "sunau";
f->filename = xstrdup(device ? device : "/dev/audio");
#else
sox_fail("Sorry, there is no default audio device configured");
exit(1);
#endif
}
This code determines which audio device play(1) use.
I think it would be nice if play(1) determines dynamically the audio device
they use at run-time.
Regards,
Morita Sho
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.22-3-k7 (SMP w/1 CPU core)
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages sox depends on:
ii libc6 2.7-5 GNU C Library: Shared libraries
ii libltdl3 1.5.24-2 A system independent dlopen wrappe
ii libsamplerate0 0.1.2-5 audio rate conversion library
ii libsox0 14.0.0-5 SoX library
Versions of packages sox recommends:
ii libsox-fmt-alsa 14.0.0-5 SoX alsa format I/O library
ii libsox-fmt-ao 14.0.0-5 SoX Libao format I/O library
ii libsox-fmt-base 14.0.0-5 Minimal set of SoX format librarie
-- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]