diff -r cad71a31b7fc -r e36f3802f733 srsf/nssvasapi/nssvascore/inc/nssvascspeechitem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/nssvasapi/nssvascore/inc/nssvascspeechitem.h Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,634 @@ +/* +* Copyright (c) 2004-2006 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: The CSeechItem provides speech mechanism to request services from SRS. +* +*/ + + +#ifndef NSSVASCSPEECHITEM_H +#define NSSVASCSPEECHITEM_H + +// INCLUDE FILES +#include +#include +#include + +#include "srsfbldvariant.hrh" +#include "nssvascoreconstant.h" +#include "nssvasmspeechitem.h" +#include "nssvasmtrainvoiceeventhandler.h" +#include "nssvasmtraintexteventhandler.h" +#include "nssvasmplayeventhandler.h" +#include "nssvasmcoresrsdbeventhandler.h" +#include "nssvasmsavetagclient.h" +#include "nssvasmdeletetagclient.h" +#include "nssvasccontext.h" +#include "nssvascspeechitemsrsportal.h" +#include "nssvastspeechitemconstant.h" +#include "nssvasttsutilitywrapper.h" + +// FORWARD DECLARATIONS +class CNssSpeechItemTrainer; +class CNssTag; + +/** +* The CNssSpeechItem class provides a realization of the MNssSpeechItem client +* interface. The CNssSpeechItem methods use the CSpeechRecognitionUtility Api +* to implement client speech requests. +* +* @lib nssvasapi.lib +* @since 2.8 +*/ +class CNssSpeechItem : public CBase, + public MNssSpeechItem, + public MSISpeechRecognitionUtilityObserver, + public MTtsClientUtilityObserver +{ + + public: // Constructors and destructor + + /** + * Destructor. + */ + ~CNssSpeechItem(); + + /** + * Two-phased CNssSpeechItem constructor + * + * @since 2.0 + * @param aContext A reference to Context object + * @param aPortal A reference to SpeechItem Portal object + * @return a pointer to the new SpeechItem object + */ + static CNssSpeechItem* NewL( CNssContext& aContext, + CNssSpeechItemSrsPortal& aPortal, + CNssSpeechItemTrainer& aTrainer ); + + + /** + * Two-phased CNssSpeechItem constructor + * + * @since 2.0 + * @param aContext A reference to Context object + * @param aPortal A reference to SpeechItem Portal object + * @param aRuleID A rule ID value + * @param aText A reference to the TDesc text + * @return a pointer to the new SpeechItem object + */ + static CNssSpeechItem* NewL( CNssContext& aContext, + CNssSpeechItemSrsPortal& aPortal, + CNssSpeechItemTrainer& aTrainer, + TUint32 aRuleID, + const TDesC& aText ); + + /** + * Two-phased CNssSpeechItem constructor + * + * @since 2.0 + * @param aContext A reference to Context object + * @param aPortal A reference to SpeechItem Portal object + * @param aRuleID A rule ID value + * @param aText A reference to the TDesc text + * @return a pointer to the new SpeechItem object + */ + static CNssSpeechItem* NewLC( CNssContext& aContext, + CNssSpeechItemSrsPortal& aPortal, + CNssSpeechItemTrainer& aTrainer, + TUint32 aRuleID, + const TDesC& aText ); + + + public: // New functions + + /** + * Method to return the rule ID + * + * @since 2.0 + * @param + * @return the rule ID. + */ + TUint32 RuleID(); + + /** + * Method to set the rule ID + * + * @since 2.0 + * @param aRuleID Rule ID + */ + void SetRuleID( TUint32 aRuleID ); + + /** + * Method to set the Training Type + * + * @since 2.0 + * @param aTrainType Training Type + */ + void SetTrainedType( TNssVasCoreConstant::TNssTrainedType aTrainType ); + + /** + * Create a copy of the SpeechItem object. + * This cunction creates a new SpeechItem by allocating memory for + * a new SpeechItem, and deep copying the members of the SpeechItem + * on which this fucntion is called. Old SpeechItem and new SpeechItem + * exist. Client need to deallocate memory for both. + * + * @param aContext a pointer to a Context + * @return pointer the newly created SpeechItem. + */ + CNssSpeechItem* CopyL( CNssContext* aContext ); + + + + public: // Functions from base classes + + + /** + * Function inherited from MSISpeechRecognitionUtilityObserver to + * handle the events from SRS Utility object + * + * @since 2.0 + * @param aEvent an event from the SRS utility object + * @param aResult the result from aEvent operation + */ + void MsruoEvent( TUid aEvent, TInt aResult ); + + + /** + * The Record method is used by the client in the train voice sequence + * for SRS to record input speech. + * + * @since 2.0 + * @param aTrainVoiceEventHandler a reference to TrainVoiceEventHandler + * @return a fail or success result from processing this method. + */ + TNssSpeechItemResult RecordL( MNssTrainVoiceEventHandler* aTrainVoiceEventHandler ); + + + /** + * Method called by the client to indicate to SRS that a playback is + * needed. + * + * @since 2.0 + * @param aPlayEventHandler a reference to PlayEventHandler + * @return a fail or success result from processing this method. + */ + TNssSpeechItemResult PlayL( MNssPlayEventHandler* aPlayEventHandler ); + + /** + * Method called by the client to indicate to SRS that a playback is + * needed with a certain language. + * + * @since 2.8 + * @param aPlayEventHandler a call back object to handle the play events + * @param aLanguage language which will be used in playback + * @return TNssSpeechItemResult synchronous return value to identify whether the + * synchronous process is success or fail + */ + TNssSpeechItemResult PlayL( MNssPlayEventHandler* aPlayEventHandler, + TLanguage aLanguage ); + + /** + * Method called by the client to indicate to SRS that training is + * needed. + * + * @since 2.0 + * @param aTrainVoiceEventHandler a reference to TrainVoiceEventHandler + * @return a fail or success result from processing this method. + */ + TNssSpeechItemResult TrainVoiceL(MNssTrainVoiceEventHandler* aTrainVoiceEventHandler); + + /** + * Method called by the client to cancel the previous operation. + * + * @since 2.0 + * @return a fail or success result from processing this method. + */ + TNssSpeechItemResult CancelL(); + + /** + * The TrainingCapabilities member fucntion is used by the client + * to get training capabilities to beused in Speaker Independent voice + * recognition. + * + * @since 2.0 + * @return a pointer to the Training Capability array object + */ + CArrayFixFlat* TrainingCapabilities(); + + /** + * Method to return the Training Type + * + * @since 2.0 + * @return the Training Type + */ + TNssVasCoreConstant::TNssTrainedType TrainedType(); + + /** + * Method to return the Text + * + * @since 2.0 + * @return the Text + */ + TDesC& Text(); + + /** + * Returns the raw training text from where escape characters are not removed. + * Should not be used by clients who want to display the string. + * + * @since 3.2 + * @return Reference to the text buffer + */ + TDesC& RawText(); + + /** + * Returns the part of text which identified with the given id. + * If RawText() is for example "_1Amy_1Harris_2mobile" then + * PartialTextL( _L( "1" ) ) call will return "Amy Harris". + * + * @since 3.2 + * @param aIdentifier ID of the text part to return + * @reuturn Text or KNullDesC if identifier is not found + */ + HBufC* PartialTextL( const TDesC& aIdentifier ); + + /** + * Method to set the training text + * + * @since 2.0 + * @param aText Text which will be trained + * @return + */ + void SetTextL( const TDesC& aText ); + + /** + * Method to query playing support. + * + * @since 2.8 + * @return TBool True if playing is supported. + */ + TBool IsPlayingSupported(); + + /** + * Method to train a speech model from text. + * + * @since 2.8 + * @param aEventHandler Event handler + * @param aTrainingParams Training options, NULL uses default ones. + * @return TNssSpeechItemResult Success status + */ + TNssSpeechItemResult TrainTextL( MNssTrainTextEventHandler* aEventHandler, + CNssTrainingParameters* aTrainingParams ); + + /** + * Unused method for future extensions of MTtsClientUtilityObserver. + * + * @from MTtsClientUtilityObserver + * @since 2.8 + * @param aEvent event ID + * @param aError result + */ + void MapcCustomCommandEvent( TInt aEvent, TInt aError ); + + /** + * Method to signal that playing has been initialized. + * + * @from MTtsClientUtilityObserver + * @since 2.8 + * @param aError Successful or not + * @param aDuration Length of the TTS waveform + */ + void MapcInitComplete( TInt aError, const TTimeIntervalMicroSeconds& aDuration); + + /** + * Method to signal that playing has been completed. + * + * @from MTtsClientUtilityObserver + * @since 2.8 + * @param aError Successful or not + */ + void MapcPlayComplete( TInt aError ); + + public: // New Functions + + /** + * Method to start transaction for saving the data into the SRS. + * + * @since 2.0 + * @param aSaveTagClient Callback after we made it or died trying + * @param aTag Tag to be deleted + * @return a fail or success result from processing this method. + */ + MNssCoreSrsDBEventHandler::TNssSrsDBResult + NSSBeginSaveToSrs( MNssSaveTagClient* aSaveTagClient, CNssTag* aTag ); + + /** + * Method to start transaction for deleting tags from SRS and VAS DB. + * + * @since 2.0 + * @param aDeleteTagClient Callback after we made it or died trying + * @param aTag Tag to be deleted + * @return a fail or success result from processing this method. + */ + MNssCoreSrsDBEventHandler::TNssSrsDBResult + NSSBeginDeleteFromSrs( MNssDeleteTagClient* aDeleteTagClient, CNssTag* aTag ); + + /** + * Method to commit the transaction to the SRS. + * This is a SYNCHRONOUS method. + * @since 2.0 + * @return a fail or success result from processing this method. + */ + MNssCoreSrsDBEventHandler::TNssSrsDBResult CommitSrsChanges(); + + + /** + * Method to end the transaction without committing.. + * This is a SYNCHRONOUS method. + * @since 2.8 + * @return a fail or success result from processing this method. + */ + MNssCoreSrsDBEventHandler::TNssSrsDBResult RollbackSrsChanges(); + + /** + * Method to set the Tag ID + * @since 2.0 + * @param aTagId a Tag ID + */ + void SetTagId( TInt aTagId ); + + /** + * Method to return the Tag ID + * + * @since 2.0 + * @return the Tag ID. + */ + TInt TagId(); + + /** + * Method to return the Grammar ID from the context of the speech item. + * + * @since 2.8 + * @return the Grammar ID. + */ + TUint32 GrammarId(); + + /** + * Method to set the Trained flag for True or False + * + * @since 2.0 + * @param aTrained Trained flag + */ + void SetTrained( TBool aTrained ); + + /** + * Method to return the Trained flag + * + * @since 2.0 + * @return the Trained flag + */ + TBool Trained(); + + /** + * Updates the speech item after training. + * + * @since 2.8 + * @param aRuleID Rule ID. + */ + void DelayedTrainingComplete( TUint32 aRuleID ); + + + private: //function + + /** + * C++ constructor + * + * @param aContext reference to Context object + * @param aPortal reference to SpeechItem Portal object + * @param aTrainer reference to speech item trainer + */ + CNssSpeechItem( CNssContext& aContext, + CNssSpeechItemSrsPortal& aPortal, + CNssSpeechItemTrainer& aTrainer ); + + /** + * Symbian 2nd phase constructor + * + * @param aRuleID Rule ID value + * @param aText Reference to the TDesc text + */ + void ConstructL( TUint32 aRuleID, const TDesC& aText ); + + /** + * Method to copy utterance data from current to transient values + */ + void CopyUtteranceData(); + + /** + * Method to handle the "GetUtteranceDurationEvent" complete from SRS + */ + void DoGetUtteranceDurationCompleteEvent(); + + /** + * Method to handle the "PlayEvent" complete from SRS + */ + void DoPlayCompleteEvent(); + + /** + * Method to handle the "PlayEvent" fail from SRS + * + * @param aResult - a Result value from the Play operation + */ + void DoPlayFailEvent( TInt aResult ); + + /** + * Method to process the SRS play error + * + * @param aResult the result value from SRS which indicates an error + * @return a converted error code to identify the VAS play error + */ + MNssPlayEventHandler::TNssPlayResult DoPlayResult( TInt aResult ); + + /** + * Method to handle the "GetAvailableStorageEvent" complete from SRS + */ + void DoGetAvailableStorageCompleteEvent(); + + /** + * Method to handle the "TrainEvent" complete from SRS + */ + void DoTrainCompleteEvent(); + + /** + * Method to process the various train failed events from SRS' + * + * @param aResult the result value to indicate an error + */ + void DoTrainFailEvent( TInt aResult ); + + /** + * Method to process the SRS train error + * + * @param aResult the result value from SRS which indicates an error + * @return a converted error code to identify the VAS train error + */ + MNssTrainVoiceEventHandler::TNssTrainResult DoTrainResult( TInt aResult ); + + /** + * Method to handle the "AddPronunciation" complete from SRS + */ + void DoAddPronunciationCompleteEvent(); + + /** + * Method to handle the "AddPronunciation" fail from SRS + * + * @param aResult a Result value from the event + */ + void DoAddPronounciationFailEvent( TInt aResult ); + + /** + * Method to handle the "RemoveModel" complete from SRS + */ + void DoRemoveModelCompleteEvent(); + + /** + * Method to handle the "RemoveModel" fail from SRS + * + * @param aResult a Result value from the event + */ + void DoRemoveModelFailEvent( TInt aResult ); + + /** + * Method to process the SRS DB error + * + * @param aResult the result value from SRS to indicate an error + * @return an error code to identify the DB error + */ + MNssCoreSrsDBEventHandler::TNssSrsDBResult DoSrsDBResult( TInt aResult ); + + /** + * Method to notify the event handler for receiving the Unexpected Event + */ + void NotifyHandlerForUnexpectedEvent(); + + /** + * Method to do clean up + */ + void CleanUp(); + + /** + * Method to verify whether it is ok to retry + * + * @return ETrue is ok to retry, EFalse stops retry + */ + TBool DoRetry(); + + /** + * This method starts playback with CTtsUtility. + */ + void DoPlayL(); + + /** + * This method releases resources, which were reserved for playing, + * and updated the state from PlayingStrated to Idle. + */ + void CleanPlayback(); + + /** + * Makes the callback after playing has completed or failed. + * + * @param Symbian standard error code + */ + void MakePlayCallback( TInt aResult ); + + private: //data + + // The rule ID. + TUint32 iRuleID; + + // The transient rule ID. + TUint32 iTransientRuleID; + + // The text data. + HBufC* iText; + + // The trained type. + TNssVasCoreConstant::TNssTrainedType iTrainedType; + + // Need to keep track the training state. + TNssSpeechItemConstant::TNssState iState; + TNssSpeechItemConstant::TNssState iOldState; + + // Reference to Context object + CNssContext& iContext; + + // Reference to SRS Portal object. + CNssSpeechItemSrsPortal& iPortal; + + // Reference to SRS Trainer object. Used for delayed text training. + CNssSpeechItemTrainer& iTrainer; + + // Pointer to Play Event Handler object. + MNssPlayEventHandler* iPlayEventHandler; + + // Pointer to Train Event Handler object + MNssTrainVoiceEventHandler* iTrainVoiceEventHandler; + + // The Tag ID for internal use by Vas Database, + TInt iTagId; + + // The Trained flag for re-training operation + TBool iTrained; + + // The duration for the play utterance + TTimeIntervalMicroSeconds32 iPlayDuration; + + // The flag to identify recovery is in progress + TBool iRecover; + + // Retry counter + TInt iRetry; + + // Memory is allocated for TTS data only when plaing the tag. + // This is because CNssSpeechItem may have thousands of copies. + struct TTtsData + { + // TTS speech style + TTtsStyle iStyle; + + // TTS speech style handle + TTtsStyleID iStyleID; + + // TTS speech segment + TTtsSegment iSegment; + + // TTS player + CNssTtsUtilityWrapper* iTts; + + // Parsed text + CTtsParsedText* iParsedText; + + // Initializes everyting to zero. + TTtsData(); + }; + + // TTS Data + TTtsData* iTtsData; + + // Cleaned text data where escape characters have been removed + HBufC* iTrimmedText; +}; + +#endif // NSSVASCSPEECHITEM_H + +// End of file