sox and mp3

View: New views
4 Messages — Rating Filter:   Alert me  

sox and mp3

by Jan Stary :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

After reinstalling with 4.6, which comes with sox-14.2.0p2,
I can no longer play mp3 files. On a previous install (4.5
which comes with sox-14.2.0p1) I could.

When trying to process an mp3 file, all I get is:

$ play -V file.mp3
$ play: SoX v14.2.0
$ play formats: detected file format type `audio/mpeg; charset=binary'
$ play formats: no handler for detected file type `audio/mpeg; charset=binary'

$ sox -V file.mp3 out.wav
$ sox: SoX v14.2.0
$ sox formats: detected file format type `audio/mpeg; charset=binary'
$ sox formats: no handler for detected file type `audio/mpeg; charset=binary'

$ soxi -V file.mp3
$ soxi formats: detected file format type `audio/mpeg; charset=binary'
$ soxi formats: no handler for detected file type `audio/mpeg; charset=binary'

Interestingly, sox can create mp3's itself, as in

 sox -V file.wav file.mp3
 sox: SoX v14.2.0
 sox formats: detected file format type `wav'

 Input File     : 'file.wav'
 Channels       : 2
 Sample Rate    : 44100
 Precision      : 16-bit
 Duration       : 00:05:36.04 = 14819328 samples = 25202.9 CDDA sectors
 Sample Encoding: 16-bit Signed Integer PCM
 Endian Type    : little
 Reverse Nibbles: no
 Reverse Bits   : no

 sox sox: Overwriting `file.mp3'
 sox mp3: Encoding forced to MP3

 Output File    : 'file.mp3'
 Channels       : 2
 Sample Rate    : 44100
 Precision      : 16-bit
 Duration       : 00:05:36.04 = 14819328 samples = 25202.9 CDDA sectors
 Sample Encoding: MPEG audio (layer I, II or III)
 Comment        : 'Processed by SoX'

 sox sox: effects chain: input      44100Hz 2 channels 16 bits (multi)
 sox sox: effects chain: output     44100Hz 2 channels 16 bits (multi)

which works just fine. But then sox cannot play file.mp3 back.

I understand that the last version of the port is different with respect
to external formats/codecs. Is the above behavious intended/expected?
Much as I try to avoid the mp3 format, my archive is still full of it.

        Thanks for your time

                Jan



Re: sox and mp3

by Stuart Henderson :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On 2009/11/02 13:44, Jan Stary wrote:
> After reinstalling with 4.6, which comes with sox-14.2.0p2,
> I can no longer play mp3 files. On a previous install (4.5
> which comes with sox-14.2.0p1) I could.

please test this diff, it cleans up and updates the port, and
makes "play foo.mp3" work for me.

14.3.0 adds format detection over pipes, but it's disabled
here as it needs a non-portable hack to rewind the pipe.
(if anyone's interested in seeing if it can be added, see
patch-src_formats_c, but let's do that later).

Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/sox/Makefile,v
retrieving revision 1.41
diff -u -p -r1.41 Makefile
--- Makefile 6 Apr 2009 18:56:55 -0000 1.41
+++ Makefile 2 Nov 2009 19:01:19 -0000
@@ -2,10 +2,8 @@
 
 COMMENT= Sound eXchange, the Swiss Army knife of audio manipulation
 
-DISTNAME= sox-14.2.0
-PKGNAME= ${DISTNAME}p2
-SHARED_LIBS +=  sox                  0.0      # .0.0
-SHARED_LIBS +=  sfx                  0.0      # .0.0
+DISTNAME= sox-14.3.0
+SHARED_LIBS += sox 1.0 # .1.0
 CATEGORIES= audio
 HOMEPAGE= http://sox.sourceforge.net/
 
@@ -27,7 +25,6 @@ LIB_DEPENDS= vorbis.>=6,vorbisenc.>=2,vo
  mp3lame.>=2::audio/lame \
  wavpack.>=0::audio/wavpack \
  png.>=8::graphics/png \
- samplerate.>=2::audio/libsamplerate \
  gsm.>=1::audio/gsm
 WANTLIB= c iconv m ogg sndio z
 
@@ -42,33 +39,29 @@ CONFIGURE_ARGS= ${CONFIGURE_SHARED} \
 CONFIGURE_ARGS+=--without-libltdl
 
 # Sound drivers
-CONFIGURE_ARGS+=--disable-libao \
- --disable-oss \
- --enable-sndio \
- --disable-sun-audio
+CONFIGURE_ARGS+=--without-ao \
+ --without-oss \
+ --with-sndio \
+ --without-sunaudio
 
 # Additional file formats
 CONFIGURE_ARGS+=--without-sndfile \
- --with-ogg \
+ --with-oggvorbis \
  --with-flac \
  --without-ffmpeg \
  --with-magic \
  --with-mad \
  --with-id3tag \
  --with-lame \
- --without-amr-wb \
- --without-amr-nb \
+ --without-amrwb \
+ --without-amrnb \
  --with-wavpack \
  --with-png \
- --with-samplerate \
  --without-ladspa
 
 CONFIGURE_ENV= \
  CPPFLAGS="-I${LOCALBASE}/include -I${LOCALBASE}/include/libpng" \
  LDFLAGS="-L${WRKBUILD}/src/.libs -L${LOCALBASE}/lib"
-
-post-extract:
- @cp ${FILESDIR}/sndio.c ${WRKSRC}/src
 
 AUTO_ENV= AUTOCONF_VERSION=${AUTOCONF_VERSION} \
  AUTOMAKE_VERSION=${AUTOMAKE_VERSION}
Index: distinfo
===================================================================
RCS file: /cvs/ports/audio/sox/distinfo,v
retrieving revision 1.9
diff -u -p -r1.9 distinfo
--- distinfo 8 Jan 2009 19:48:21 -0000 1.9
+++ distinfo 2 Nov 2009 19:01:19 -0000
@@ -1,5 +1,5 @@
-MD5 (sox-14.2.0.tar.gz) = evwOhdFL4BTwjn07fujCTg==
-RMD160 (sox-14.2.0.tar.gz) = fHai21xYOPw9n4tUAuR9VI/QlNU=
-SHA1 (sox-14.2.0.tar.gz) = G2Dlr0P0SlEkf7l48kI/Defic2M=
-SHA256 (sox-14.2.0.tar.gz) = jRuOszpyoYE2lHXJ2l/cvl9oIOavPYag6E9pOeYancE=
-SIZE (sox-14.2.0.tar.gz) = 964800
+MD5 (sox-14.3.0.tar.gz) = jjUJgE5iJyc++ECS4aL+pw==
+RMD160 (sox-14.3.0.tar.gz) = kwLgDXbJcsSRaXnRR0aPZA4ErKo=
+SHA1 (sox-14.3.0.tar.gz) = NLjpkbqFEfqWg+np01b7f0F50Dw=
+SHA256 (sox-14.3.0.tar.gz) = mr9BHJSTZtdciEs2goRpC2yMfV+13w3q9ZlTm3BLI5c=
+SIZE (sox-14.3.0.tar.gz) = 1007679
Index: files/sndio.c
===================================================================
RCS file: files/sndio.c
diff -N files/sndio.c
--- files/sndio.c 16 Jan 2009 16:42:56 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,242 +0,0 @@
-/*
- * libsndio sound handler
- *
- * Copyright (c) 2009 Alexandre Ratchov <alex@...>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#include <string.h>
-#include <sndio.h>
-#include "sox_i.h"
-
-struct sndio_priv {
- struct sio_hdl *hdl; /* handle to speak to libsndio */
- struct sio_par par; /* current device parameters */
-#define SNDIO_BUFSZ 0x1000
- unsigned char buf[SNDIO_BUFSZ]; /* temp buffer for converions */
-};
-
-/*
- * convert ``count'' samples from sox encoding to sndio encoding
- */
-static void encode(struct sio_par *par,
-    sox_sample_t *idata, unsigned char *odata, unsigned count)
-{
- int obnext, osnext, s, osigbit;
- unsigned oshift, obps, i;
-
- obps = par->bps;
- osigbit = par->sig ? 0 : 1 << (par->bits - 1);
- oshift = 32 - (par->msb ? par->bps * 8 : par->bits);
- if (par->le) {
- obnext = 1;
- osnext = 0;
- } else {
- odata += par->bps - 1;
- obnext = -1;
- osnext = 2 * par->bps;
- }
- for (; count > 0; count--) {
- s = (*idata++ >> oshift) ^ osigbit;
- for (i = obps; i > 0; i--) {
- *odata = (unsigned char)s;
- s >>= 8;
- odata += obnext;
- }
- odata += osnext;
- }
-}
-
-/*
- * convert ``count'' samples from sndio encoding to sox encoding
- */
-static void decode(struct sio_par *par,
-    unsigned char *idata, sox_sample_t *odata, unsigned count)
-{
- unsigned ishift, ibps, i;
- int s = 0xdeadbeef, ibnext, isnext, isigbit;
-
- ibps = par->bps;
- isigbit = par->sig ? 0 : 1 << (par->bits - 1);
- ishift = 32 - (par->msb ? par->bps * 8 : par->bits);
- if (par->le) {
- idata += par->bps - 1;
- ibnext = -1;
- isnext = 2 * par->bps;
- } else {
- ibnext = 1;
- isnext = 0;
- }
- for (; count > 0; count--) {
- for (i = ibps; i > 0; i--) {
- s <<= 8;
- s |= *idata;
- idata += ibnext;
- }
- idata += isnext;
- *odata++ = (s ^ isigbit) << ishift;
- }
-}
-
-static int startany(struct sox_format *ft, unsigned mode)
-{
- struct sndio_priv *p = (struct sndio_priv *)ft->priv;
- struct sio_par reqpar;
- char *device;
-
- device = ft->filename;
- if (strcmp("default", device) == 0)
- device = NULL;
-
- p->hdl = sio_open(device, mode, 0);
- if (p->hdl == NULL)
- return SOX_EOF;
- /*
- * set specified parameters, leaving others to the defaults
- */
- sio_initpar(&reqpar);
- if (ft->signal.rate > 0)
- reqpar.rate = ft->signal.rate;
- if (ft->signal.channels > 0) {
- if (mode == SIO_PLAY)
- reqpar.pchan = ft->signal.channels;
- else
- reqpar.rchan = ft->signal.channels;
- }
- if (ft->signal.precision > 0)
- reqpar.bits = ft->signal.precision;
- switch (ft->encoding.encoding) {
- case SOX_ENCODING_SIGN2:
- reqpar.sig = 1;
- break;
- case SOX_ENCODING_UNSIGNED:
- reqpar.sig = 0;
- break;
- default:
- break; /* use device default */
- }
- if (ft->encoding.bits_per_sample > 0)
- reqpar.bits = ft->encoding.bits_per_sample;
- if (ft->encoding.reverse_bytes != SOX_OPTION_DEFAULT) {
- reqpar.le = SIO_LE_NATIVE;
- if (ft->encoding.reverse_bytes)
- reqpar.le = !reqpar.le;
- }
- if (!sio_setpar(p->hdl, &reqpar) ||
-    !sio_getpar(p->hdl, &p->par))
- goto failed;
- ft->signal.channels = (mode == SIO_PLAY) ? p->par.pchan : p->par.rchan;
- ft->signal.precision = p->par.bits;
- ft->signal.rate = p->par.rate;
- ft->encoding.encoding = p->par.sig ? SOX_ENCODING_SIGN2 : SOX_ENCODING_UNSIGNED;
- ft->encoding.bits_per_sample = p->par.bps * 8;
- ft->encoding.reverse_bytes = SIO_LE_NATIVE ? !p->par.le : p->par.le;
- ft->encoding.reverse_nibbles = SOX_OPTION_NO;
- ft->encoding.reverse_bits = SOX_OPTION_NO;
-
- if (!sio_start(p->hdl))
- goto failed;
- return SOX_SUCCESS;
- failed:
- sio_close(p->hdl);
- return SOX_EOF;
-}
-
-static int stopany(struct sox_format *ft)
-{
- sio_close(((struct sndio_priv *)ft->priv)->hdl);
- return SOX_SUCCESS;
-}
-
-static int startread(struct sox_format *ft)
-{
- return startany(ft, SIO_REC);
-}
-
-static int startwrite(struct sox_format *ft)
-{
- return startany(ft, SIO_PLAY);
-}
-
-static size_t readsamples(sox_format_t *ft, sox_sample_t *buf, size_t len)
-{
- struct sndio_priv *p = (struct sndio_priv *)ft->priv;
- unsigned char partial[4];
- unsigned cpb, cc, pc;
- size_t todo, n;
-
- pc = 0;
- todo = len * p->par.bps;
- cpb = SNDIO_BUFSZ - (SNDIO_BUFSZ % p->par.bps);
- while (todo > 0) {
- memcpy(p->buf, partial, pc);
- cc = cpb - pc;
- if (cc > todo)
- cc = todo;
- n = sio_read(p->hdl, p->buf + pc, cc);
- if (n == 0 && sio_eof(p->hdl))
- break;
- n += pc;
- pc = n % p->par.bps;
- n -= pc;
- memcpy(partial, p->buf + n, pc);
- decode(&p->par, p->buf, buf, n / p->par.bps);
- buf += n / p->par.bps;
- todo -= n;
- }
- return len - todo / p->par.bps;
-}
-
-static size_t writesamples(sox_format_t *ft, const sox_sample_t *buf, size_t len)
-{
- struct sndio_priv *p = (struct sndio_priv *)ft->priv;
- unsigned sc, spb;
- size_t n, todo;
-
- todo = len;
- spb = SNDIO_BUFSZ / p->par.bps;
- while (todo > 0) {
- sc = spb;
- if (sc > todo)
- sc = todo;
- encode(&p->par, buf, p->buf, sc);
- n = sio_write(p->hdl, p->buf, sc * p->par.bps);
- if (n == 0 && sio_eof(p->hdl))
- break;
- n /= p->par.bps;
- todo -= n;
- buf += n;
- }
- return len - todo;
-}
-
-SOX_FORMAT_HANDLER(sndio)
-{
- static char const * const names[] = {"sndio", NULL};
- static unsigned const write_encodings[] = {
- SOX_ENCODING_SIGN2, 32, 24, 16, 8, 0,
- SOX_ENCODING_UNSIGNED, 32, 24, 16, 8, 0,
- 0
- };
- static sox_format_handler_t const handler = {
- SOX_LIB_VERSION_CODE,
- "libsndio device driver",
- names,
- SOX_FILE_DEVICE | SOX_FILE_NOSTDIO,
- startread, readsamples, stopany,
- startwrite, writesamples, stopany,
- NULL, write_encodings, NULL,
- sizeof(struct sndio_priv)
- };
- return &handler;
-}
Index: patches/patch-configure_ac
===================================================================
RCS file: patches/patch-configure_ac
diff -N patches/patch-configure_ac
--- patches/patch-configure_ac 16 Jan 2009 16:42:56 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-$OpenBSD: patch-configure_ac,v 1.1 2009/01/16 16:42:56 ratchov Exp $
---- configure.ac.orig Fri Nov  7 18:54:28 2008
-+++ configure.ac Thu Jan  8 22:08:14 2009
-@@ -225,6 +225,23 @@ fi
- AM_CONDITIONAL(HAVE_OSS, test x$enable_oss = xyes)
- AC_SUBST(OSS_LIBS)
-
-+dnl Check for sndio
-+AC_MSG_CHECKING([whether to try building sndio sound driver])
-+AC_ARG_ENABLE(sndio,
-+    AC_HELP_STRING([--disable-sndio], [Don't build sndio sound driver.]),,enable_sndio=yes)
-+AC_MSG_RESULT($enable_sndio)
-+if test "$enable_sndio" = "yes"; then
-+    AC_CHECK_HEADERS(sndio.h,
-+        [AC_CHECK_LIB(sndio, sio_open, SNDIO_LIBS="$SNDIO_LIBS -lsndio")],
-+        enable_sndio=no)
-+fi
-+if test "$enable_sndio" = yes; then
-+   AC_DEFINE(HAVE_SNDIO, 1, [Define to 1 if you have sndio.])
-+   audio_driver_found=yes
-+fi
-+AM_CONDITIONAL(HAVE_SNDIO, test x$enable_sndio = xyes)
-+AC_SUBST(SNDIO_LIBS)
-+
- dnl Check for Sun audio
- AC_MSG_CHECKING([whether to try building Sun audio driver])
- AC_ARG_ENABLE(sun-audio,
-@@ -607,6 +624,7 @@ echo "External module support........... $using_libltd
- echo "ALSA driver....................... $enable_alsa"
- echo "libao driver...................... $enable_libao"
- echo "OSS driver........................ $enable_oss"
-+echo "sndio driver...................... $enable_sndio"
- echo "SUN audio driver.................. $enable_sun_audio"
- echo "CoreAudio driver.................. $enable_coreaudio"
- echo "symlinks enabled.................. $enable_symlinks"
Index: patches/patch-src_Makefile_am
===================================================================
RCS file: patches/patch-src_Makefile_am
diff -N patches/patch-src_Makefile_am
--- patches/patch-src_Makefile_am 16 Jan 2009 16:42:56 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,27 +0,0 @@
-$OpenBSD: patch-src_Makefile_am,v 1.1 2009/01/16 16:42:56 ratchov Exp $
---- src/Makefile.am.orig Thu Jan  8 21:57:05 2009
-+++ src/Makefile.am Thu Jan  8 21:59:19 2009
-@@ -239,6 +239,11 @@ libsox_fmt_oss_la_SOURCES = oss.c
- libsox_fmt_oss_la_LIBADD = libsox.la @OSS_LIBS@
- pkglib_LTLIBRARIES += libsox_fmt_oss.la
- endif
-+if HAVE_SNDIO
-+libsox_fmt_sndio_la_SOURCES = sndio.c
-+libsox_fmt_sndio_la_LIBADD = libsox.la @SNDIO_LIBS@
-+pkglib_LTLIBRARIES += libsox_fmt_sndio.la
-+endif
- if HAVE_SUN_AUDIO
- libsox_fmt_sunau_la_SOURCES = sunaudio.c
- libsox_fmt_sunau_la_LIBADD = libsox.la
-@@ -360,6 +365,11 @@ if HAVE_OSS
-     libsox_la_SOURCES += oss.c
-     libsox_la_LIBADD += @OSS_LIBS@
-     sox_LDADD += @OSS_LIBS@
-+endif
-+if HAVE_SNDIO
-+    libsox_la_SOURCES += sndio.c
-+    libsox_la_LIBADD += @SNDIO_LIBS@
-+    sox_LDADD += @SNDIO_LIBS@
- endif
- if HAVE_SUN_AUDIO
-     libsox_la_SOURCES += sunaudio.c
Index: patches/patch-src_formats_c
===================================================================
RCS file: patches/patch-src_formats_c
diff -N patches/patch-src_formats_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_formats_c 2 Nov 2009 19:01:19 -0000
@@ -0,0 +1,12 @@
+$OpenBSD$
+--- src/formats.c.orig Mon Nov  2 17:11:55 2009
++++ src/formats.c Mon Nov  2 17:11:34 2009
+@@ -403,7 +403,7 @@ static void UNUSED rewind_pipe(FILE * fp)
+   /* To fix this #error, either simply remove the #error line and live without
+    * file-type detection with pipes, or add support for your compiler in the
+    * lines above.  Test with cat monkey.au | ./sox --info - */
+-  #error FIX NEEDED HERE
++  /* #error FIX NEEDED HERE */
+   #define NO_REWIND_PIPE
+   (void)fp;
+ #endif
Index: patches/patch-src_formats_h
===================================================================
RCS file: patches/patch-src_formats_h
diff -N patches/patch-src_formats_h
--- patches/patch-src_formats_h 16 Jan 2009 16:42:56 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
---- src/formats.h.old Sun Jan 11 19:41:19 2009
-+++ src/formats.h Sun Jan 11 19:41:56 2009
-@@ -87,6 +87,9 @@
- #if defined(HAVE_SYS_SOUNDCARD_H) || defined(HAVE_MACHINE_SOUNDCARD_H)
-   FORMAT(oss)
- #endif
-+#if defined HAVE_SNDIO
-+  FORMAT(sndio)
-+#endif
- #if defined HAVE_SNDFILE
-   FORMAT(sndfile)
-   #if defined HAVE_SNDFILE_1_0_12
Index: patches/patch-src_sox_c
===================================================================
RCS file: patches/patch-src_sox_c
diff -N patches/patch-src_sox_c
--- patches/patch-src_sox_c 16 Jan 2009 16:42:56 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
---- src/sox.c.orig Mon Jan 12 11:36:30 2009
-+++ src/sox.c Mon Jan 12 11:37:54 2009
-@@ -2142,7 +2142,7 @@ static char const * device_name(char const * const typ
-     return NULL;
-   if (!strcmp(type, "sunau")) name = "/dev/audio";
-   else if (!strcmp(type, "oss" ) || !strcmp(type, "ossdsp")) name = "/dev/dsp";
--  else if (!strcmp(type, "alsa") || !strcmp(type, "ao") || !strcmp(type, "coreaudio")) name = "default";
-+  else if (!strcmp(type, "alsa") || !strcmp(type, "ao") || !strcmp(type, "coreaudio") || !strcmp(type, "sndio")) name = "default";
-   return name? from_env? from_env : name : NULL;
- }
-
-@@ -2154,6 +2154,7 @@ static char const * set_default_device(file_t * f)
-   if (!f->filetype && sox_find_format("alsa", sox_false)) f->filetype = "alsa";
-   if (!f->filetype && sox_find_format("oss" , sox_false)) f->filetype = "oss";
-   if (!f->filetype && sox_find_format("sunau",sox_false)) f->filetype = "sunau";
-+  if (!f->filetype && sox_find_format("sndio", sox_false)) f->filetype = "sndio";
-   if (!f->filetype && sox_find_format("ao"  , sox_false) && file_count) /*!rec*/
-     f->filetype = "ao";
-


Re: sox and mp3

by Christian Weisgerber :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Jan Stary <hans@...> wrote:

> After reinstalling with 4.6, which comes with sox-14.2.0p2,
> I can no longer play mp3 files. On a previous install (4.5
> which comes with sox-14.2.0p1) I could.

> $ sox formats: detected file format type `audio/mpeg; charset=binary'
> $ sox formats: no handler for detected file type `audio/mpeg; charset=binary'

Something is wrong there.  sox should certainly handle MP3 input
files.  I'm investigating...

--
Christian "naddy" Weisgerber                          naddy@...


Parent Message unknown Re: sox and mp3

by Jan Stary :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> > > After reinstalling with 4.6, which comes with sox-14.2.0p2,
> > > I can no longer play mp3 files. On a previous install (4.5
> > > which comes with sox-14.2.0p1) I could.
> >
> > http://marc.info/?l=openbsd-ports&m=125718907606943&q=raw

This indeed installs 14.3.0 which plays file.mp3 all right.

        Thanks!

                Jan