diff -r 000000000000 -r b8ed18f6c07b mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteagents/src/audioplayagent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteagents/src/audioplayagent.cpp Thu Oct 07 22:34:12 2010 +0100 @@ -0,0 +1,492 @@ +// Copyright (c) 2005-2009 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: +// Part of the MVS Agents for TechView +// + +#include "audioplayagent.h" +#include +#include + + +/** +Constructs and initialises a new instance of the MVS audio player utility. + +The function leaves if the MVS audio player utility object cannot be created. + +No callback notification is made upon completion of NewL(). + +@param aObserver + Class to receive state change events from play agent. + +@return A pointer to the new MVS audio player utility object. +*/ + +EXPORT_C CMVSAudioPlayAgent* CMVSAudioPlayAgent::NewL(MMVSClientObserver& aObserver) + { + CMVSAudioPlayAgent* self = new(ELeave) CMVSAudioPlayAgent(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +void CMVSAudioPlayAgent::ConstructL() + { + iPlayer = CMdaAudioPlayerUtility::NewL(*this); + User::LeaveIfError(iFileLogger.Connect()); + iFileLogger.CreateLog(_L("LogMVSappUi"),_L("LogFile.txt"),EFileLoggingModeAppend); + } + + +EXPORT_C CMVSAudioPlayAgent::~CMVSAudioPlayAgent() + { + delete iPlayer; + if(iFileLogger.Handle()) + { + iFileLogger.CloseLog(); + iFileLogger.Close(); + } + } + + +CMVSAudioPlayAgent::CMVSAudioPlayAgent(MMVSClientObserver& aObserver):iObserver(aObserver) + { + iObserver.UpdateStateChange(ENotReady, KErrNone); + } + +EXPORT_C void CMVSAudioPlayAgent::OpenFileL(TDesC& aFile) + { + iPlayer->Close();//Close any existing clip + iState = EAudioOpening; + iObserver.UpdateStateChange(EAudioOpening, KErrNone); + iPlayer->OpenFileL(aFile); + } + +EXPORT_C void CMVSAudioPlayAgent::OpenFileL(TMMSource& /*aSource*/) + { + + } + +/** +Begins playback of the initialised audio sample at the current volume +and priority levels. + +Sets the current state of the system to EAudioPlaying +When playing of the audio sample is complete, successfully or +otherwise, the callback function +CMVSAudioPlayAgent::MapcPlayComplete() is called, which inturn +sets the state to EAudioOpened. +*/ +EXPORT_C void CMVSAudioPlayAgent::Play() + { + //must be in open or paused states + if((iState == EAudioOpened)||(iState == EAudioPaused)||(iState == EAudioStopped)) + { + iPlayer->Play(); + iState = EAudioPlaying; + iObserver.UpdateStateChange(EAudioPlaying, KErrNone); + } + } + + +/** +Pauses the playback of the audio clip. +and updates the current state to EAudioPaused. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::Pause() + { + if(iState == EAudioPlaying) + { + TInt err = iPlayer->Pause(); + if ( err != KErrNone) + { + return err; + } + iState = EAudioPaused; + iObserver.UpdateStateChange(EAudioPaused, KErrNone); + } + return KErrNone; + } + + +/** +Stops playback of the audio sample as soon as possible. + +Sets the current state to EAudioStopped +If the audio sample is playing, playback is stopped as soon as +possible. If playback is already complete, nothing further happens as +a result of calling this function. +*/ +EXPORT_C void CMVSAudioPlayAgent::Stop() + { + if(iState == EAudioPlaying || iState == EAudioPaused) + { + iPlayer->Stop(); + iState = EAudioStopped; + iObserver.UpdateStateChange(iState, KErrNone); + } + } + +/** +Added for future implimentation. Currently not supported +*/ +EXPORT_C void CMVSAudioPlayAgent::Forward() + { + // future implementation + } + + +/** +Added for future implimentation. Currently not supported +*/ +EXPORT_C void CMVSAudioPlayAgent::Rewind() + { + // future implementation + } + + +/* +Initialisation completion callback for the MVS play agent +*/ +void CMVSAudioPlayAgent::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/) + { + if(aError == KErrNone) + { + iState = EAudioOpened; + iFileLogger.Write(_L("Audio Opened ")) ; + } + else + { + iState = ENotReady; //init failed so from opening to NotReady + iFileLogger.Write(_L("MapcInitComplete: Audio Not Ready")) ; + } + iObserver.UpdateStateChange(iState, aError); + } + + +/* +Play back completion callback for the MVS play agent +*/ +void CMVSAudioPlayAgent::MapcPlayComplete(TInt aError) + { + if(aError == KErrNone) + { + iState = EAudioOpened; + iFileLogger.Write(_L("MapcPlayComplete:Audio Opened Play Complete")) ; + } + + iObserver.UpdateStateChange(iState, aError); + } + +void CMVSAudioPlayAgent::MarncResourceAvailable(TUid /*aNotificationEventId*/, const TDesC8& /*aNotificationData*/) + { + } + + +/** +Returns the current playback volume + +@param aVolume + A volume value between 0 and the value returned by MaxVolume(). + +@return One of the global error codes. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::GetVolume(TInt& aVolume) + { + return iPlayer->GetVolume(aVolume); + } + + +/** +Returns an integer representing the maximum volume. + +This is the maximum value which can be passed to +CMdaAudioPlayerUtility::SetVolume(). This value is platform +independent, but is always greater than or equal to one. + +The function raises a CMdaAudioPlayerUtility 1 panic if the +audio player utility is not initialised. + +@return The maximum volume setting. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::MaxVolume() + { + return iPlayer->MaxVolume(); + } + + +/** +Returns the duration of the audio sample. + +The function raises a CMdaAudioPlayerUtility 1 panic if the audio +player utility is not initialised. + +@return The duration in microseconds. +*/ +EXPORT_C TTimeIntervalMicroSeconds CMVSAudioPlayAgent::Duration() + { + return iPlayer->Duration(); + } + + +/** +Changes the current playback volume to a specified value. + +The volume can be changed before or during playback and is effective +immediately. The volume can be set to any value between zero (mute) and +the maximum permissible volume (determined using MaxVolume()).Also the +period over which the volume level is to rise smoothly from nothing to +the normal volume level,is given by the ramp up time. + + +The function raises a CMdaAudioPlayerUtility 1 panic if +the audio player utility is not initialised. + +@param aVolume + The volume setting. This can be any value from zero to + the value returned by a call to + CMVSAudioPlayAgent::MaxVolume(). + Setting a zero value mutes the sound. Setting the + maximum value results in the loudest possible sound. + +@param aRampDuration + The period over which the volume is to rise. A zero + value causes the audio sample to be played at the + normal level for the full duration of the playback. A + value which is longer than the duration of the audio + sample means that the sample never reaches its normal + volume level. + +*/ +EXPORT_C void CMVSAudioPlayAgent::SetVolume(TInt aVolume, TTimeIntervalMicroSeconds aRamp) + { + iPlayer->SetVolume(aVolume); + iPlayer->SetVolumeRamp(aRamp); + } + + +/** +Returns the current playback position in microseconds from the start of the clip. + +@param aPosition + The current time position in microseconds from the start of the clip to the current + play position. + +@return the current playback position in microseconds. +*/ +EXPORT_C TTimeIntervalMicroSeconds CMVSAudioPlayAgent::GetPosition(TTimeIntervalMicroSeconds& aPosition) + { + return iPlayer->GetPosition(aPosition); + } + + +/** +Sets the current playback position in microseconds from the start of the clip. + +@param aPosition + The position to move to in microseconds from the start of the clip. +*/ +EXPORT_C void CMVSAudioPlayAgent::SetPosition(TTimeIntervalMicroSeconds aPosition) + { + iPlayer->SetPosition(aPosition); + } + + +/** +Returns the current playback balance. + +@param aBalance + A value between KMMFBalanceMaxLeft + and KMMFBalanceMaxRight. + +@return An error code indicating if the function call was successful. KErrNone on success, otherwise + another of the system-wide error codes. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::GetBalance(TInt& aBalance) + { + return iPlayer->GetBalance(aBalance); + } + + +/** +Sets the current playback balance. + +@param aBalance + A value between KMMFBalanceMaxLeft + and KMMFBalanceMaxRight. The default value is + KMMFBalanceCenter. + +@return "TInt" An error code indicating if the function call was successful. KErrNone on success, otherwise + another of the system-wide error codes. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::SetBalance(TInt aBalance) + { + return iPlayer->SetBalance(aBalance); + } + + +/** +Sets the number of times the audio sample is to be repeated during the +playback operation. + +A period of silence can follow each playing of the sample. The audio +sample can be repeated indefinitely. + +@param aNoRepeats + The number of times the audio sample, together with + the trailing silence, is to be repeated. If this is + set to KMdaRepeatForever, then the audio + sample, together with the trailing silence, is + repeated indefinitely or until Stop() is + called. If this is set to zero, then the audio sample + is not repeated. +@param aDelay + The time interval of the training silence. +*/ +EXPORT_C void CMVSAudioPlayAgent::SetRepeats(TInt aNoRepeats, TTimeIntervalMicroSeconds aDelay) + { + iPlayer->SetRepeats(aNoRepeats, aDelay); + } + + +/** +Set the current playback window + +@param aStart + Start time of playback window relative to start of file +@param aEnd + End time of playback window relative to start of file + +@return "TInt" One of the global error codes +*/ +EXPORT_C TInt CMVSAudioPlayAgent::SetPlayWindow(TTimeIntervalMicroSeconds aStart, TTimeIntervalMicroSeconds aEnd) + { + return iPlayer->SetPlayWindow(aStart,aEnd); + } + + +/** +Clear the current playback window + +@return "TInt" One of the global error codes +*/ +EXPORT_C TInt CMVSAudioPlayAgent::ClearPlayWindow() + { + return iPlayer->ClearPlayWindow(); + } + + +/** +Sets the priority for playback. This is used to arbitrate between multiple +objects trying to access a single sound device. + +@param aPriority + The priority level to apply, EMdaPriorityMin client can be interrupted by any + other client, EMdaPriorityNormal client can only be interrupted by a client + with a higher priority or EMdaPriorityMax client cannot be interrupted by other + clients. +@param aPreference + The quality/time preferences to apply. + +@return An error code indicating if the function call was successful. KErrNone on success, otherwise + another of the system-wide error codes. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::SetPriority(TInt aPriority, TMdaPriorityPreference aPreference) + { + return iPlayer->SetPriority(aPriority,aPreference); + } + + +/** +Closes the current audio clip (allowing another clip to be opened) +Sets the current state to ENotReady +*/ +EXPORT_C void CMVSAudioPlayAgent::Reset() + { + iPlayer->Close(); + iState = ENotReady; + iObserver.UpdateStateChange(ENotReady, KErrNone); + } + + +EXPORT_C void CMVSAudioPlayAgent::SetAutoPauseResume(TBool /*aEnable*/) + { + } + + +/** +Returns an array containing the MetaDataEntry for the given audio clip + +@param aMetaArray + The meta data Array + +@leave Leaves with KErrNotFound if the meta data entry does not exist or + KErrNotSupported if the controller does not support meta data + information for this format. Other errors indicate more general system + failure. +*/ +EXPORT_C void CMVSAudioPlayAgent::GetMetaArrayL(RPointerArray& aMetaArray) + { + //Reset the meta array + aMetaArray.Reset(); + //Find how many elements there are to obtain + TInt noMetaEntries = 0; + TInt err = iPlayer->GetNumberOfMetaDataEntries(noMetaEntries); + if(err == KErrNone) + { + //Add the elements, one at a time. + for(TInt counter = 0; counter < noMetaEntries; ++counter) + { + aMetaArray.Append(iPlayer->GetMetaDataEntryL(counter)); + } + } + User::LeaveIfError(err); + } + + +/** +Returns the bit rate of the audio clip. + +@param aBitRate + Bit rate of the audio clip. + +@return One of the global error codes. +*/ +EXPORT_C TInt CMVSAudioPlayAgent::GetBitRate(TUint& aBitRate) + { + return iPlayer->GetBitRate(aBitRate); + } + + +/** +Returns the controller implementation information associated with the current controller. + +@return The controller implementation structure +*/ +EXPORT_C const CMMFControllerImplementationInformation& CMVSAudioPlayAgent::GetControllerInfoL() + { + return iPlayer->ControllerImplementationInformationL(); + } + + +/** +Returns the current state of the CMVSAudioPlayAgent. + +@return The current state, iState. +*/ +EXPORT_C TMVSState CMVSAudioPlayAgent::GetState() + { + return iState; + }