From 77fa0021d98154eb4781f55642663ac66bfdb637 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Thu, 12 Aug 2010 17:12:00 +0000 Subject: [PATCH] Enable the "interpolate" resampling method. Results are not as good as I expected, however. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38066 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../media/media-add-ons/mixer/AudioMixer.cpp | 2 +- src/add-ons/media/media-add-ons/mixer/MixerCore.cpp | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp index dd3b81f012..0866928ba5 100644 --- a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp +++ b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp @@ -1818,12 +1818,12 @@ AudioMixer::UpdateParameterWeb() dp = group->MakeDiscreteParameter(PARAM_ETC(70), B_MEDIA_RAW_AUDIO, "Resampling algorithm", B_INPUT_MUX); dp->AddItem(0, "Drop/repeat samples"); + dp->AddItem(2, "Linear interpolation"); // Note: The following code is outcommented on purpose // and is about to be modified at a later point /* dp->AddItem(1, "Drop/repeat samples (template based)"); - dp->AddItem(2, "Linear interpolation"); dp->AddItem(3, "17th order filtering"); */ group->MakeDiscreteParameter(PARAM_ETC(80), B_MEDIA_RAW_AUDIO, "Refuse output format changes", B_ENABLE); diff --git a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp index 4e33593d69..362847f170 100644 --- a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp +++ b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp @@ -20,6 +20,7 @@ #include #include "AudioMixer.h" +#include "Interpolate.h" #include "MixerInput.h" #include "MixerOutput.h" #include "MixerUtils.h" @@ -296,9 +297,15 @@ MixerCore::ApplyOutputFormat() fResampler = new Resampler * [fMixBufferChannelCount]; for (int i = 0; i < fMixBufferChannelCount; i++) { - // TODO create Interpolate instead of Resampler if the settings say so - fResampler[i] = new Resampler(media_raw_audio_format::B_AUDIO_FLOAT, - format.format); + switch (Settings()->ResamplingAlgorithm()) { + case 2: + fResampler[i] = new Interpolate( + media_raw_audio_format::B_AUDIO_FLOAT, format.format); + break; + default: + fResampler[i] = new Resampler( + media_raw_audio_format::B_AUDIO_FLOAT, format.format); + } } TRACE("MixerCore::OutputFormatChanged:\n");