summaryrefslogtreecommitdiff
path: root/src/audiobackend-alsa.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/audiobackend-alsa.cc')
-rw-r--r--src/audiobackend-alsa.cc73
1 files changed, 25 insertions, 48 deletions
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 <memory.h>
+#include <stdio.h>
#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();
}