diff --git a/MediaBrowser.Api/HttpHandlers/AudioHandler.cs b/MediaBrowser.Api/HttpHandlers/AudioHandler.cs index 311f8f9c79..c7adc9a583 100644 --- a/MediaBrowser.Api/HttpHandlers/AudioHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/AudioHandler.cs @@ -113,19 +113,59 @@ namespace MediaBrowser.Api.HttpHandlers audioTranscodeParams.Add("-ab " + bitrate.Value); } - if (AudioChannels.HasValue) + int? channels = GetNumAudioChannelsParam(); + + if (channels.HasValue) { - audioTranscodeParams.Add("-ac " + AudioChannels.Value); + audioTranscodeParams.Add("-ac " + channels.Value); } - if (AudioSampleRate.HasValue) + int? sampleRate = GetSampleRateParam(); + + if (sampleRate.HasValue) { - audioTranscodeParams.Add("-ar " + AudioSampleRate.Value); + audioTranscodeParams.Add("-ar " + sampleRate.Value); } audioTranscodeParams.Add("-f " + outputFormat); return "-i \"" + LibraryItem.Path + "\" -vn " + string.Join(" ", audioTranscodeParams.ToArray()) + " -"; } + + /// + /// Gets the number of audio channels to specify on the command line + /// + private int? GetNumAudioChannelsParam() + { + // If the user requested a max number of channels + if (AudioChannels.HasValue) + { + // Only specify the param if we're going to downmix + if (AudioChannels.Value < LibraryItem.Channels) + { + return AudioChannels.Value; + } + } + + return null; + } + + /// + /// Gets the number of audio channels to specify on the command line + /// + private int? GetSampleRateParam() + { + // If the user requested a max value + if (AudioSampleRate.HasValue) + { + // Only specify the param if we're going to downmix + if (AudioSampleRate.Value < LibraryItem.SampleRate) + { + return AudioSampleRate.Value; + } + } + + return null; + } } }