#include <stdlib.h>
#include <string.h>
#include <sched.h>
+#include <errno.h>
#include "../include/asoundlib.h"
#define LATENCY_LIMIT 8192 /* in bytes */
params.channel = SND_PCM_CHANNEL_PLAYBACK;
params.mode = SND_PCM_MODE_STREAM;
params.format.interleave = 1;
- params.format.format = SND_PCM_SFMT_S16_LE;
+ params.format.format = SND_PCM_SFMT_S16_BE; // S16_LE;
params.format.voices = 2;
params.format.rate = 44100;
params.start_mode = SND_PCM_START_GO;
if (*queue > LATENCY_LIMIT)
return -1;
again = 0;
+ params.channel = SND_PCM_CHANNEL_PLAYBACK;
params.buf.stream.queue_size = *queue;
if ((err = snd_pcm_plugin_params(phandle, ¶ms)) < 0) {
printf("Playback params error: %s\n", snd_strerror(err));
psetup.mode = SND_PCM_MODE_STREAM;
psetup.channel = SND_PCM_CHANNEL_PLAYBACK;
if ((err = snd_pcm_plugin_setup(phandle, &psetup)) < 0) {
- printf("Playback params error: %s\n", snd_strerror(err));
+ printf("Playback setup error: %s\n", snd_strerror(err));
exit(0);
}
bzero(&csetup, sizeof(csetup));
csetup.mode = SND_PCM_MODE_STREAM;
csetup.channel = SND_PCM_CHANNEL_CAPTURE;
if ((err = snd_pcm_plugin_setup(chandle, &csetup)) < 0) {
- printf("Capture params error: %s\n", snd_strerror(err));
+ printf("Capture setup error: %s\n", snd_strerror(err));
exit(0);
}
if (psetup.buf.stream.queue_size > *queue) {
printf("%s:\n", str);
printf(" status = %i\n", status.status);
printf(" position = %u\n", status.scount);
- *rstatus = status;
+ if (rstatus)
+ *rstatus = status;
}
void setscheduler(void)
long r;
r = snd_pcm_plugin_read(handle, buf, len);
+ // printf("read = %li\n", r);
+ // showstat(handle, SND_PCM_CHANNEL_CAPTURE, NULL);
return r;
}
while (len > 0) {
r = snd_pcm_plugin_write(handle, buf, len);
+ if (r == -EAGAIN)
+ continue;
+ // printf("write = %li\n", r);
if (r < 0)
return r;
+ // showstat(handle, SND_PCM_CHANNEL_PLAYBACK, NULL);
buf += r;
len -= r;
}