diff -r cfea66083b62 -r baacf668fe89 phoneapp/phoneringingtoneplayer/src/cphonettsplayer.cpp --- a/phoneapp/phoneringingtoneplayer/src/cphonettsplayer.cpp Mon Oct 04 16:06:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,502 +0,0 @@ -/* -* 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: -* -*/ - -#include "cphonettsplayer.h" -#include "cphoneringingtone.h" -#include "cphoneringingtoneplayer.h" -#include "phonelogger.h" -#include - -CPhoneTTSPlayer::CPhoneTTSPlayer(CPhoneRingingtonePlayer* aRingingtonePlayer): -iRingingtonePlayer (aRingingtonePlayer) - { - - - } - -CPhoneTTSPlayer::~CPhoneTTSPlayer() - { - delete iTtsDelayTimer; - delete iTtsPlayer; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CPhoneTTSPlayer* CPhoneTTSPlayer::NewL(CPhoneRingingtonePlayer* aRingingtonePlayer) - { - CPhoneTTSPlayer* self = - new ( ELeave ) CPhoneTTSPlayer(aRingingtonePlayer); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::ConstructL() - { - iTtsDelayTimer = CPhoneTimer::NewL(); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::PlayTtsTone( - const TDesC& aTextToSay, - CPhoneRingingTone* aAudioVideoRingingTone ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::PlayTtsTone()" ); - //__PHONELOG2( EBasic, EPhoneControl, "CPhoneTTSPlayer::PlayTtsTone - aVolume(%d), aRingingType(%d)", - // aVolume, aRingingType ); - - if ( iTtsPlayer ) - { - delete iTtsPlayer; - iTtsPlayer = NULL; - } - - //Set ringingtype for Tts. - iTtsRingingType = aAudioVideoRingingTone->RingingType(); - iTtsVolume = aAudioVideoRingingTone->Volume(); - - // TTS should be a bit louder, than main component. - // No need to check for overflows, they are handled in SET_PHONE_VOLUME macro. - - TPtrC ttsHeader( KPhoneTtsHeader ); - HBufC* preparedString = - HBufC::New( aTextToSay.Length() + ttsHeader.Length() ); - - if ( preparedString ) - { - TPtr pPreparedString = preparedString->Des(); - pPreparedString.Append( ttsHeader ); - pPreparedString.Append( aTextToSay ); - - __PHONELOG1( - EBasic, - EPhoneControl, - "CPhoneTTSPlayer::PlayTtsTone - about to say %S", - &pPreparedString ); - - TRAPD( - error, - iTtsPlayer = CPhoneAudioPlayer::NewTtsL( - *preparedString, - KAudioPriorityPhoneCall, - KAudioPrefTextToSpeechCallHardCoded, - *this, - CPhoneRingingtonePlayer::EPlayerTts ) ); - if( error == KErrNone ) - { - // To be played when default or personal tone will be played - iTtsToneToBePlayed = ETrue; - } - __PHONELOG2( - EBasic, - EPhoneControl, - "CPhoneTTSPlayer::PlayTtsTone - error(%d), iTtsPhoneToBePlayed(%d)", - error, - iTtsToneToBePlayed ); - - delete preparedString; - } - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::StopPlaying() - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::StopPlaying()" ); - - iTtsToneToBePlayed = EFalse; - iTTsTimeOutCounter = 0; - iTtsDelayTimer->Cancel(); - if ( iTtsPlayer ) - { - iTtsPlayer->StopPlaying(); - delete iTtsPlayer; - iTtsPlayer = NULL; - } - } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::HandleAudioPlayerError( - TPhoneAudioPlayerErrorEvent /*aEvent*/, - TInt /*aError*/, - TInt /*aId*/ ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::HandleAudioPlayerError()" ); - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::HandleAudioPlayerInitComplete( TInt /*aId*/ ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::HandleAudioPlayerInitComplete()" ); - // This is called from CPhoneAudioPlayer - we do not - // want to delete instances from which this method - // is called. - - if( iTtsToneToBePlayed ) - { - // Start TTS timer just before "normal ringtone component" starts - // playing, i.e. after init completed. - if ( iTtsDelayIndex < iTtsDelaysCount ) - { - if ( !iTtsDelayTimer->IsActive() ) - { - // There are TTS iterations to be played yet. - iTtsDelayTimer->After( - KPhoneTtsDelays[iTtsDelayIndex], - TCallBack( HandleTtsDelayTimeout, this ) ); - } - } - } - } - -// ----------------------------------------------------------------------------- -// CPhoneTTSPlayer::HandlePlayingComplete -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::HandlePlayingComplete( TInt aId ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete()" ); - // This is called from CPhoneAudioPlayer - we do not - // want to delete instances from which this method - // is called. - - /* __PHONELOG2( - EBasic, - EPhoneControl, - "CPhoneTTSPlayer::HandlePlayingComplete - aId(%d), iRingingType(%d)", - aId, - iRingingType );*/ - __PHONELOG2( - EBasic, - EPhoneControl, - "CPhoneTTSPlayer::HandlePlayingComplete - iTtsToneToBePlayed(%d), iTtsDelayIndex(%d)", - iTtsToneToBePlayed, - iTtsDelayIndex ); - - if ( aId == CPhoneRingingtonePlayer::EPlayerTts ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - resuming after TTS" ); - - // TTS playing complete, normal tone player should volume up. - if ( ( iTtsToneToBePlayed ) && ( ++iTtsDelayIndex < iTtsDelaysCount ) ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - resuming after TTS first time" ); - //Callers name is said once. increase tone player volume. - SolveNewVolumeAndRamptime( ESaidOnce ); - - if ( !iTtsDelayTimer->IsActive() ) - { - // There are TTS iterations to be played yet. - iTtsDelayTimer->After( KPhoneTtsDelays[iTtsDelayIndex], - TCallBack( HandleTtsDelayTimeout,this ) ); - } - } - else - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - resuming after TTS second time" ); - SolveNewVolumeAndRamptime( ESaidTwice ); - } - - // No further processing. All TTS player-related events are not - // "real" ringtone playing completions. - return; - } - //Case: RingintonePlayer has completed playing with following set: ring once and - // TTS is activated - if ( iTtsRingingType == EProfileRingingTypeRingingOnce && - iTtsToneToBePlayed ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - ring once and TTS" ); - if ( iTtsDelayIndex < iTtsDelaysCount ) - { - ReStartRingingTonePlayer(); - //Do not destroy player yet. Return. - return; - } - } - //Case: RingintonePlayer has completed playing with following set: ringing - //and TTS is activated. We need to restart ringintoneplayer and new TTS - //iterations are required. - else if ( iTtsRingingType == EProfileRingingTypeRinging && iTtsToneToBePlayed ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - ringing and TTS" ); - if ( iTtsDelayIndex == iTtsDelaysCount ) - { - //Case: Ringingtype is EProfileRingingTypeRinging. New TTS - //iterations are required. - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::HandlePlayingComplete - need to restart TTS sequence" ); - //TTS has completed its iterations,set index to zero. - iTtsDelayIndex = 0; - if ( !iTtsDelayTimer->IsActive() ) - { - //Restart TTS sequence - iTtsDelayTimer->After( - KPhoneTtsDelays[iTtsDelayIndex], - TCallBack( HandleTtsDelayTimeout, this ) ); - } - } - - ReStartRingingTonePlayer(); - //Do not destroy player yet. Return - return; - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CPhoneTTSPlayer::HandleTtsDelayTimeout( TAny* object ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::HandleTtsDelayTimeout()" ); - static_cast( object )-> - DoHandleTtsDelayTimeout(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::DoHandleTtsDelayTimeout() - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::DoHandleTtsDelayTimeout()" ); - __PHONELOG2( EBasic, EPhoneControl, "CPhoneTTSPlayer::DoHandleTtsDelayTimeout - iTtsRingingType(%d), iTTsTimeOutCounter(%d)", - iTtsRingingType, iTTsTimeOutCounter ); - - CPhoneAudioPlayer* currPlayer = NULL; - currPlayer = GetCurrentlyActiveAudioPlayerWithTTs(); - - if ( !currPlayer ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::DoHandleTtsDelayTimeout - null current player" ); - return; - } - TInt volume( 0 ); - //Ascending case. TTs player needs to be ascending. - if ( iTtsRingingType == EProfileRingingTypeAscending ) - { - //Volume needs to be different in different ascending steps - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::DoHandleTtsDelayTimeout - play ascending" ); - if ( !iTTsTimeOutCounter ) - { - //We are saying callers name for the first time in ascending mode. - //Say callers name by volume level KTtsVolumeMin. - volume = KTtsVolumeMin; - - iTtsPlayer->Play( - ConvertRingingType( EProfileRingingTypeRingingOnce ), - volume, - iTtsToneToBePlayed ); - } - else - { - //Checks the case that ringingtone is very quiet. Then do not play - //TTS too loud - volume = iTtsVolume < KTtsVolumeMin ? KTtsVolumeMin : KTtsVolumeAscendingRepeat; - - //We are saying callers name for the second time in ascending mode. - //Say callers name by volume level KTtsVolumeAscendingRepeat and decrease current players volume - //to KPlayerVolumeAscendingRepeat. RampTime is zero - currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, 0 ); - iTtsPlayer->Play( - ConvertRingingType( EProfileRingingTypeRingingOnce ), - volume, - iTtsToneToBePlayed ); - } - - } - else //Normal ringing case. - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::DoHandleTtsDelayTimeout - play normal" ); - currPlayer->SetNewVolumeAndRamptime( iTtsVolume-5, 0 ); - iTtsPlayer->Play( - ConvertRingingType( EProfileRingingTypeRingingOnce ), - iTtsVolume, - iTtsToneToBePlayed ); - } - - iTTsTimeOutCounter++; - } - -// ----------------------------------------------------------------------------- -// CPhoneTTSPlayer::AddTtsPlaybackIfNeeded -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::AddTtsPlaybackIfNeeded() - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::AddTtsPlaybackIfNeeded()" ); - if ( iTtsToneToBePlayed ) - { - iTtsDelayIndex = 0; - iTtsDelaysCount = KPhoneTtsDelaysCount; - } - } - -// ----------------------------------------------------------------------------- -// CPhoneTTSPlayer::SolveNewVolumeAndRamptime -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::SolveNewVolumeAndRamptime( TTtsStatus aStatus ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime()" ); - - CPhoneAudioPlayer* currPlayer = NULL; - currPlayer = GetCurrentlyActiveAudioPlayerWithTTs(); - if ( !currPlayer ) - { - __PHONELOG( EBasic, EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime - null current player" ); - return; - } - TInt ramptime( 0 ); - //Here is handled the cases when Callers name is said. Sequence is: - //3 sec. tone + name + 4 sec. tone + name +the tone until the end. - switch ( aStatus ) - { - case ESaidOnce: - if ( iTtsRingingType == EProfileRingingTypeAscending ) - { - //The ramptime could be ( 4 )* KPhoneTtsAscendingStep but now - //we are setting this to 0 because when Say callers name is said - //for first time: play ringing tone on level 3 for four secs. - ramptime = 0; - __PHONELOG1( EBasic, EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime - said once ascending - ramptime(%d)", - ramptime ); - currPlayer->SetNewVolumeAndRamptime( KPlayerVolumeAscendingRepeat, ramptime ); - } - else - { - //Normal ringingtone case. Adjust volume back to profile level. - __PHONELOG1( EBasic, EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime - said once normal - ramptime(%d)", - ramptime ); - currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 ); - } - break; - - case ESaidTwice: - if ( iTtsRingingType == EProfileRingingTypeAscending ) - { - TInt vol = iTtsVolume; - if ( vol > KPlayerVolumeAscendingRepeat ) - { - vol = vol - KTtsVolumeAscendingDecrease; - } - - //TTS playing complete for second time. increase tone player volume. - ramptime = ( vol )*KPhoneTtsAscendingStep; - __PHONELOG1( EBasic, EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime - said twice ascending - ramptime(%d)", - ramptime ); - currPlayer->SetNewVolumeAndRamptime( iTtsVolume, ramptime ); - } - else - { - //Normal ringingtone case. Adjust volume back to profile level. - __PHONELOG1( EBasic, EPhoneControl, "CPhoneTTSPlayer::SolveNewVolumeAndRamptime - said twice normal - ramptime(%d)", - ramptime ); - currPlayer->SetNewVolumeAndRamptime( iTtsVolume, 0 ); - } - break; - - default: - break; - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CPhoneAudioPlayer* -CPhoneTTSPlayer::GetCurrentlyActiveAudioPlayerWithTTs() - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::GetCurrentlyActiveAudioPlayerWithTTs()" ); - - return iRingingtonePlayer->GetCurrentlyActiveAudioPlayer(); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CPhoneTTSPlayer::ReStartRingingTonePlayer() - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::ReStartRingingTonePlayer()" ); - - //First get currently active player which plays among TTS player. - CPhoneAudioPlayer* currPlayer = NULL; - currPlayer = GetCurrentlyActiveAudioPlayerWithTTs(); - if ( currPlayer ) - { - currPlayer->ReStartPlaying(); - } - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CPhoneAudioPlayer::TRingingType CPhoneTTSPlayer::ConvertRingingType( - TProfileRingingType aRingingType ) - { - __LOGMETHODSTARTEND( EPhoneControl, "CPhoneTTSPlayer::ConvertRingingType()" ); - - CPhoneAudioPlayer::TRingingType ringingType = - CPhoneAudioPlayer::ETypeRinging; - switch ( aRingingType ) - { - case EProfileRingingTypeRinging: - ringingType = CPhoneAudioPlayer::ETypeRinging; - break; - - case EProfileRingingTypeAscending: - ringingType = CPhoneAudioPlayer::ETypeAscending; - break; - - case EProfileRingingTypeRingingOnce: - ringingType = CPhoneAudioPlayer::ETypeRingingOnce; - break; - - default: - break; - } - return ringingType; - } - - -