diff --git a/NEWS b/NEWS index 9a7a69ec9..9b9ceadef 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,6 @@ ver 0.19.19 (not yet released) +* output + - pulse: support 32 bit, 24 bit and floating point playback ver 0.19.18 (2016/08/05) * decoder diff --git a/src/output/plugins/PulseOutputPlugin.cxx b/src/output/plugins/PulseOutputPlugin.cxx index a9a84bc24..230114559 100644 --- a/src/output/plugins/PulseOutputPlugin.cxx +++ b/src/output/plugins/PulseOutputPlugin.cxx @@ -574,12 +574,30 @@ pulse_output_open(AudioOutput *ao, AudioFormat &audio_format, return false; } - /* MPD doesn't support the other pulseaudio sample formats, so - we just force MPD to send us everything as 16 bit */ - audio_format.format = SampleFormat::S16; + /* Use the sample formats that our version of PulseAudio and MPD + have in common, otherwise force MPD to send 16 bit */ pa_sample_spec ss; - ss.format = PA_SAMPLE_S16NE; + + switch (audio_format.format) { + case SampleFormat::FLOAT: + ss.format = PA_SAMPLE_FLOAT32NE; + break; + case SampleFormat::S32: + ss.format = PA_SAMPLE_S32NE; + break; + case SampleFormat::S24_P32: + ss.format = PA_SAMPLE_S24_32NE; + break; + case SampleFormat::S16: + ss.format = PA_SAMPLE_S16NE; + break; + default: + audio_format.format = SampleFormat::S16; + ss.format = PA_SAMPLE_S16NE; + break; + } + ss.rate = audio_format.sample_rate; ss.channels = audio_format.channels;