static int acntl(int request, void *arg) { int tmp, tmp1, samples; switch(request) { case PM_REQ_DISCARD: /* Discard stream */ arts_close_stream(stream); stream=NULL; return 0; case PM_REQ_RATE: /* Change sample rate */ arts_close_stream(stream); tmp = (dpm.encoding & PE_16BIT) ? 16 : 8; tmp1 = (dpm.encoding & PE_MONO) ? 1 : 2; stream = arts_play_stream(*(int*)arg, LE_LONG(tmp), tmp1, "timidity"); server_buffer = arts_stream_get(stream, ARTS_P_SERVER_LATENCY) * dpm.rate * (tmp/8) * tmp1 / 1000; return 0; case PM_REQ_GETQSIZ: /* Get maximum queue size */ *(int*)arg = arts_stream_get(stream, ARTS_P_BUFFER_SIZE); return 0; case PM_REQ_SETQSIZ: /* Set queue size */ *(int*)arg = arts_stream_set(stream, ARTS_P_BUFFER_SIZE, *(int*)arg); return 0; case PM_REQ_GETFRAGSIZ: /* Get device fragment size */ *(int*)arg = arts_stream_get(stream, ARTS_P_PACKET_SIZE); return 0; case PM_REQ_GETSAMPLES: /* Get current play sample */ tmp = arts_stream_get(stream, ARTS_P_BUFFER_SIZE) - arts_stream_get(stream, ARTS_P_BUFFER_SPACE) + server_buffer; samples = output_count - tmp; if(samples < 0) samples = 0; if(!(dpm.encoding & PE_MONO)) samples >>= 1; if(dpm.encoding & PE_16BIT) samples >>= 1; *(int*)arg = samples; return 0; case PM_REQ_GETFILLABLE: /* Get fillable device queue size */ *(int*)arg = arts_stream_get(stream, ARTS_P_BUFFER_SPACE); return 0; case PM_REQ_GETFILLED: /* Get filled device queue size */ *(int*)arg = arts_stream_get(stream, ARTS_P_BUFFER_SIZE) - arts_stream_get(stream, ARTS_P_BUFFER_SPACE); return 0; /* The following are not (yet) implemented: */ case PM_REQ_FLUSH: /* Wait until playback is complete */ case PM_REQ_MIDI: /* Send MIDI event */ case PM_REQ_INST_NAME: /* Get instrument name */ return -1; case PM_REQ_OUTPUT_FINISH: /* Sent after last output_data */ case PM_REQ_PLAY_START: /* Called just before playing */ case PM_REQ_PLAY_END: /* Called just after playing */ return 0; } return -1; }
int AudioStopPlayback (int flush_output) { if (audio.playsock != NULL) { arts_close_stream(audio.playsock); audio.playsock = NULL; } return 0; }
int AudioStopRecording (void) { if (audio.recsock != NULL) { arts_close_stream(audio.recsock); audio.recsock = NULL; } return 0; }
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 ARTSC_CloseAudio(_THIS) { if ( mixbuf != NULL ) { SDL_FreeAudioMem(mixbuf); mixbuf = NULL; } if ( stream ) { arts_close_stream(stream); stream = 0; } }
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); } }
/* close the sound device and reopen with the requested rate */ void audio_set_rate(audio_dev_handle* handle, int rate) { handle->rate = rate; #ifdef HAS_ARTS if( handle->use_arts ) { arts_close_stream(handle->arts_handle); handle->arts_handle = arts_play_stream(rate, 8, handle->channels+1, "arts-whitenoise"); } else #endif { snd_pcm_close(handle->alsa_handle); alsa_init(handle); } }
/* configure the audio buffer sizes. The latency parameter is in millisec. */ void audio_set_latency(audio_dev_handle* handle, int latency) { handle->latency = latency; #ifdef HAS_ARTS if(handle->use_arts) { arts_close_stream(handle->arts_handle); handle->arts_handle = arts_play_stream(handle->rate, 8, handle->channels+1, "arts-whitenoise"); arts_stream_set(handle->arts_handle, ARTS_P_BUFFER_TIME, latency); } else #endif { snd_pcm_close(handle->alsa_handle); alsa_init(handle); } }
static void uninit(int immed) { arts_close_stream(stream); arts_free(); }
static int op_arts_close(void) { arts_close_stream(arts_stream); return 0; }