javauis/amms_qt/ammscontrol/audioeffect/src/cammsreverbcontrolgroup.cpp
changeset 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_qt/ammscontrol/audioeffect/src/cammsreverbcontrolgroup.cpp	Fri May 14 15:47:24 2010 +0300
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2005-2007 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:  Group for reverb controls
+*
+*/
+
+
+// INCLUDE FILES
+#include <EnvironmentalReverbUtility.h>
+#include <EnvironmentalReverbUtilityData.h>
+#include <logger.h>
+
+#include "cammsreverbcontrolgroup.h"
+#include "cammsbasereverbcontrol.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CAMMSReverbControlGroup* CAMMSReverbControlGroup::NewLC()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::NewLC +");
+
+    CAMMSReverbControlGroup* self = new(ELeave) CAMMSReverbControlGroup;
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::NewLC -");
+
+    return self;
+}
+
+// Destructor
+CAMMSReverbControlGroup::~CAMMSReverbControlGroup()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::~");
+
+    delete iEmptyEnvironmentalReverbUtility;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::ReverbLevel
+// Gets the gain level of the reverberation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+TInt CAMMSReverbControlGroup::ReverbLevel()
+{
+    return iReverbLevel;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::ReverbTime
+// Gets the reverberation time, as set either explicitly via
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+TInt CAMMSReverbControlGroup::ReverbTime()
+{
+    return iReverbTime;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::SetReverbLevelL
+// Sets the gain level of the reverberation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::SetReverbLevelL(TInt aLevel)
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::SetReverbLevelL");
+
+    __ASSERT_DEBUG(aLevel <= 0, User::Invariant());
+
+    // Set the level between the accepted limits [iReverbMinLevel,
+    // iReverbMaxLevel].
+    TInt reverbLevel = Min(aLevel, iReverbMaxLevel);
+    reverbLevel = Max(reverbLevel, iReverbMinLevel);
+
+    // Set reverb level to the controls.
+    TInt count = ControlCount();
+    for (TInt i = 0; i < count; i++)
+    {
+        TypeSafeControl(i)->SetReverbLevelL(reverbLevel);
+    }
+
+    // Invalidate current preset and save the new reverb level
+    iPresetIndex = -1;
+    iReverbLevel = reverbLevel;
+
+    LOG4( EJavaMMAPI, EInfo, "CAMMSReverbControlGroup::SetReverbLevelL, levels: %d, %d, %d %d",
+        aLevel, iReverbMinLevel, iReverbMaxLevel, reverbLevel);
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::SetReverbTimeL
+// Sets the reverberation time of the reverb
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::SetReverbTimeL(TInt aTime)
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::SetReverbTimeL +");
+
+    __ASSERT_DEBUG(aTime >= 0, User::Invariant());
+
+    // Set reverb time to controls.
+    TInt count = ControlCount();
+    for (TInt i = 0; i < count; i++)
+    {
+        TypeSafeControl(i)->SetReverbTimeL(aTime);
+    }
+
+    // Invalidate current preset and save new reverb time
+    iPresetIndex = -1;
+    iReverbTime = aTime;
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::SetReverbTimeL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::TypeSafeControl
+// Gets control. Ownership is not tranferred.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+CAMMSBaseReverbControl*
+CAMMSReverbControlGroup::TypeSafeControl(TInt aIndex) const
+{
+    return static_cast<CAMMSBaseReverbControl*>(Control(aIndex));
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::ClassName
+// Returns class name that identifies this control group.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+const TDesC16& CAMMSReverbControlGroup::ClassName()
+{
+    return KAMMSReverbControlClassName;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::NotifyPlayerAddedL
+// Called by when a new player is added
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::NotifyPlayerAddedL(
+    CMMAPlayer *aPlayer,
+    CMMAControl* aControl)
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::NotifyPlayerAddedL +");
+
+    CAMMSEffectControlGroup::NotifyPlayerAddedL(aPlayer, aControl);
+
+    CAMMSBaseReverbControl* control =
+        static_cast<CAMMSBaseReverbControl*>(aControl);
+
+    // if the preset is not valid, set reverb level and time to the added
+    // control
+    if (iPresetIndex < 0)
+    {
+        control->SetReverbLevelL(iReverbLevel);
+        control->SetReverbTimeL(iReverbTime);
+    }
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::NotifyPlayerAddedL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::PresetChangedL
+// Called when the current preset changes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::PresetChangedL()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PresetChangedL +");
+
+    TInt count = ControlCount();
+
+    LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PresetChangedL, controls=%d",
+              count);
+
+    // Ask preset data from the first control if exists. If not, ask the
+    // data from the empty group utility.
+    if (count > 0)
+    {
+        CAMMSBaseReverbControl* control = TypeSafeControl(0);
+
+        iReverbTime = control->ReverbTime();
+        iReverbLevel = control->ReverbLevel();
+        iReverbMinLevel = control->MinReverbLevel();
+        iReverbMaxLevel = control->MaxReverbLevel();
+    }
+    else
+    {
+        LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PresetChangedL, index=%d",
+                  iPresetIndex);
+
+        __ASSERT_DEBUG(iPresetIndex >= 0, User::Invariant());
+
+        // Create empty group utilities for getting preset data.
+        PrepareEmptyGroupUtilitiesL();
+
+        // Set the preset to the empty group utility.
+        iEmptyEnvironmentalReverbUtility->GetPresetL(iPresetIndex);
+
+        CEnvironmentalReverb& audioEffect =
+            iEmptyEnvironmentalReverbUtility->EnvironmentalReverb();
+
+
+        iReverbTime = audioEffect.DecayTime();
+        iReverbLevel =
+            audioEffect.ReflectionsLevel() + audioEffect.RoomLevel();
+
+        TInt32 minLevel;
+        TInt32 maxLevel;
+        audioEffect.ReverbLevelRange(minLevel, maxLevel);
+
+        iReverbMinLevel = minLevel;
+        iReverbMaxLevel = maxLevel;
+
+        // Delete empty group utilities in order to save memory.
+        DeleteEmptyGroupUtilities();
+    }
+
+    LOG4( EJavaAMMS, EInfo, "CAMMSReverbControlGroup::PresetChangedL, values: %d, %d, %d %d",
+        iReverbTime, iReverbLevel, iReverbMinLevel, iReverbMaxLevel);
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PresetChangedL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::InitializeL
+// Finish initialization (after the 1st player is added)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::InitializeL()
+{
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::PrepareEmptyGroupUtilitiesL
+// Creates utilities that can be used to obtain preset names and preset data.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::PrepareEmptyGroupUtilitiesL()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PrepareEmptyGroupUtilitiesL +");
+
+    if (!iEmptyEnvironmentalReverbUtility)
+    {
+        CAMMSEffectControlGroup::PrepareEmptyGroupUtilitiesL();
+
+        iEmptyEnvironmentalReverbUtility =
+            CEnvironmentalReverbUtility::NewL(*iEmptyPlayerUtility);
+    }
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::PrepareEmptyGroupUtilitiesL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::DeleteEmptyGroupUtilities
+// Deletes utilities that are used to obtain preset names and preset data.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::DeleteEmptyGroupUtilities()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::DeleteEmptyGroupUtilities +");
+
+    if (iEmptyPlayerUtility)
+    {
+        delete iEmptyEnvironmentalReverbUtility;
+        iEmptyEnvironmentalReverbUtility = NULL;
+
+        CAMMSEffectControlGroup::DeleteEmptyGroupUtilities();
+    }
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::DeleteEmptyGroupUtilities -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::GetPresetNamesL
+// Gets list of preset names available.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::GetPresetNamesL(
+    CDesCArray& aPresetNames)
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::GetPresetNamesL +");
+
+    // Create empty group utilities for getting preset names.
+    PrepareEmptyGroupUtilitiesL();
+
+    TArray< TEfEnvironmentalReverbUtilityPreset > presetNames =
+        iEmptyEnvironmentalReverbUtility->Presets();
+
+
+    TInt presetCount = presetNames.Count();
+
+    for (TInt i = 0; i < presetCount; i++)
+    {
+        aPresetNames.AppendL(presetNames[ i ].iPresetName);
+    }
+
+    // Delete empty group utilities in order to save memory.
+    DeleteEmptyGroupUtilities();
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::GetPresetNamesL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::CAMMSReverbControlGroup
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+CAMMSReverbControlGroup::CAMMSReverbControlGroup()
+        : CAMMSEffectControlGroup(KAMMSBaseReverbControl)
+{
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSReverbControlGroup::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CAMMSReverbControlGroup::ConstructL()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::ConstructL +");
+
+    CAMMSEffectControlGroup::BaseConstructL();
+
+    TRAPD(err, SetPresetL(KAMMSBaseDefaultReverbPreset));
+
+    // The following code prevents build warning.
+    if (err != KErrNone)
+    {
+        ELOG1( EJavaAMMS, "AMMS::CAMMSReverbControlGroup::ConstructL, err %d", err);
+    }
+
+    // Ignore the error so that using MMA and AMMS is possible.
+    // Error is visible so that "smallroom" preset is not activated.
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSReverbControlGroup::ConstructL -");
+}
+
+//  End of File