srsf/speechsynthesis/tsrc/testapplication/src/testappengine.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:17 +0100
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2005-2007 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 FILES

#include "testappengine.h"

#include "rubydebug.h"


_LIT( KText, "This is a text sample for TTS test. 1 2 3 45 End :) :-) :-(");

// ================= MEMBER FUNCTIONS =======================

// ----------------------------------------------------------
// CTestAppEngine::NewL()
// 
// ----------------------------------------------------------
//
CTestAppEngine* CTestAppEngine::NewL( CTestAppAppUi& aAppUi )
    {
    RUBY_DEBUG_BLOCK( "CTestAppEngine::NewL" );
    
    CTestAppEngine* self = new( ELeave ) CTestAppEngine( aAppUi );
    
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    
    return self;    
    }
    
// ----------------------------------------------------------
// CTestAppEngine::ConstructL()
// 
// ----------------------------------------------------------
//
void CTestAppEngine::ConstructL() 
    {
    // Add ourselves to active scheduler
    CActiveScheduler::Add( this );
    }

// ----------------------------------------------------
// CTestAppEngine::CTestAppEngine()
// 
// ----------------------------------------------------
//
CTestAppEngine::CTestAppEngine( CTestAppAppUi& aAppUi ) :
    CActive( EPriorityStandard ),
    iAppUi( aAppUi ),
    iVoiceIndex( -1 ),
    iRate( -1 )
    {
    }
    
// ----------------------------------------------------
// CTestAppEngine::~CTestAppEngine()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CTestAppEngine::~CTestAppEngine()
    {
    Cancel();
    
    iServer.Close();    
    iVoices.Close();
    }

// ----------------------------------------------------
// CTestAppEngine::RunL
// 
// ----------------------------------------------------
//
void CTestAppEngine::RunL()
    {
    RUBY_DEBUG_BLOCK( "CTestAppEngine::RunL" );
    
    switch ( iState )
        {
        case EPriming:
        
            if ( iStatus == KErrNone ) 
                {
                TRAP_IGNORE(
                    TTimeIntervalMicroSeconds duration = iServer.DurationL();
                    iAppUi.ChangeTextL( 4, _L("Duration (ms)"), 
                                        duration.Int64() / 1000 );
                     );
                
                PlayL();
                }
            else
                {
                User::Leave( iStatus.Int() );
                }
                
            break;
        
        case ESpeaking:
        
            if ( iStatus == KErrNone )
                {
                iAppUi.ChangeTextL( 0, _L("Server: Connected") );
                iAppUi.ChangeTextL( 4, _L("Duration (ms)"), 0 );
                }
            else if ( iStatus == KErrCancel )
                {
                iAppUi.ChangeTextL( 0, _L("Server: Paused") );
                }
            else if ( iStatus == KErrAbort )
                {
                iAppUi.ChangeTextL( 0, _L("Server: Stopped") );
                }
            else
                {
                User::Leave( iStatus.Int() );
                }
            
            iState = EIdle;
            
            break;
            
        default:
            
            break;
            
        }
    }
    
// ----------------------------------------------------
// CTestAppEngine::DoCancel
// 
// ----------------------------------------------------
//
void CTestAppEngine::DoCancel()
    {
    RUBY_DEBUG0( "CTestAppEngine::DoCancel" );
    
    TRAP_IGNORE( iServer.StopL() );
    }

// ----------------------------------------------------
// Connect to the server
// 
// ----------------------------------------------------
//
void CTestAppEngine::ConnectL()
    {
    User::LeaveIfError( iServer.Open() );

    iVoice = iServer.VoiceL();
    iVolume = iServer.VolumeL();
    iRate = iServer.SpeakingRateL();
    
    iAppUi.ChangeTextL( 1, iVoice.iVoiceName, iVoice.iLanguage );
    iAppUi.ChangeTextL( 2, _L("Volume"), iVolume );
    iAppUi.ChangeTextL( 3, _L("Speking Rate"), iRate );
    }

// ----------------------------------------------------
// Disconnect from server    
// 
// ----------------------------------------------------
//
void CTestAppEngine::DisconnectL()
    {
    Cancel();
    
    iServer.Close();
    }

// ----------------------------------------------------
// CTestAppEngine::InitTextL
// 
// ----------------------------------------------------
//
void CTestAppEngine::InitTextL()
    {
    iAppUi.ChangeTextL( 0, _L("Server: Initializing") ); 
    
    iServer.SetVolumeL( iVolume );
    
    if ( iRate > 0 && iRate <= 100 )
        {
        iServer.SetSpeakingRateL( iRate );
        }
        
    Cancel();
    SetActive();
    iState = EPriming;
    
    iServer.InitialiseSynthesis( KText, iStatus );
    }

// ----------------------------------------------------
// CTestAppEngine::InitToTextFileL
// 
// ----------------------------------------------------
//
void CTestAppEngine::InitTextToFileL()
    {
    iFileName = _L("C:\\test.raw");
    
    iAppUi.ChangeTextL( 0, _L("Server: Initializing") ); 
        
    iServer.SetVolumeL( iVolume );
    iServer.SetSpeakingRateL( iRate );
    
    Cancel();
    SetActive();
    iState = EPriming;
    
    iServer.InitialiseSynthesis( KText, iFileName, iStatus );
    }

// ----------------------------------------------------
// CTestAppEngine::PauseL
// 
// ----------------------------------------------------
//
void CTestAppEngine::PauseL()
    {
    iAppUi.ChangeTextL( 0, _L("Server: Paused") );
    iServer.PauseL();
    }

// ----------------------------------------------------
// CTestAppEngine::PlayL
// 
// ----------------------------------------------------
//
void CTestAppEngine::PlayL()
    {
    iAppUi.ChangeTextL( 0, _L("Server: Speaking") );
    
    Cancel();
    SetActive();
    iState = ESpeaking;
        
    iServer.Synthesise( iStatus );
    }

// ----------------------------------------------------
// CTestAppEngine::StopL
// 
// ----------------------------------------------------
//
void CTestAppEngine::StopL()
    {
    iAppUi.ChangeTextL( 0, _L("Server: Stopped") );
    iServer.StopL();
    }

// ----------------------------------------------------
// CTestAppEngine::ChangeVoiceL
// 
// ----------------------------------------------------
//
TVoice CTestAppEngine::ChangeVoiceL()
    {
    if ( iVoiceIndex < 0 )
        {
        FetchSupportedLanguagesAndVoicesL();
        }
    
    iVoiceIndex++;
    
    if ( iVoiceIndex >= iVoices.Count() )
        {
        iVoiceIndex = 0;
        }
    
    iVoice = iVoices[iVoiceIndex];
    
    iServer.SetVoiceL( iVoice );
    
    return iVoice;
    }

// ----------------------------------------------------
// CTestAppEngine::VolumeDownL
// 
// ----------------------------------------------------
//
TInt CTestAppEngine::VolumeDownL()
    {
    TInt volumeStep = iServer.MaxVolumeL() / 10;
    
    iServer.SetVolumeL( iVolume - volumeStep );
    iVolume = iServer.VolumeL();

    return iVolume;
    }

// ----------------------------------------------------
// CTestAppEngine::VolumeUpL  
// 
// ----------------------------------------------------
//
TInt CTestAppEngine::VolumeUpL()
    {
    TInt volumeStep = iServer.MaxVolumeL() / 10;
    
    iServer.SetVolumeL( iVolume + volumeStep );
    iVolume = iServer.VolumeL();

    return iVolume;
    }

// ----------------------------------------------------
// CTestAppEngine::RateUpL  
// 
// ----------------------------------------------------
//
TInt CTestAppEngine::RateUpL()
    {
    TInt newRate = iRate + 10;
    
    if ( newRate > iServer.MaxSpeakingRateL() )
        {
        newRate = 10;
        }
    
    iRate = newRate;
    
    return iRate;
    }
    
// ----------------------------------------------------
// CTestAppEngine::ChangeAudioOutputL
// 
// ----------------------------------------------------
//
void CTestAppEngine::ChangeAudioOutputL()    
    {
    iCurrentAudioOutput++;
    
    if ( iCurrentAudioOutput > RSpeechSynthesis::ETtsOutputPublic )
        {
        iCurrentAudioOutput = 0;
        }
    
    iServer.SetAudioOutputL( (RSpeechSynthesis::TTtsAudioOutput) iCurrentAudioOutput );
    }
    
// ----------------------------------------------------
// CTestAppEngine::FetchSupportedLanguagesAndVoicesL
// 
// ----------------------------------------------------
//
void CTestAppEngine::FetchSupportedLanguagesAndVoicesL()
    {
    RArray<TLanguage> languages;
    RArray<TVoice> voices;

    iServer.GetLanguagesL( languages );
    
    for ( TInt i( 0 ); i < languages.Count(); i++ )
        {
        if ( languages[i] > 0 )
            {
            RUBY_DEBUG1( "%d", languages[i] );

            voices.Reset();
            iServer.GetVoicesL( voices, languages[i] );
    
            for ( TInt j( 0 ); j < voices.Count(); j++ )
                {            
                RUBY_DEBUG1( "%S", &voices[j].iVoiceName );

                iVoices.AppendL( voices[j] );
                }        
            }
        }
        
    voices.Close();
    languages.Close();
    }

// End of File