diff -r c84cf270c54f -r 92ab7f8d0eab phoneapp/phoneringingtoneplayer/inc/cphonettsplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneringingtoneplayer/inc/cphonettsplayer.h Fri Mar 19 09:28:42 2010 +0200 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 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: +* +*/ + +#ifndef CPHONETTSPLAYER_H_ +#define CPHONETTSPLAYER_H_ + +// System includes +#include +#include + +// User includes +#include "cphonetimer.h" +#include "cphoneaudioplayer.h" +#include "mphoneaudioplayerobserver.h" + +// Forward declarations +class CPhoneRingingTone; +class CPhoneRingingtonePlayer; + +NONSHARABLE_CLASS(CPhoneTTSPlayer): public CBase, + public MPhoneAudioPlayerObserver + + { +public: + CPhoneTTSPlayer(CPhoneRingingtonePlayer* aRingingtonePlayer); + virtual ~CPhoneTTSPlayer(); + + /** + * Two-phased constructor. + * @return new instance. + */ + static CPhoneTTSPlayer* NewL(CPhoneRingingtonePlayer* aRingingtonePlayer); + + +public: + + /** + * Play TTS tone simultaneously with Personal or Default tones. + * This method does not command phone to play TTS immediately. Instead + * it registers a request to play TTS, when Personal or default tones + * are played. + * + * @since Series 60 3.0 + * @param aTextToSay Text, that should be pronounced by the + * Text-To-Speech engine. This is normal descriptor, no UTF-8 + * and no "(tts)" prefix + */ + void PlayTtsTone( + const TDesC& aTextToSay, + CPhoneRingingTone* aAudioVideoRingingTone ); + + void StopPlaying(); + + + /** + * Checks if TTS component should be played for the current ringtone + * playback and initializes the TTS playback. This method is to be + * called from within PlayXXXXTone methods + * @since Series 60 3.0 + * @param aRingingType ringing type + */ + void AddTtsPlaybackIfNeeded(); + + +private: // from MPhoneAudioPlayerObserver + /** + * Handle the error of audio file player. + */ + virtual void HandleAudioPlayerError( + TPhoneAudioPlayerErrorEvent aEvent, + TInt aError, + TInt aId = KPhoneAudioPlayerNotSpecified ); + + /** + * Handle audio player initialize complete. + */ + virtual void HandleAudioPlayerInitComplete( + TInt aId = KPhoneAudioPlayerNotSpecified ); + + /** + * Handle auido file playing complete successfully. + */ + virtual void HandlePlayingComplete( + TInt aId = KPhoneAudioPlayerNotSpecified ); + +private: + + /** + * Enumerates how many times TTs is played + * ESaidOnce -once + * ESaidTwice twice + */ + enum TTtsStatus + { + ESaidOnce, + ESaidTwice + }; + + /** + * Wrapper of DoHandleTtsDelayTimeout, that can be used as TCallback. + * Immediately passes control to DoHandleTtsDelayTimeout method. + * @since Series 60 3.0 + * @param object Object to call DoHandleTtsDelayTimeout() on, . + * instance of CPhoneRingingTonePlayer. + * @return KErrNone. + */ + static TInt HandleTtsDelayTimeout( TAny* object ); + + /** + * It is called after TTS delay elapsed. Starts playing TTS. + */ + void DoHandleTtsDelayTimeout(); + + /** + * Returns currently active player which is used with TTS player. + * @return pointer to CPhoneAudioPlayer. + */ + CPhoneAudioPlayer* GetCurrentlyActiveAudioPlayerWithTTs(); + + /** + * TTs cases only. Calculates new volume and ramptimes + * for Ascending TTS ringing case and normal TTS ringing case. + * @param aStatus -status of TTs player. + */ + void SolveNewVolumeAndRamptime( TTtsStatus aStatus ); + + /** + * Retarts currently active ringingtone player. + */ + void ReStartRingingTonePlayer(); + + /** + * Convert ringing type from PhoneAppEnging to the ringing type in + * CPhoneAudioPlayer. + * @param aRingingType the ringing type form PhoneAppEngine. + * @return ringing type of CPhoneAudioPlayer. + */ + CPhoneAudioPlayer::TRingingType ConvertRingingType( + TProfileRingingType aRingingType ); + +private: + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + +private: + + // Tts player. + CPhoneAudioPlayer* iTtsPlayer; + + // True if Tts is currently playing. Is different from + // iTonePlayingStatus, because TTS is played in + // parallel with the other tone types + TBool iTtsTonePlaying; + + // Index of the TTS delay that is "executed" currently or is to be + // "executed" after the current playing of the TTS tone. Is zero based + TInt iTtsDelayIndex; + + // True if TTS tone should be played when the next playing of the + // default or personal tone is fired. + TBool iTtsToneToBePlayed; + + // Timer, that tracks delays before playing TTS + CPhoneTimer* iTtsDelayTimer; + + // Number of times TTS tone should be played for the CURRENT ringtone + // If ringing tone is to be played just once, iTtsDelayCount == 1, + // otherwise iTtsDelayCount == KTtsDelayCount + TInt iTtsDelaysCount; + + // Counter for TTs timeouts + TInt iTTsTimeOutCounter; + + // RingingType for TtsPlayer only. + TProfileRingingType iTtsRingingType; + + // Volume of the text pronounced by the TTS engine + TInt iTtsVolume; + + CPhoneRingingtonePlayer* iRingingtonePlayer; + }; + +#endif /* CPHONETTSPLAYER_H_ */