# HG changeset patch # User jkeil # Date 1041006929 0 # Node ID ed132c268686558a1f2a3af956add46616df7335 # Parent 1d15ca298ddafaeb13f37dd8f455b5b0157bd8e4 - Fix 8-bit sound in arts audio driver (logic in OBTAIN_BITRATE macro was broken) - arts server always expects 16-bit sound in little endian byte order, even in the case the artsd server runs on a big endian machine. Make sure that mplayer's audio filters convert the samples into one of the arts supported sound formats. diff -r 1d15ca298dda -r ed132c268686 libao2/ao_arts.c --- a/libao2/ao_arts.c Fri Dec 27 16:29:11 2002 +0000 +++ b/libao2/ao_arts.c Fri Dec 27 16:35:29 2002 +0000 @@ -16,7 +16,7 @@ #include "../config.h" #include "../mp_msg.h" -#define OBTAIN_BITRATE(a) (((a != AFMT_U8) || (a != AFMT_S8)) ? 16 : 8) +#define OBTAIN_BITRATE(a) (((a != AFMT_U8) && (a != AFMT_S8)) ? 16 : 8) /* Feel free to experiment with the following values: */ #define ARTS_PACKETS 10 /* Number of audio packets */ @@ -50,6 +50,24 @@ } mp_msg(MSGT_AO, MSGL_INFO, "AO: [arts] Connected to sound server\n"); + /* + * arts supports 8bit unsigned and 16bit signed sample formats + * (16bit apparently in little endian format, even in the case + * when artsd runs on a big endian cpu). + * + * Unsupported formats are translated to one of these two formats + * using mplayer's audio filters. + */ + switch (format) { + case AFMT_U8: + case AFMT_S8: + format = AFMT_U8; + break; + default: + format = AFMT_S16_LE; /* artsd always expects little endian?*/ + break; + } + ao_data.format = format; ao_data.channels = channels; ao_data.samplerate = rate_hz;