diff --git a/aegisub/src/audio_provider_ffmpegsource.cpp b/aegisub/src/audio_provider_ffmpegsource.cpp index 930b9ad7b..b843e16af 100644 --- a/aegisub/src/audio_provider_ffmpegsource.cpp +++ b/aegisub/src/audio_provider_ffmpegsource.cpp @@ -173,6 +173,22 @@ void FFmpegSourceAudioProvider::LoadAudio(wxString filename) { default: throw agi::AudioProviderOpenError("unknown or unsupported sample format", 0); } + +#if FFMS_VERSION >= ((2 << 24) | (17 << 16) | (4 << 8) | 0) + if (channels > 1 || bytes_per_sample != 2) { + std::unique_ptr + opt(FFMS_CreateResampleOptions(AudioSource), FFMS_DestroyResampleOptions); + opt->ChannelLayout = FFMS_CH_FRONT_CENTER; + opt->SampleFormat = FFMS_FMT_S16; + + // Might fail if FFMS2 wasn't built with libavresample + if (!FFMS_SetOutputFormatA(AudioSource, opt.get(), nullptr)) { + channels = 1; + bytes_per_sample = 2; + float_samples = false; + } + } +#endif } void FFmpegSourceAudioProvider::FillBuffer(void *Buf, int64_t Start, int64_t Count) const {