This diff makes cdda2wav use sndio to play sound. Tested on amd64.
Many thanks to jca@ who did a big part of the work.

OK?

Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/cdrtools/Makefile,v
retrieving revision 1.21
diff -u -p -u -p -r1.21 Makefile
--- Makefile    12 Jun 2014 08:07:32 -0000      1.21
+++ Makefile    31 Oct 2014 09:28:39 -0000
@@ -3,17 +3,18 @@
 COMMENT=               ISO 9660 filesystem and CD/DVD/BD creation tools
 
 DISTNAME=              cdrtools-3.00
-REVISION=              0
+REVISION=              1
 CATEGORIES=            sysutils
 HOMEPAGE=              http://cdrtools.sourceforge.net/private/cdrtools.html
 
 # mostly CDDL, some components GPL (see COPYING)
 PERMIT_PACKAGE_CDROM=  Yes
-WANTLIB=               c ossaudio
+WANTLIB=               c sndio
 
 MASTER_SITES=          ${MASTER_SITE_SOURCEFORGE:=cdrtools/}
 
 
+BUILD_DEPENDS=         devel/m4
 USE_GMAKE=             Yes
 
 MAKE_ENV +=            MAKEPROG=${MAKE_PROGRAM}
@@ -21,8 +22,7 @@ MAKE_FLAGS =          GMAKE_NOWARN=true CC="${CC
                        LDCC="${CC}" LDCC++="${CXX}" \
                        MKC++DEP="${CXX} -M" MKDEP="${CC} -M" \
                        DYNLD="${CC}" DYNLDC++="${CXX}" \
-                       GCCOPTOPT="" RANLIB=ranlib AR=ar \
-                       OSS_SOUND_DEV='"/dev/audio"'
+                       GCCOPTOPT="" RANLIB=ranlib AR=ar
 
 NO_TEST=               Yes
 
Index: patches/patch-cdda2wav_configure_in
===================================================================
RCS file: patches/patch-cdda2wav_configure_in
diff -N patches/patch-cdda2wav_configure_in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-cdda2wav_configure_in 31 Oct 2014 09:28:39 -0000
@@ -0,0 +1,55 @@
+$OpenBSD$
+--- cdda2wav/configure.in.orig Sat Aug  8 21:40:53 2009
++++ cdda2wav/configure.in      Thu Oct 30 19:15:57 2014
+@@ -19,15 +19,32 @@ case "$host_os" in
+ AC_CHECK_LIB(posix4, sched_get_priority_max)
+ ;;
+ esac
++case "$host_os" in
++   *openbsd*)
++dnl skip obsolete libossaudio on OpenBSD
++;;
++   *)
+ AC_CHECK_LIB(ossaudio, _oss_ioctl)
++;;
++esac
++AC_CHECK_LIB(sndio, sio_open)
+ 
+ EXTRALIBS="$LIBS"
+ 
+ AC_SUBST(EXTRALIBS)
+ 
+ dnl check header files
+-AC_CHECK_HEADERS(sys/cdio.h sys/cdrio.h sundev/srreg.h sys/audioio.h 
sun/audioio.h)
++AC_CHECK_HEADERS(sndio.h)
++AC_CHECK_HEADERS(sys/cdio.h sys/cdrio.h sundev/srreg.h)
++case "$host_os" in
++   *openbsd*)
++dnl skip obsolete soundcard.h and non-SunOS-compatible audioio.h on OpenBSD
++;;
++   *)
++AC_CHECK_HEADERS(sys/audioio.h sun/audioio.h)
+ AC_CHECK_HEADERS(soundcard.h sys/soundcard.h linux/soundcard.h 
machine/soundcard.h)
++;;
++esac
+ dnl We no longer include HAVE_WINDOWS_H in lconfig.h but we need the test
+ dnl result together with the test for mmsystem.h
+ AC_CHECK_HEADERS(sys/asoundlib.h windows.h mmsystem.h)
+@@ -61,6 +78,17 @@ HAVE_OSS=
+ ;;
+ esac
+ AC_SUBST(HAVE_OSS)
++
++case "${ac_cv_header_sndio_h}" in
++   *yes*)
++HAVE_SNDIO=1
++;;
++   *)
++HAVE_SNDIO=
++;;
++esac
++AC_SUBST(HAVE_SNDIO)
++
+ 
+ AC_SUBST(HAVE_SYS_ASOUNDLIB_H)
+ 
Index: patches/patch-cdda2wav_lconfig_h_in
===================================================================
RCS file: patches/patch-cdda2wav_lconfig_h_in
diff -N patches/patch-cdda2wav_lconfig_h_in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-cdda2wav_lconfig_h_in 31 Oct 2014 09:28:39 -0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+preprocessor directives for sndio
+
+--- cdda2wav/lconfig.h.in.orig Sat Aug  8 21:24:22 2009
++++ cdda2wav/lconfig.h.in      Thu Oct 30 19:14:12 2014
+@@ -19,12 +19,18 @@
+ 
+ #undef HAVE_MACHINE_SOUNDCARD_H       /* if we should use machine/soundcard.h 
*/
+ 
++#undef HAVE_SNDIO_H   /* if we should use sndio.h */
++
+ #undef HAVE_SYS_ASOUNDLIB_H   /* if we should use sys/asoundlib.h */
+ 
+ #undef HAVE_MMSYSTEM_H                /* if we should use mmsystem.h */
+ 
+ #if   defined HAVE_SOUNDCARD_H || defined HAVE_SYS_SOUNDCARD_H  || defined 
HAVE_LINUX_SOUNDCARD_H || defined HAVE_MACHINE_SOUNDCARD_H
+ #define HAVE_OSS      1
++#endif
++
++#if   defined HAVE_SNDIO_H
++#define HAVE_SNDIO     1
+ #endif
+ 
+ #if   defined HAVE_WINDOWS_H && defined HAVE_MMSYSTEM_H
Index: patches/patch-cdda2wav_local_cnf_in
===================================================================
RCS file: patches/patch-cdda2wav_local_cnf_in
diff -N patches/patch-cdda2wav_local_cnf_in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-cdda2wav_local_cnf_in 31 Oct 2014 09:28:39 -0000
@@ -0,0 +1,23 @@
+$OpenBSD$
+--- cdda2wav/local.cnf.in.orig Mon Dec 28 17:16:56 2009
++++ cdda2wav/local.cnf.in      Fri Oct 31 10:01:12 2014
+@@ -47,15 +47,16 @@ OSS_SOUND_DEV=     '"/dev/dsp"'
+ SUN_SOUND_DEV=        '"/dev/audio"'
+ 
+ HAVE_OSS=     @HAVE_OSS@
++HAVE_SNDIO=   @HAVE_SNDIO@
+ HAVE_SUNSOUND=        @HAVE_SUNSOUND@
+ HAVE_WINSOUND=        @HAVE_WINSOUND@
+ HAVE_OS2SOUND=        @HAVE_OS2SOUND@
+ HAVE_QNXSOUND=        @HAVE_SYS_ASOUNDLIB_H@
+ #_HAVE_SOUND= $(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)
+-_HAVE_SOUND=  
$(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)
++_HAVE_SOUND=  
$(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)
+ __HAVE_SOUND= $(_HAVE_SOUND:$(_UNIQ)=)
+-#HAVE_SOUND=  
$(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)=-DECHO_TO_SOUNDCARD)
+-HAVE_SOUND=   
$(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)=-DECHO_TO_SOUNDCARD)
++#HAVE_SOUND=  
$(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)=-DECHO_TO_SOUNDCARD)
++HAVE_SOUND=   
$(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)=-DECHO_TO_SOUNDCARD)
+ 
+ _SOUND_DEVICE=        $(_UNIQ)$(HAVE_OSS)$(HAVE_SOUND)$(HAVE_SUNSOUND)
+ __SOUND_DEVICE=       $(_SOUND_DEVICE:$(_UNIQ)='""')
Index: patches/patch-cdda2wav_sndconfig_c
===================================================================
RCS file: patches/patch-cdda2wav_sndconfig_c
diff -N patches/patch-cdda2wav_sndconfig_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-cdda2wav_sndconfig_c  31 Oct 2014 09:28:39 -0000
@@ -0,0 +1,128 @@
+$OpenBSD$
+--- cdda2wav/sndconfig.c.orig  Sun Nov 29 23:07:37 2009
++++ cdda2wav/sndconfig.c       Fri Oct 31 10:18:09 2014
+@@ -51,6 +51,10 @@ static      UConst char sccsid[] =
+ # endif
+ #endif
+ 
++#ifdef        HAVE_SNDIO
++#include <sndio.h>
++#endif
++
+ #include "mytype.h"
+ #include "byteorder.h"
+ #include "lowlevel.h"
+@@ -85,7 +89,11 @@ static PLAYLISTSTRUCTURE PlayList[FRAGMENTS + 1];
+ static unsigned BufferInd;
+ #   endif /* defined __EMX__ */
+ 
++#if   defined(HAVE_SNDIO)
++static char snd_device[200] = SIO_DEVANY;
++#else
+ static char snd_device[200] = SOUND_DEV;
++#endif
+ 
+ int
+ set_snd_device(devicename)
+@@ -161,6 +169,11 @@ check_winsound_caps(bits, rate, channels)
+ snd_pcm_t     *pcm_handle;
+ #endif
+ 
++#ifdef        HAVE_SNDIO
++struct sio_hdl *hdl;
++struct sio_par par;
++#endif
++
+ #if   defined HAVE_OSS && defined SNDCTL_DSP_GETOSPACE
+ audio_buf_info abinfo;
+ #endif
+@@ -172,6 +185,41 @@ init_soundcard(rate, bits)
+ {
+ #ifdef        ECHO_TO_SOUNDCARD
+       if (global.echo) {
++# if  defined(HAVE_SNDIO)
++              hdl = sio_open(snd_device, SIO_PLAY, 0);
++              if (hdl == NULL) {
++                      errmsg("Cannot open sound device '%s'.\n", snd_device);
++                      return (1);
++              }
++              sio_initpar(&par);
++              par.bits = bits;
++              par.sig = 1;
++              par.le = SIO_LE_NATIVE;
++              par.pchan = 2;
++              par.rate = rate;
++              par.appbufsz = 44100 / 4;
++              if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
++                      errmsg("Cannot set sound parameters for '%s'.\n", 
snd_device);
++                      sio_close(hdl);
++                      hdl = NULL;
++                      return (1);
++              }
++              if (par.bits != bits || par.sig != 1 || par.le != SIO_LE_NATIVE 
||
++                  par.pchan != 2 || par.rate != (int)rate) {
++                      errmsg("Unsupported sound parameters for '%s'.\n", 
snd_device);
++                      sio_close(hdl);
++                      hdl = NULL;
++                      return (1);
++              }
++              if (!sio_start(hdl)) {
++                      errmsg("Couldn't start sound device '%s'.\n", 
snd_device);
++                      sio_close(hdl);
++                      hdl = NULL;
++                      return (1);
++              }
++
++# else /* HAVE_SNDIO */
++
+ # if  defined(HAVE_OSS) && HAVE_OSS == 1
+               if (open_snd_device() != 0) {
+                       errmsg("Cannot open sound device '%s'.\n", snd_device);
+@@ -543,6 +591,7 @@ init_soundcard(rate, bits)
+ #   endif /* CYGWIN Windows sound */
+ #  endif /* else SUN audio */
+ # endif /* else HAVE_OSS */
++# endif /* else HAVE_SNDIO */
+       }
+ #endif /* ifdef ECHO_TO_SOUNDCARD */
+       return (0);
+@@ -586,6 +635,12 @@ close_snd_device()
+       return (0);
+ #else
+ 
++# if  defined(HAVE_SNDIO)
++      if (hdl != NULL) {
++              sio_close(hdl);
++              hdl = NULL;
++      }
++#else
+ # if  defined(__CYGWIN32__) || defined(__MINGW32__)
+       waveOutReset(0);
+       return (waveOutClose(DeviceID));
+@@ -610,6 +665,7 @@ close_snd_device()
+ #   endif /* !QNX */
+ #  endif /* !EMX */
+ # endif /* !Cygwin32 */
++# endif
+ #endif /* ifdef ECHO_TO_SOUNDCARD */
+ }
+ 
+@@ -620,6 +676,10 @@ write_snd_device(buffer, todo)
+ {
+       int     result = 0;
+ #ifdef        ECHO_TO_SOUNDCARD
++#if   defined(HAVE_SNDIO)
++      if (hdl == NULL || !sio_write(hdl, buffer, todo))
++              return (1);
++#else
+ #if   defined(__CYGWIN32__) || defined(__MINGW32__)
+       MMRESULT        mmres;
+ 
+@@ -706,6 +766,7 @@ outside_loop:
+       ;
+ #endif        /* !defined __EMX__ */
+ #endif        /* !defined __CYGWIN32__ */
++#endif
+ #endif        /* ECHO_TO_SOUNDCARD */
+       return (result);
+ }

Reply via email to