From 8f6d048817905716bdb3e9b28bd6d016637fc556 Mon Sep 17 00:00:00 2001 From: Tjienta Vara Date: Mon, 8 Jan 2018 07:34:40 +0100 Subject: [PATCH] linux-pulseaudio: Default sample format float32le This pull request changes the fallback sample format for pulse-audio to from PA_SAMPLE_S16LE to PA_SAMPLE_FLOAT32LE. The pulseaudio plugin can handle the following sample format: * PA_SAMPlE_U8 * PA_SAMPLE_S16LE * PA_SAMPLE_S32LE * PA_SAMPLE_FLOAT32LE When an audio device advertises itself as another format, the pulseaudio-plugin will ask pulse audio to convert to the fallback sample format. The fallback PA_SAMPLE_S16LE is not ideal when your audio interface advertises as PA_SAMPLE_S24LE since the conversion will lose precision. With PA_SAMPLE_FLOAT32LE there is no precision loss and it is also equals OBS's internal format. --- libobs/audio-monitoring/pulse/pulseaudio-output.c | 2 +- plugins/linux-pulseaudio/pulse-input.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs/audio-monitoring/pulse/pulseaudio-output.c b/libobs/audio-monitoring/pulse/pulseaudio-output.c index 44da2cf4c..6b0d00129 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-output.c +++ b/libobs/audio-monitoring/pulse/pulseaudio-output.c @@ -238,7 +238,7 @@ static void pulseaudio_source_info(pa_context *c, const pa_source_info *i, pa_sample_format_t format = i->sample_spec.format; if (pulseaudio_to_obs_audio_format(format) == AUDIO_FORMAT_UNKNOWN) { - format = PA_SAMPLE_S16LE; + format = PA_SAMPLE_FLOAT32LE; blog(LOG_INFO, "Sample format %s not supported by OBS," "using %s instead for recording", diff --git a/plugins/linux-pulseaudio/pulse-input.c b/plugins/linux-pulseaudio/pulse-input.c index b53b0b9dd..1749c3284 100644 --- a/plugins/linux-pulseaudio/pulse-input.c +++ b/plugins/linux-pulseaudio/pulse-input.c @@ -220,7 +220,7 @@ static void pulse_source_info(pa_context *c, const pa_source_info *i, int eol, pa_sample_format_t format = i->sample_spec.format; if (pulse_to_obs_audio_format(format) == AUDIO_FORMAT_UNKNOWN) { - format = PA_SAMPLE_S16LE; + format = PA_SAMPLE_FLOAT32LE; blog(LOG_INFO, "Sample format %s not supported by OBS," "using %s instead for recording",