williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __MDAAUDIOTONEPLAYER_H__ williamr@2: #define __MDAAUDIOTONEPLAYER_H__ williamr@2: williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class CMdaServer; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: The state of the audio tone utility. williamr@2: */ williamr@2: enum TMdaAudioToneUtilityState williamr@2: { williamr@2: /** The audio tone utility has not been prepared to play a tone. williamr@2: */ williamr@2: EMdaAudioToneUtilityNotReady=0, williamr@2: /** The audio tone utility has been prepared to play a tone and is ready. williamr@2: */ williamr@2: EMdaAudioToneUtilityPrepared, williamr@2: /** The audio tone utility is currently playing a tone. williamr@2: */ williamr@2: EMdaAudioToneUtilityPlaying, williamr@2: /** The audio tone utility is currently paused. williamr@2: This state is only reached if underlying DevSound implementations supports resume. williamr@2: */ williamr@2: EMdaAudioToneUtilityPaused williamr@2: }; williamr@2: williamr@2: const TInt KMdaInfiniteDurationDTMFToneOnLength = -1; williamr@2: const TInt KMdaAudioToneRepeatForever = -2; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: An interface to a set of audio tone player callback functions. williamr@2: williamr@2: The class is a mixin and is intended to be inherited by the client williamr@2: class which is observing the audio tone playing operation. The williamr@2: functions encapsulated by this class are called when specific events williamr@2: occur in the process of preparing to play a tone and during the williamr@2: playing of a tone. A reference to this object is passed as a williamr@2: parameter when constructing an audio tone player utility, using the williamr@2: CMdaAudioToneUtility interface. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: class MMdaAudioToneObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Defines required client behaviour when an attempt to configure the williamr@2: audio tone player utility has completed, successfully or otherwise. williamr@2: williamr@2: @param aError williamr@2: KErrNone if successful. One of the system williamr@2: wide error codes if the attempt failed. The possible williamr@2: values depend on the EPOC platform. williamr@2: */ williamr@2: virtual void MatoPrepareComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Defines required client behaviour when the tone playing operation has williamr@2: completed, successfully or otherwise. williamr@2: williamr@2: @param aError williamr@2: KErrNone if successful. One of the system williamr@2: wide error codes if the attempt failed. The possible williamr@2: values depend on the EPOC platform. williamr@2: */ williamr@2: virtual void MatoPlayComplete(TInt aError) = 0; williamr@2: }; williamr@2: williamr@2: williamr@2: class MMdaAudioTonePlayStartObserver williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Defines required client behaviour when the tone playing operation has williamr@2: started, successfully or otherwise. williamr@2: williamr@2: @param aError williamr@2: KErrNone if successful. One of the system williamr@2: wide error codes if the attempt failed. The possible williamr@2: values depend on the EPOC platform. williamr@2: */ williamr@2: virtual void MatoPlayStarted(TInt aError) = 0; williamr@2: }; williamr@2: williamr@2: williamr@2: class CMMFMdaAudioToneUtility; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Generates tones on an audio capable EPOC device. williamr@2: williamr@2: The class offers an interface for generating tones on all audio williamr@2: capable EPOC devices. williamr@2: williamr@2: To use the tone utility: williamr@2: williamr@2: 1. Create an instance by calling NewL(). williamr@2: williamr@2: 2. Call the appropriate PrepareToPlay variant for the required tone type williamr@2: and wait for the callback indicating success. williamr@2: williamr@2: 3. Call Play and either wait for the callback to indicate completion, williamr@2: or call CancelPlay to end playback early. williamr@2: williamr@2: 4. Delete the instance. williamr@2: williamr@2: It is possible to call Play before calling any PrepareToPlay variant. This williamr@2: will result in a default fixed sequence tone being played. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: class CMdaAudioToneUtility : public CBase, williamr@2: public MMMFClientUtility williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C static CMdaAudioToneUtility* NewL(MMdaAudioToneObserver& aObserver, CMdaServer* aServer = NULL); williamr@2: williamr@2: IMPORT_C static CMdaAudioToneUtility* NewL(MMdaAudioToneObserver& aObserver, CMdaServer* aServer, williamr@2: TInt aPriority, williamr@4: TInt aPref = EMdaPriorityPreferenceTimeAndQuality); williamr@2: williamr@2: ~CMdaAudioToneUtility(); williamr@2: williamr@2: virtual TMdaAudioToneUtilityState State(); williamr@2: williamr@2: virtual TInt MaxVolume(); williamr@2: williamr@2: virtual TInt Volume(); williamr@2: williamr@2: virtual void SetVolume(TInt aVolume); williamr@2: williamr@4: virtual void SetPriority(TInt aPriority, TInt aPref); williamr@2: williamr@2: virtual void SetDTMFLengths(TTimeIntervalMicroSeconds32 aToneLength, williamr@2: TTimeIntervalMicroSeconds32 aToneOffLength, williamr@2: TTimeIntervalMicroSeconds32 aPauseLength); williamr@2: williamr@2: virtual void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); williamr@2: williamr@2: virtual void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); williamr@2: williamr@2: virtual TInt FixedSequenceCount(); williamr@2: williamr@2: virtual const TDesC& FixedSequenceName(TInt aSequenceNumber); williamr@2: williamr@2: virtual void PrepareToPlayTone(TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration); williamr@2: williamr@2: virtual void PrepareToPlayDTMFString(const TDesC& aDTMF); williamr@2: williamr@2: virtual void PrepareToPlayDesSequence(const TDesC8& aSequence); williamr@2: williamr@2: virtual void PrepareToPlayFileSequence(const TDesC& aFileName); williamr@2: williamr@2: virtual void PrepareToPlayFixedSequence(TInt aSequenceNumber); williamr@2: williamr@2: virtual void CancelPrepare(); williamr@2: williamr@2: virtual void Play(); williamr@2: williamr@2: virtual void CancelPlay(); williamr@2: williamr@2: IMPORT_C TInt Pause(); williamr@2: williamr@2: IMPORT_C TInt Resume(); williamr@2: williamr@2: IMPORT_C void SetBalanceL(TInt aBalance=KMMFBalanceCenter); williamr@2: williamr@2: IMPORT_C TInt GetBalanceL(); williamr@2: williamr@2: IMPORT_C void PrepareToPlayDualTone(TInt aFrequencyOne, TInt aFrequencyTwo, const TTimeIntervalMicroSeconds& aDuration); williamr@2: williamr@2: IMPORT_C void PrepareToPlayFileSequence(RFile& aFile); williamr@2: williamr@2: IMPORT_C TAny* CustomInterface(TUid aInterfaceId); williamr@2: williamr@2: IMPORT_C void RegisterPlayStartCallback(MMdaAudioTonePlayStartObserver& aObserver); williamr@2: williamr@2: protected: williamr@2: /** williamr@2: This member is internal and not intended for use. williamr@2: */ williamr@2: CMMFMdaAudioToneUtility* iProperties; williamr@2: }; williamr@2: williamr@2: williamr@2: #endif