From bb042178b3296cacc11a53c4ce9b7f3cc6732270 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 27 Sep 2014 19:21:29 +0200 Subject: Switch to libaudioio. Fix playback stuttering. --- src/audiobackend-alsa.cc | 73 +++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 48 deletions(-) (limited to 'src/audiobackend-alsa.cc') diff --git a/src/audiobackend-alsa.cc b/src/audiobackend-alsa.cc index b4401ca..5f3db40 100644 --- a/src/audiobackend-alsa.cc +++ b/src/audiobackend-alsa.cc @@ -27,85 +27,62 @@ #include "audiobackend-alsa.h" #include +#include #include "mediaconfig.h" AudioBackendAlsa::AudioBackendAlsa(const char *device) { - // - // LibAO: - // - ao_initialize(); - - ao_sample_format sf; - memset(&sf, 0, sizeof(sf)); - sf.bits = 16; - sf.rate = SAMPLERATE; - sf.channels = 1; - sf.byte_format = AO_FMT_NATIVE; - - dev = ao_open_live(ao_default_driver_id(), &sf, 0); - - // - // LibAudioIn: - // int err; - ai = ai_init(&err, device, "", SAMPLERATE, 1); - if(ai == NULL || err) { + aio = aio_init(&err, "default", NULL, device, NULL, SAMPLERATE, 1); + if(aio == NULL || err) { printf("ai_init: %d (device: %s)\n", err, device); exit(1); return; } - int srate = ai_get_samplerate(&err, ai); + int srate = aio_get_samplerate(aio); if(err) printf("ai_get_samplerate: %d\n", err); if(srate != SAMPLERATE) { printf("Samplerate: %d\n", srate); } + + printf("buffer size: %d\n", aio_get_buffer_size(aio)); } AudioBackendAlsa::~AudioBackendAlsa() { - // - // LibAO: - // - ao_close(dev); - ao_shutdown(); - - // - // LibAudioIn: - // - if(ai == NULL) { - printf("ai_err: no handle\n"); - return; - } - - int err; - ai_close(&err, ai); + int err = aio_close(aio); if(err) printf("ai_err: %d\n", err); } int AudioBackendAlsa::read(char *pcm, size_t maxsize) { - // - // LibAudioIn: - // - if(ai == NULL) { + if(aio == NULL) { printf("ai_err: no handle\n"); return 0; } - int err; - int ret = ai_read(&err, ai, pcm, maxsize); - if(err) printf("ai_read: %d\n", err); + int ret = aio_read(aio, pcm, maxsize); + if(ret < 0) printf("ai_read: %d\n", ret); return ret; } int AudioBackendAlsa::write(const char *pcm, size_t size) { - // - // LibAO: - // - ao_play(dev, (char *)pcm, size); - return 0; + if(aio == NULL) { + printf("aio_err: no handle\n"); + return 0; + } + + int ret = aio_write(aio, pcm, size); + if(ret < 0) printf("ai_write: %d\n", ret); + return ret; +} + +int AudioBackendAlsa::getBufferSize() +{ + int ret = aio_get_buffer_size(aio); + if(ret > 0) return ret; + return AudioBackend::getBufferSize(); } -- cgit v1.2.3