mmfenh/enhancedaudioplayerutility/AudioPlayer/inc/S60AudioPlayer.h
changeset 0 71ca22bcf22a
--- /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 <e32std.h>
+#include <e32base.h>
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfaudio.h>
+#include <mmf/server/mmffile.h>
+#include <mmf/server/mmfdes.h>
+#include <mmfcontrollerimplementationuids.hrh>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include <mmf/common/mmfdrmcustomcommands.h>
+#include <mmf/common/mmfcontrollerframeworkbase.h>
+
+#include "S60AudioUtility.h"
+#include "MS60AudioPlayerObserver.h"
+#include "S60AudioSource.h"
+#include <MCustomInterface.h>
+
+
+//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