phoneapp/phoneringingtoneplayer/src/cphonettsplayer.cpp
changeset 78 baacf668fe89
parent 76 cfea66083b62
--- 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 <AudioPreference.h>
-
-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<CPhoneTTSPlayer*>( 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;
-    }
-
- 
-