commit 185967030a0dc1ee4374b6b325846d5eb418a7f6 from: Omar Polo date: Fri Feb 18 08:31:56 2022 UTC support mono mp3 (mad) commit - 7fc831ea00ec72448ae3f54f24b047528daa61d8 commit + 185967030a0dc1ee4374b6b325846d5eb418a7f6 blob - 5ffd863eac37fe864762b9097dcebca55980af97 blob + 54e4fc551fa5328387a9796fb5c69c6d7fe2e7ee --- player_mad.c +++ player_mad.c @@ -42,6 +42,7 @@ struct buffer { const void *start; size_t length; int sample_rate; + int channels; }; static enum mad_flow @@ -56,6 +57,7 @@ input(void *d, struct mad_stream *stream) mad_stream_buffer(stream, buffer->start, buffer->length); buffer->length = 0; buffer->sample_rate = 0; + buffer->channels = 0; return MAD_FLOW_CONTINUE; } @@ -93,17 +95,14 @@ output(void *data, const struct mad_header *header, st 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); @@ -115,9 +114,11 @@ output(void *data, const struct mad_header *header, st 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)