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]

Reply via email to