diff -r b13cd05eeb2f -r 57b735022c18 srsf/devtts/src/devttsalgorithmmanager.h --- a/srsf/devtts/src/devttsalgorithmmanager.h Mon Jan 18 20:20:30 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,601 +0,0 @@ -/* -* 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: Implementations behind DevTTS interface -* -*/ - - -#ifndef DEVTTSALGORITHMMANAGER_H -#define DEVTTSALGORITHMMANAGER_H - -// INCLUDES -#include "srsfbldvariant.hrh" -#include "nssdevtts.h" -#include "devttsaudio.h" - -#include -#include -#include - -// CLASS DECLARATION - -/** -* CTTSAlgorithmManager contains implementations behind DevTTS interface. -* Observer callbacks from TtsHwDevice and DevTTSAudio -* -* @lib NssDevTts.lib -*/ -class CTTSAlgorithmManager : public CBase, public MDevTTSAudioObserver, - public MTtsHwDeviceObserver, - public MASRSTtpHwDeviceObserver, - public MNlpHwDeviceObserver - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - * - * @param "MDevTTSObserver& aObserver" - * Reference to the callback observer. - */ - static CTTSAlgorithmManager* NewL( MDevTTSObserver& aObserver/*, CConsoleBase* console*/ ); - - /** - * Destructor. - */ - virtual ~CTTSAlgorithmManager(); - - public: // New functions - - /** - * Adds a new style to the collection. If equal style exists already, - * new style is not added. - * Will leave if an error occurs. Likely errors are: KErrNoMemory, - * not enough memory to add new style. KErrNotSupported, the style - * is not supported. KErrArgument, the style contains an imposible - * value. - * - * @param "TTtsStyle& aStyle" - * Reference to the style which will be added to the style - * collection. - * - * @return Identifier of added style. - */ - TTtsStyleID AddStyleL( const TTtsStyle& aStyle ); - - /** - * Returns the current balance setting. - * - * @return Balance value. - */ - TInt Balance(); - - /** - * Notifies that the buffer has been processed. The - * method is used if output mode of synthesizing is - * EDevTTSClientMode. - * - * @param "TDesC8& aBuffer" - * The buffer which has been processed. - */ - void BufferProcessed( const TDesC8& aBuffer ); - - /** - * Request a pointer to the custom interface. Currently not in use. - * - * @param "TUid aInterfaceID" - * Custom interface identifier. - * - * @return Pointer to custom interface. NULL if interface is not - * found or initiation failures. - */ - TAny* CustomInterface( TUid aInterfaceID ); - - /** - * Deletes style. - * - * @param "TTtsStyleID aStyleID" Identifier of style to be deleted. - */ - void DeleteStyleL( TTtsStyleID aStyleID ); - - /** - * Gives current position of synthesizing. The method will leave if an - * error occurs. Likely errors are: KErrNotReady, no synthesizing is - * ongoing. - * - * @param "TTimeIntervalMicroSeconds& aTime" - * Time of the synthesizing position - */ - void GetPositionL( TTimeIntervalMicroSeconds& aTime ) const; - - /** - * Gives current position of synthesizing. The method will leave if an - * error occurs. Likely errors are: KErrNotReady, no synthesizing is - * ongoing. - * - * @param "TTtsSegment& aSegment" - * Current segment which is synthesized, out parameter - * @param "TInt& aWordIndex" - * Index of the current word, starting from the begining of - * current segment - */ - void GetPositionL( TTtsSegment& aSegment, TInt& aWordIndex ) const; - - /** - * Tells if language is supported by the TTS engine or not. - * - * @param "TLanguage aLanguage" - * Language code - * - * @return ETrue if supported, EFalse otherwise - */ - TBool IsLanguageSupported( TLanguage aLanguage ) const; - - /** - * Returns maximum volume value. - * - * @return Maximum volume. - */ - TInt MaxVolume(); - - /** - * Gives number of styles. - * - * @return Number of styles. - */ - TUint16 NumberOfStyles() const; - - /** - * Pauses synthesizing. - */ - void Pause(); - - /** - * Prepares for synthesis. The method will leave if an - * error occurs. Likely errors are: KErrInUse, synthesizing is - * currently ongoing. KErrNoMemory, not enough memory to start - * synthesis. KErrNotSupport, requested function is not supported. - * - * @param "MTtsSegmentStream& aStream" - * Stream to be synthesized. - */ - void PrimeSynthesisL( MTtsSegmentStream& aStream ); - - /** - * Prepares for synthesis. The method will leave if an - * error occurs. Likely errors are: KErrInUse, synthesizing is - * currently ongoing. KErrNoMemory, not enough memory to start - * synthesis. KErrNotSupport, requested function is not supported. - * - * @param "CTtsParsedText& aText" - * Text containing multiple segments to be synthesized. - */ - void PrimeSynthesisL( CTtsParsedText& aText ); - - /** - * Sets the priority for audio playback if in EDevTTSSoundDeviceMode. - * - * @param "TInt iPriority" - * Priority value. - * @param "TDevTTSAudioPreference iPref"' - * Preference setting. Quality, time or both. - */ - void SetAudioPriority( TInt aPriority, TDevTTSAudioPreference aPref ); - - /** - * Sets the audio output routing - * - * @param TInt aAudioOutput - * New output. - */ - void SetAudioOutputL( TInt aAudioOutput ); - - /** - * Sets the playback device balance. Affects only when DevTTS is in - * EDevTTSSoundDeviceMode. Illegal values are neglected. - * - * @param "TInt aBalance" Balance to be set. - */ - void SetBalance( TInt aBalance ); - - /** - * Sets new position for synthesizing. The method will leave if an - * error occurs. Likely errors are: KErrNotReady, no synthesizing is - * ongoing. KErrArgument, position cannot be set. - * - * @param "TTimeIntervalMicroSeconds& aTime" - * Time of the synthesizing postion. - */ - void SetPositionL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Sets new position for synthesizing. The method will leave if an - * error occurs. Likely errors are: KErrNotReady, no synthesizing is - * ongoing. KErrArgument, position cannot be set. - * - * @param "TTTtsSegment& aSegment" - * The segment being synthesized. - * @param "TInt aWordIndex" - * The index of word being synthesized. - */ - void SetPositionL( const TTtsSegment& aSegment, TInt aWordIndex ); - - /** - * Sets the playback device volume. Affects only when DevTTS is in - * EDevTTSSoundDeviceMode. Range is from 0..MaxVolume(). Illegal values - * are neglected. - * - * @param "TInt aVolume" Volume setting. - */ - void SetVolume( TInt aVolume ); - - /** - * Sets the volume ramp duration. Start and end volumes must be set with - * SetVolume() function. - * - * @param "TTimeIntervalMicroSeconds& aRampDuration" - * Ramp duration in microseconds. - */ - void SetVolumeRamp( const TTimeIntervalMicroSeconds& aRampDuration ); - - /** - * Stops synthesizing and releases resources of synthesizing. - * The method does nothing if already stopped. - */ - void Stop(); - - /** - * Receives style information. The method will leave if an error - * occurs. Likely errors are: KErrNotFound, style identifier not - * found. - * - * @param "TTtsStyleID aStyleID" - * Style identifier. - * - * @return Reference to style - */ - TTtsStyle& StyleL( TTtsStyleID aStyleID ) const; - - /** - * Receives style information. The method will leave if an error - * occurs. Likely errors are: KErrArgument, index is out of bounds. - * - * @param "TUint16 aIndex" - * Index to style: 0..NumberOfStyles(). - * - * @return Reference to style - */ - TTtsStyle& StyleL( TUint16 aIndex ) const; - - /** - * Starts synthesizing the text. The method is asynchronous, as soon - * as the request has been placed, function call will return. - * MDevTTSObserver::MdtoEvent will be called when synthesizing finishes. - * The method will leave if an error occurs. Likely errors are: - * KErrNoMemory, not enough memory. - * KErrInUse, synthesizing is currently ongoing - * - * @param "TDevTTSOutputMode aOutputMode" - * Either use a sound device (EDevTTSSoundDeviceMode) or client - * using callback (EDevTTSClientMode) - */ - void SynthesizeL( TDevTTSOutputMode aOutputMode ); - - /** - * Returns current playback volume. - * - * @return Volume setting. - */ - TInt Volume(); - - /** - * Calls language identification for a given text. - * - * @since 3.0M - * @param "CTtsParsedText& aText" Text - * @param "TInt aNumberOfGuesses" Maximum number of guesses that will be provided - * @param "RArray& aLanguages" Output parameter which will contain the languages - * @param "RArray& aScores" Scores - */ - void LanguageIdentificationL( CTtsParsedText& aText, - TInt aNumberOfGuesses, - RArray& aLanguages, - RArray& aScores ); - - /** - * Calls Natural Language Processing (NLP) to normalize text. - * - * @since 3.0M - * @param "CTtsParsedText& aText" Text which will be normalized - */ - void NormalizeTextL( CTtsParsedText& aText ); - - /** - * Calls Natural Language Processing (NLP) to normalize and segment text. - * - * @since 3.0M - * @param "CTtsParsedText& aText" Text which will be normalized - */ - void NormalizeAndSegmentTextL( CTtsParsedText& aText ); - - public: // Functions from base classes - - /** - * From MDevTTSAudioObserver::InitializeComplete - * - * @param "TInt aError" - * KErrNone if everything is ok, system wide error code otherwise - */ - void MdtaoInitializeComplete( TInt aError ); - - /** - * From MDevTTSAudioObserver::BufferToBeFilled - * - * @param "TDes8& aBuffer" - * Descriptor which should be filled - * @param "TInt aSizeRequested" - * Number of bytes requested - */ - void MdtaoBufferToBeFilled( TDes8& aBuffer, TInt aSizeRequested ); - - /** - * From MDevTTSAudioObserver::PlayFinished - * - * @param "TInt aError" - * KErrNone if everything is ok, system wide error code otherwise - */ - void MdtaoPlayFinished( TInt aError ); - - - - - /** - * From MTtsHwDeviceObserver::MthdTtsCompleted - * - * Called by the HW device when the synthesis has been completed. - * - * @param "TInt aStatus" Error code, KErrNone if success - */ - void MthdTtsCompleted( TInt aStatus ); - - /** - * From MTtsHwDeviceObserver::MthdCustomEvent - * - * Called by the HW device when custom command implementation wants - * to notify a client. - * - * @param "TInt aEvent" Event code - * @param "TInt aStatus" Error code, KErrNone if success. - * @param "TDesC8& aParameter" Optional parameter - */ - void MthdCustomEvent( TInt aEvent, TInt aStatus, - const TDesC8& aParameter = KNullDesC8 ); - - /** - * From MTtsHwDeviceObserver::MthdProcessBuffer - * - * Called by the HW device when the HW device has synthesized a new audio buffer. - * - * @param "TDesC8& aBuffer" - * Synthesized audio buffer. - */ - void MthdProcessBuffer( const TDesC8& aBuffer ); - - /** - * From MTtsHwDeviceObserver::MthdoConfigurationData - * - * Invoked by TTS HW Device when it needs a configuration data package. - * - * @param "TUint32 aPackageType" Type identifier. - * @param "TUint32 aPackageID" Identifier of package - * @param "TUint32 aStartPosition" Start index in bytes - * @param "TUint32 aEndPosition" End index in bytes. If the position is bigger - * than the size of data package, the end part will be returned. - * @return Pointer to buffer containing data. - */ - HBufC8* MthdoConfigurationData( TUint32 aPackageType, - TUint32 aPackageID, - TUint32 aStartPosition, - TUint32 aEndPosition ); - - - - - /** - * From MASRSTtpHwDeviceObserver::MathdoConfigurationData - * - * Callback function to load configuration data. - * Client provides an implementation. - * - * @param "TUint32 aPackageType" Type identifier. - * @param "TUint32 aPackageID" Package identifier. - * @param "TUint32 aStartPosition" First byte. - * @param "TUint32 aEndPosition" Last byte. If greater than the size of - * the data, rest of the data is given. - * @return Pointer to the data buffer, TTP HW Device takes ownership. - */ - HBufC8* MathdoConfigurationData( TUint32 aPackageType, TUint32 aPackageID, - TUint32 aStartPosition, - TUint32 aEndPosition ); - - /** - * From MASRSTtpHwDeviceObserver::MathdoWordListReady - * - * Callback function to notify that word list is converted. - * Client provides an implementation. - * - * @param "TInt aError" Error code, KErrNone if successful. - */ - void MathdoWordListReady( const TInt aError ); - - - /** - * From MNlpHwDeviceObserver::MnhdNlpCompleted - * - * Called by the HW device when the synthesis has been completed. - * @param aStatus Error code, KErrNone if success - * @return none - */ - void MnhdoNlpCompleted( TInt aStatus ); - - /** - * From MNlpHwDeviceObserver::MnhdoConfigurationData - * - * Invoked by TTS HW Device when it needs a configuration data package. - * @param aPackageType Type identifier. - * @param aPackageID Identifier of package - * @param aStartPosition Start index in bytes - * @param aEndPosition End index in bytes. If the position is bigger - * than the size of data package, the end part will be returned. - * @return Data package in a buffer - */ - HBufC8* MnhdoConfigurationData( TUint32 aPackageType, - TUint32 aPackageID, - TUint32 aStartPosition, - TUint32 aEndPosition ); - - /** - * From MNlpHwDeviceObserver::MnhdCustomEvent - * - * Returns style given the style id. - */ - const TTtsStyle& MnhdoStyleL( TTtsStyleID styleID ); - - - protected: // New functions - - protected: // Functions from base classes - - private: - - /** - * C++ default constructor. - */ - CTTSAlgorithmManager( MDevTTSObserver& aObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL( /*CConsoleBase* console*/ ); - - /** - * Checks if state is idle and leaves in case of error. - */ - void CheckStateL(); - - // Prohibit copy constructor - CTTSAlgorithmManager( const CTTSAlgorithmManager& ); - // Prohibit assigment operator - CTTSAlgorithmManager& operator=( const CTTSAlgorithmManager& ); - - public: // Data - - protected: // Data - - private: // Data - - //State enumeration - enum TDevTTSState - { - EDevTTSNotInitialized = 0, - EDevTTSStopped, - EDevTTSPrimed, - EDevTTSSynthesizing - }; - - enum TTTSAudioPlayerState - { - ETTSAudioPlayerNotInitialized = 0, - ETTSAudioPlayerInitializing, - ETTSAudioPlayerIdle, - ETTSAudioPlayerPlaying, - ETTSAudioPlayerRecording, // Reserved for future - ETTSAudioPlayerPaused, - ETTSAudioPlayerError - }; - - - // Flag which will be set if there is an ongoing synthesis when we are - // in paused state. - TBool iPaused; - - // Reference to the registered oberserver - MDevTTSObserver& iObserver; - - // For audio playback - CDevTTSAudio* iAudio; - - // Audio device state - TTTSAudioPlayerState iAudioState; - - // Pointer to the tts hw device - CTtsHwDevice* iHw; - - // Stored error value, either from audio device or from TtsHwDevice - TInt iError; - - // Current state of the object - TDevTTSState iState; - - // Current mode of operation, buffers to audio device or to client - TDevTTSOutputMode iMode; - - // Flag which is set when last buffer from TtsHwDevice has arrived - TBool iLastBufferFromTts; - - // Reserved pointer for future extension - //TAny* iReserved; - - // TtpHwDevice - CASRSTtpHwDevice* iTtpHw; - - // Pointer to the beginning of playback data - TPtrC8 iPlaybackBuffer; - - // Start point for the next playback and length of the buffer - // These are used to index iPlaybackBuffer - TInt iStartPoint; - TInt iStopPoint; - -#ifdef DEVTTS_3DB_HACK - TBool iApplyGain; -#endif - -#ifdef DEVTTS_AUDIOBUFFER_TO_FILE - RFs iSession; - RFile iFile; - TBool iFileOpen; - TInt iFileCounter; -#endif - - // NlpHwDevice pointer - CNlpHwDevice* iNlp; - - // ETrue if NLP has been successfully initialized - TBool iNlpInitialized; - - // Wait loop for audio initialization - CActiveSchedulerWait iAudioWait; - - public: // Friend classes - - protected: // Friend classes - - private: // Friend classes - - }; - -#endif // DEVTTSALGORITHMMANAGER_H - -// End of File