commit - 7fc831ea00ec72448ae3f54f24b047528daa61d8
commit + 185967030a0dc1ee4374b6b325846d5eb418a7f6
blob - 5ffd863eac37fe864762b9097dcebca55980af97
blob + 54e4fc551fa5328387a9796fb5c69c6d7fe2e7ee
--- player_mad.c
+++ player_mad.c
const void *start;
size_t length;
int sample_rate;
+ int channels;
};
static enum mad_flow
mad_stream_buffer(stream, buffer->start, buffer->length);
buffer->length = 0;
buffer->sample_rate = 0;
+ buffer->channels = 0;
return MAD_FLOW_CONTINUE;
}
leftch = pcm->samples[0];
rightch = pcm->samples[1];
- if (buffer->sample_rate != pcm->samplerate) {
+ if (buffer->sample_rate != pcm->samplerate ||
+ buffer->channels != pcm->channels) {
buffer->sample_rate = pcm->samplerate;
- if (player_setup(pcm->samplerate, 2) == -1)
+ buffer->channels = pcm->channels;
+ if (player_setup(pcm->samplerate, pcm->channels) == -1)
err(1, "player_setrate");
}
- if (pcm->channels != 2) {
- printf("mono not supported!\n");
- return MAD_FLOW_STOP;
- }
-
for (i = 0, len = 0; i < nsamples; ++i) {
if (len+4 >= sizeof(buf)) {
sio_write(hdl, buf, len);
buf[len++] = sample & 0xff;
buf[len++] = (sample >> 8) & 0xff;
- sample = scale(*rightch++);
- buf[len++] = sample & 0xff;
- buf[len++] = (sample >> 8) & 0xff;
+ if (pcm->channels == 2) {
+ sample = scale(*rightch++);
+ buf[len++] = sample & 0xff;
+ buf[len++] = (sample >> 8) & 0xff;
+ }
}
if (len != 0)