--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpserviceplugins/audioeffects/src/mpxaudioeffectengine.cpp Tue Aug 31 15:12:29 2010 +0300
@@ -0,0 +1,438 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Engine class that uses the Effects API and saves changes.
+*
+*/
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <CustomCommandUtility.h>
+#include <mpxplaybackutility.h>
+#include <mpxplaybackmessage.h>
+
+#include <EnvironmentalReverbUtility.h>
+#include <EnvironmentalReverbUtilityData.h>
+#include <StereoWideningBase.h>
+#include <StereoWideningData.h>
+#include <BassBoostBase.h>
+#include <BassBoostData.h>
+#include <LoudnessBase.h>
+#include <LoudnessData.h>
+#include <AudioEqualizerUtility.h>
+#include <EqualizerConstants.h>
+#include <mpxlog.h>
+
+#include "mpxaudioeffectengine.h"
+
+// Music setting
+const TUid KMPCenRepSettingsFeature = {0x10207C92};
+const TUint32 KMPCenRepSettingPresetIdKey = 0x00000004;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::NewL()
+// Standard 2-Phased Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMPXAudioEffectEngine* CMPXAudioEffectEngine::NewL(
+ CMdaAudioPlayerUtility* aPlayer )
+ {
+ CMPXAudioEffectEngine* self = new( ELeave ) CMPXAudioEffectEngine( aPlayer );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::CMPXAudioEffectEngine()
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CMPXAudioEffectEngine::CMPXAudioEffectEngine(CMdaAudioPlayerUtility* aPlayer)
+ :iMdaPlayer(aPlayer)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::~CMPXAudioEffectEngine()
+// Virtual destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMPXAudioEffectEngine::~CMPXAudioEffectEngine()
+ {
+ if (iProp)
+ {
+ delete iProp;
+ }
+ DestroyAudioEffect();
+ }
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::ConstructL()
+// Standard Second Phased Constructor
+// -----------------------------------------------------------------------------
+//
+void CMPXAudioEffectEngine::ConstructL()
+ {
+ iProp = new(ELeave) CMPXAudioEffectProperties();
+ MPX_TRAPD( err, iProp->LoadFromFileL() ); //Loads saved settings if available
+ if( err != KErrNone )
+ {
+ MPX_DEBUG1("CMPXAudioEffectEngine::ConstructL -- reset save to file");
+ iProp->Reset();
+ iProp->SaveToFileL();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::SetBalanceL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetBalanceL()
+ {
+ iProp->LoadFromFileL();
+ if(iMdaPlayer)
+ {
+ TInt currentBalance;
+ TInt err = iMdaPlayer->GetBalance(currentBalance);
+ if( err !=KErrNone )
+ {
+ User::Leave(KErrNotSupported);
+ }
+ // don't set non-changed values:
+ if( iProp->Balance() != currentBalance )
+ {
+ err = iMdaPlayer->SetBalance(iProp->Balance());
+ if( err !=KErrNone )
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::SetReverberationL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetReverberationL()
+ {
+#ifdef _REVERB
+ if(!iReverbEffect)
+ {
+ //Effect enabled immediately, cmdUtil ownership passed into new object
+ MPX_TRAPD(error, iReverbEffect =
+ CEnvironmentalReverbUtility::NewL(*iMdaPlayer));
+ if(!error)
+ {
+ SetReverberationL();
+ }
+ }
+
+ iProp->LoadFromFileL();
+
+ TBuf16<32> reverbation;
+ TBuf16<32> reverbation2;
+
+ switch( iProp->Reverb() ) //aIndex ranges always from 0 to 7
+ {
+ case 1: _LIT( KRevName, "Alley" );
+ reverbation.Append( KRevName );
+ break;
+ case 2: _LIT( KRevName2, "Bathroom" );
+ reverbation.Append( KRevName2 );
+ break;
+ case 3: _LIT( KRevName3, "Underwater" );
+ reverbation.Append( KRevName3 );
+ break;
+ case 4: _LIT( KRevName4, "Small room" );
+ reverbation.Append( KRevName4 );
+ break;
+ case 5: _LIT( KRevName5, "Medium room" );
+ reverbation.Append( KRevName5 );
+ break;
+ case 6: _LIT( KRevName6, "Large room" );
+ reverbation.Append( KRevName6 );
+ break;
+ case 7: _LIT( KRevName7, "Large hall" );
+ reverbation.Append( KRevName7 );
+ break;
+ default: break;
+ }
+ TUint32 count;
+ count = iReverbEffect->NumberOfPreDefinedPresets();
+ TArray<TEfEnvironmentalReverbUtilityPreset> array = iReverbEffect->Presets();
+
+ if( 0 != iProp->Reverb() )
+ {
+ TInt i = 0;
+
+ do //compare descriptors and apply preset if descriptors match
+ {
+ reverbation2.Copy( array[i].iPresetName );
+ if( reverbation2.Compare(reverbation) == 0 )
+ {
+ iReverbEffect->ApplyPresetL( i );
+ i = count;
+ }
+ i++;
+ }while( i < count );
+ }
+ else
+ {
+ iReverbEffect->DisableEnvironmentalReverbL();
+ }
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::SetStereoWideningL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetStereoWideningL()
+ {
+#ifdef _STEREO
+ iProp->LoadFromFileL();
+
+ if(iProp->Stereo())
+ {
+ if(!iStereoEffect) // If stereo widening is ON and not constructed
+ {
+ TUint stereoLevel = 30;
+ // cmdUtil ownership passed into new object
+ MPX_TRAPD(error,
+ iStereoEffect = CStereoWidening::NewL(*iMdaPlayer,
+ EFalse, stereoLevel));
+ if(error)
+ {
+ iStereoEffect = NULL;
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+ if ( !iStereoEffect->IsEnabled() )
+ {
+ iStereoEffect->EnableL();
+ TUint8 level = 30;
+ iStereoEffect->SetStereoWideningLevelL( level );
+ iStereoEffect->ApplyL();
+ }
+
+ }
+ else
+ {
+ if (iStereoEffect && iStereoEffect->IsEnabled() ) // If audio effects was not on, then no need to disable
+ {
+ iStereoEffect->DisableL();
+ }
+ }
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::SetBassBoostL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetBassBoostL()
+ {
+#ifdef _BASSBOOST
+ iProp->LoadFromFileL();
+ if(iProp->BassBoost())
+ {
+ if (!iBassBoostEffect)
+ {
+ // cmdUtil ownership passed into new object
+ MPX_TRAPD(error,
+ iBassBoostEffect = CBassBoost::NewL(*iMdaPlayer,
+ iProp->BassBoost()));
+ if (error)
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+ iBassBoostEffect->EnableL();
+ }
+ else
+ {
+ if (iBassBoostEffect)
+ {
+ iBassBoostEffect->DisableL();
+ }
+ }
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CMPXAudioEffectEngine::SetLoudnessL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetLoudnessL()
+ {
+#ifdef _LOUDNESS
+ iProp->LoadFromFileL();
+ if(iProp->Loudness())
+ {
+ if(!iLoudnessEffect)
+ {
+ // cmdUtil ownership passed into new object
+ MPX_TRAPD(error,
+ iLoudnessEffect = CLoudness::NewL(*iMdaPlayer,
+ iProp->Loudness()));
+ if(error)
+ {
+ iLoudnessEffect = NULL;
+ User::Leave(KErrNotSupported);
+ }
+ else
+ {
+ }
+ }
+
+ if( !iLoudnessEffect->IsEnabled() )
+ {
+ iLoudnessEffect->EnableL();
+ }
+ }
+ else
+ {
+ if( iLoudnessEffect && iLoudnessEffect->IsEnabled() )
+ {
+ iLoudnessEffect->DisableL();
+ }
+ }
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// Sets the equalizer
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::SetEqualizerL()
+ {
+ MPX_DEBUG1("CMPXAudioEffectEngine::SetEqualizerL <--");
+
+ // Create the effect
+ //
+ if( !iEqualizerEffect )
+ {
+ iEqualizerEffect = CAudioEqualizerUtility::NewL(*iMdaPlayer);
+ }
+
+ // Get equalizer preset id from cenrep
+ //
+ TInt presetId( KEqualizerPresetNone );
+ TRAP_IGNORE(
+ {
+ CRepository* repository = CRepository::NewL( KMPCenRepSettingsFeature );
+ repository->Get( KMPCenRepSettingPresetIdKey, presetId );
+ delete repository;
+ repository = NULL;
+ } );
+
+ // Translate preset ID to index
+ //
+ MPX_DEBUG1("CMPXAudioEffectEngine::SetEqualizerL = finding preset index");
+
+ TInt index( KErrNotFound );
+ if ( iEqualizerEffect && presetId != KEqualizerPresetNone )
+ {
+ TArray<TEfAudioEqualizerUtilityPreset> presetArray =
+ iEqualizerEffect->Presets();
+
+ TBool found( EFalse );
+ for ( TInt i = 0; i < presetArray.Count() && found == EFalse; i++ )
+ {
+ if ( presetArray[i].iPresetNameKey ==
+ static_cast<TUint32>( presetId ) )
+ {
+ found = ETrue;
+ index = i;
+ }
+ }
+ }
+ MPX_DEBUG2("CMPXAudioEffectEngine::SetEqualizerL effect index: %i", index);
+
+ // Apply preset index index or disable if not found
+ //
+ if ( KErrNotFound != index )
+ {
+ iEqualizerEffect->ApplyPresetL( index );
+ }
+ else
+ {
+ iEqualizerEffect->DisableEqualizerL();
+ }
+
+ MPX_DEBUG1("CMPXAudioEffectEngine::SetEqualizerL -->");
+ }
+
+// ---------------------------------------------------------------------------
+// CreateAudioEffectsL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::CreateAudioEffectsL()
+ {
+ SetEqualizerL();
+ SetStereoWideningL();
+ SetBalanceL();
+ SetLoudnessL();
+ }
+
+// -----------------------------------------------------------------------------
+// Destroy audio effect
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMPXAudioEffectEngine::DestroyAudioEffect()
+ {
+ if (iReverbEffect)
+ {
+ delete iReverbEffect; //effect automatically disabled
+ iReverbEffect = NULL;
+ }
+
+ if (iStereoEffect)
+ {
+ delete iStereoEffect; //effect automatically disabled
+ iStereoEffect = NULL;
+ }
+ if (iBassBoostEffect)
+ {
+ delete iBassBoostEffect; //effect automatically disabled
+ iBassBoostEffect = NULL;
+ }
+ if (iLoudnessEffect)
+ {
+ delete iLoudnessEffect; //effect automatically disabled
+ iLoudnessEffect = NULL;
+ }
+ if (iEqualizerEffect)
+ {
+ delete iEqualizerEffect; //effect automatically disabled
+ iEqualizerEffect = NULL;
+ }
+ }
+
+//End of File