static int init(int rate_hz, int channels, int format, int flags) { int err; int frag_spec; if( (err=arts_init()) ) { mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_ARTS_CantInit, arts_error_text(err)); return 0; } mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_ServerConnect); /* * 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 AF_FORMAT_U8: case AF_FORMAT_S8: format = AF_FORMAT_U8; break; default: format = AF_FORMAT_S16_LE; /* artsd always expects little endian?*/ break; } ao_data.format = format; ao_data.channels = channels; ao_data.samplerate = rate_hz; ao_data.bps = (rate_hz*channels); if(format != AF_FORMAT_U8 && format != AF_FORMAT_S8) ao_data.bps*=2; stream=arts_play_stream(rate_hz, OBTAIN_BITRATE(format), channels, "MPlayer"); if(stream == NULL) { mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_ARTS_CantOpenStream); arts_free(); return 0; } /* Set the stream to blocking: it will not block anyway, but it seems */ /* to be working better */ arts_stream_set(stream, ARTS_P_BLOCKING, 1); frag_spec = ARTS_PACKET_SIZE_LOG2 | ARTS_PACKETS << 16; arts_stream_set(stream, ARTS_P_PACKET_SETTINGS, frag_spec); ao_data.buffersize = arts_stream_get(stream, ARTS_P_BUFFER_SIZE); mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_StreamOpen); mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_BufferSize, ao_data.buffersize); mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_BufferSize, arts_stream_get(stream, ARTS_P_PACKET_SIZE)); return 1; }
static void close_output(void) { if(stream == 0) return; arts_close_stream(stream); arts_free(); arts_init_state = 2; stream = 0; }
static void arts_dsp_destroy(struct sysdep_dsp_struct *dsp) { struct arts_dsp_priv_data *priv = dsp->_priv; if(priv) { arts_close_stream(priv->stream); arts_free(); free(priv); } free(dsp); }
static void gst_artsdsink_close_audio (GstArtsdsink * sink) { if (!sink->connected) return; arts_close_stream (sink->stream); arts_free (); GST_OBJECT_FLAG_UNSET (sink, GST_ARTSDSINK_OPEN); sink->connected = FALSE; g_print ("artsdsink: closed connection\n"); }
/* close sound device or disconnect from aRts server */ void audio_exit(audio_dev_handle* handle) { #ifdef HAS_ARTS if(handle->use_arts) { arts_close_stream(handle->arts_handle); arts_free(); } else #endif { snd_pcm_close(handle->alsa_handle); } }
static void uninit(int immed) { arts_close_stream(stream); arts_free(); }
static int op_arts_exit(void) { arts_free(); return 0; }