diff -r 000000000000 -r 71ca22bcf22a mmfenh/enhancedaudioplayerutility/AudioPlayer/inc/S60AudioPlayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/enhancedaudioplayerutility/AudioPlayer/inc/S60AudioPlayer.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,455 @@ +/* +* 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: Base class definition of the S60 Audio Player +* +*/ + +#ifndef __CS60AUDIOPLAYER_H__ +#define __CS60AUDIOPLAYER_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "S60AudioUtility.h" +#include "MS60AudioPlayerObserver.h" +#include "S60AudioSource.h" +#include + + +//FORWARD DECLARATION +class CPlayerEventDispatcher; + +// CLASS DEFINITIONS + +/** +Mixin class to allow notification that the timed silence has finished. +*/ +class MRepeatTrailingSilenceTimerObs + { +public: + virtual void RepeatTrailingSilenceTimerComplete() = 0; + }; + + +/** +CTimer-based active object that waits the requested time before notifying its observer. +*/ +class CRepeatTrailingSilenceTimer : public CTimer + { + public: + static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs); + void RunL(); + private: + CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs); + private: + MRepeatTrailingSilenceTimerObs& iObs; + }; + + +/** +* This class defines the common S60 audio player functions. +* +* @lib S60AudioPlayer.lib +* @since 3.1 +*/ +class CS60AudioPlayer: public CBase, + public MMMFControllerEventMonitorObserver, + public MRepeatTrailingSilenceTimerObs, + public MMMFFindAndOpenControllerObserver, + public MCustomInterface + { + + public: // Constructors and destructor + + IMPORT_C static CS60AudioPlayer* NewL( MS60AudioPlayerObserver& aObserver, + TInt aPriority = EMdaPriorityNormal, + TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality); + + /** + * Destructor + */ + virtual ~CS60AudioPlayer(); + + public: // New functions + + /** + Begins playback of the initialised audio sample at the current volume + and priority levels. + + When playing of the audio sample is complete, successfully or + otherwise, the callback function + MS60AudioPlayerObserver::StateChanged() is + called. + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt Play(); + + /** + Stops playback of the audio sample as soon as possible. + + 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. The callback function + MS60AudioPlayerObserver::StateChanged() is called. + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt Stop(); + + /** + * + * Pauses playback of the audio clip + * @returns One of the system-wide error codes + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt Pause(); + + /** + 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 aPref + 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. + + @since 3.1 + + @capability MultimediaDD + For applications that do not have the MultimediaDD capability, any supplied priority level + (aPriority) or priority preference (aPref) will be ignored. + */ + IMPORT_C virtual TInt SetPriority(TInt aPriority, TMdaPriorityPreference aPref); + + /** + * + * Sets the FastForward step for the file + * + * @param "TTimeIntervalMicroSeconds aStep" + * The duration to move forward in microseconds from the current position in the file. + * If aPosition is greater than the file duration, the position is set to the + * end of the file. + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt FastForward(TTimeIntervalMicroSeconds& aStep); + + /** + * + * Sets the Rewind step for the file + * + * @param "TTimeIntervalMicroSeconds aStep" + * The duration to move backward in microseconds from the current position in the file. + * If aPosition is greater than the file duration, the position is set to the + * beginning of the file. + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt Rewind(TTimeIntervalMicroSeconds& aStep); + + /** + 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. + + @return The maximum volume setting. + + @since 3.1 + */ + IMPORT_C virtual TInt GetMaxVolume(); + + /** + Changes the current playback volume to a specified value. + + The volume can be changed before or during playback and is effective + immediately. + + @param aVolume + The volume setting. This can be any value from zero to + the value returned by a call to + S60AudioPlayer::GetMaxVolume(). + Setting a zero value mutes the sound. Setting the + maximum value results in the loudest possible sound. + + @return A System Wide Error code + + @since 3.1 + @lib "S60Audio.lib"*/ + IMPORT_C virtual TInt SetVolume(TInt aVolume); + + /** + Returns the current playback volume. + + @param aVolume + A value between 0 and the maximum volume settings returned by GetMaxVolume(). + + @return An error code indicating if the function call was successful. KErrNone on success, otherwise + another of the system-wide error codes. + + @since 3.1 + */ + IMPORT_C virtual TInt GetVolume(TInt& aVolume); + + + /** + Returns the duration of the audio sample in microseconds. + + @return The duration of the sample in microseconds. + + @since 3.1 + */ + IMPORT_C virtual TTimeIntervalMicroSeconds GetDuration(); + + /** + Returns the bit rate of the audio clip. + + @param aBitRate + Bit rate of the audio clip. + + @return One of the global error codes. + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TUint GetBitRate(); + + /** + * + * Returns the current playback position in microseconds + * + * @retval "TTimeIntervalMicroSeconds& aPosition" + * The current time position in microseconds from the start of the file + * @returns "TInt" One of the global error codes + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual TTimeIntervalMicroSeconds GetPosition(); + + /** + * + * Set the current playback position in microseconds from the start of the file + * + * @param "TTimeIntervalMicroSeconds& aPosition" + * The position to move to in microseconds from the start of the file. + * If aPosition is negative, the position is set to the start of the file. + * If aPosition is greater than the file duration, the position is set to the + * end of the file. + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual void SetPosition(TTimeIntervalMicroSeconds& aPosition); + + /** + * + * Set the current playback window + * + * @param "const TTimeIntervalMicroSeconds& aStart" + * Start time of playback window relative to start of file + * @param "const TTimeIntervalMicroSeconds& aEnd" + * End time of playback window relative to start of file + * + * @returns "TInt" One of the global error codes + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual void SetPlayWindow(TTimeIntervalMicroSeconds& aStart, TTimeIntervalMicroSeconds& aEnd); + + /** + * + * Gets the current playback window + * + * @param "const TTimeIntervalMicroSeconds& aStart" + * Start time of playback window relative to start of file + * @param "const TTimeIntervalMicroSeconds& aEnd" + * End time of playback window relative to start of file + * + * @returns "TInt" One of the global error codes + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + + IMPORT_C virtual void GetPlayWindow(TTimeIntervalMicroSeconds& aStart, TTimeIntervalMicroSeconds& aEnd); + + /** + * + * Clear the current playback window + * + * @returns "TInt" One of the global error codes + * + * @since 3.1 + * @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt ResetPlayWindow(); + + /** + 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 aRepeatNumberOfTimes + 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 aTrailingSilence + The time interval of the trailing silence in microseconds. + + @since 3.1 + */ + IMPORT_C virtual void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); + + /** + Returns the current playback balance + + @return A value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt GetBalance(); + + /** + Sets the current playback balance + + @param aBalance + A value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight. The default value is + KMMFBalanceCenter. + + @return One of the global error codes. + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TInt SetBalance(TInt& aBalance); + + /** + Returns the current Seeking Capability + + @return ETrue/EFalse depending on the Seeking Support + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TBool IsSeekingSupported(); + + /** + Returns the current Random Seeking Capability + + @return ETrue/EFalse depending on the Random Seeking Support + + @since 3.1 + @lib "S60Audio.lib" + */ + IMPORT_C virtual TBool IsRandomSeekingSupported(); + + /** + * Add a data source to be used as input to the audio player. + * @since 3.1 + */ + IMPORT_C virtual void AddDataSource( CS60AudioBaseSource& aDataSource ); + + + // from MCustomInterface + + IMPORT_C virtual TAny* CustomInterface(TUid aInterfaceId); + + protected: + + + // from MMMFControllerEventMonitorObserver + virtual void HandleEvent(const TMMFEvent& aEvent); + + // from MRepeatTrailingSilenceTimerObs + virtual void RepeatTrailingSilenceTimerComplete(); + + // from MMMFFindAndOpenControllerObserver + virtual void MfaocComplete(TInt& aError, RMMFController* aController, TUid aControllerUid, + TMMFMessageDestination* aSourceHandle, TMMFMessageDestination* aSinkHandle); + + private: + + /** + * Private C++ constructor for this class. + * @since 3.1 + * @return - + */ + CS60AudioPlayer(MS60AudioPlayerObserver& aObserver, TInt aPriority, TMdaPriorityPreference aPref); + + void ConstructL(); + + TInt DoPlay(); + + protected: // Data + + MS60AudioPlayerObserver& iObserver; + + TPlayerState iState; + + CS60AudioBaseSource* iSource; + + MAudioLoadingObserver* iLoadingObserver; + MMMFAudioResourceNotificationCallback* iAudioResourceNotificationCallBack; + + CMMFFindAndOpenController* iFindAndOpenController; + CMMFControllerEventMonitor* iControllerEventMonitor; + + TTimeIntervalMicroSeconds iTrailingSilence; + CRepeatTrailingSilenceTimer* iRepeatTrailingSilenceTimer; + + CPlayerEventDispatcher* iDispatcher; + TMMFPrioritySettings iPrioritySettings; + RMMFController iController; + RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands; + + // Playback indicators + TTimeIntervalMicroSeconds iPosition; + TUid iControllerUid; + TMMFMessageDestination iSourceHandle; + + }; + +#endif // __CS60AUDIOPLAYER_H__ + +// End of File