--- a/srsf/ttsutility/src/ttsutilitybody.h Thu Aug 19 09:56:14 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,666 +0,0 @@
-/*
-* Copyright (c) 2004-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: Body behind TTS Utility API
-*
-*/
-
-
-#ifndef TTSUTILITYBODY_H
-#define TTSUTILITYBODY_H
-
-// INCLUDES
-#include <nssttsutility.h>
-#include <mdaaudiosampleplayer.h>
-#include <nssttscustomcommands.h>
-#include "srsfbldvariant.hrh"
-
-// CLASS DECLARATION
-
-/**
-* Implementation for TTS Utility API.
-*
-* @lib TtsUtility.lib
-* @since 2.8
-*/
-NONSHARABLE_CLASS( CTtsUtilityBody ) : public CBase,
- public MMdaAudioPlayerCallback,
- public MMMFControllerEventMonitorObserver
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor.
- */
- static CTtsUtilityBody* NewL( MTtsClientUtilityObserver& aObserver );
-
- /**
- * Destructor.
- */
- virtual ~CTtsUtilityBody();
-
- public: // New functions
-
-
- /**
- * Opens connection to a specific plugin.
- *
- * @param "TUid aUid" Plugin UID which will be instantiated
- */
- void OpenPluginL( TUid aUid );
-
- /**
- * Lists UIDs of available Text-To-Speech plugins.
- *
- * @param "RArray<TUid>& aUids" Output parameter which will contain the
- * list of plugin UIDs after function call.
- */
- void ListPluginsL( RArray<TUid>& aUids );
-
- /**
- * Sets the default style parameters for synthesis.
- *
- * @param "const TTtsStyle& aStyle" Style created by the client
- */
- void SetDefaultStyleL( const TTtsStyle& aStyle );
-
- /**
- * Returns the registered default style
- *
- * @return Style reference
- * @leave KErrNotReady if no plugin is loaded to handle the function call
- */
- TTtsStyle& DefaultStyleL();
-
- /**
- * Sets the speaking rate of synthesizer.
- *
- * @param TInt aRate Speaking rate value
- * @leave KErrNotSupported if synthesizer does not support speaking rate setting
- */
- void SetSpeakingRateL( TInt aRate );
-
- /**
- * Returns the current speaking rate value.
- *
- * @return Speaking rate value
- * @leave KErrNotSupported if synthesizer does not support speaking rate setting
- * @leave KErrNotReady if no plugin is loaded to handle the function call
- */
- TInt SpeakingRateL();
-
- /**
- * Returns the list of supported languages.
- *
- * @param "RArray<TLanguage>& aLanguages" Output parameter which contains the languages
- * @leave KErrNotReady if no plugin is loaded to handle the function call
- */
- void GetSupportedLanguagesL( RArray<TLanguage>& aLanguages );
-
- /**
- * Returns the list of supported voices for a certain language.
- *
- * @param "TLanguage aLanguage" Language
- * @param "RArray<TVoice>& aVoices" Output parameter which contains the voices
- * @leave KErrNotReady if no plugin is loaded to handle the function call
- */
- void GetSupportedVoicesL( TLanguage aLanguage, RArray<TTtsStyle>& aVoices );
-
- /**
- * Open a descriptor ready for playback
- *
- * @param "const TDesC& aDescriptor" Descriptor containing the text to be synthesized.
- * @since 3.2
- */
- void OpenDesL( const TDesC& aDescriptor );
-
- /**
- * Opens a descriptor and plays it.
- *
- * @param "const TDesC& aDescriptor" Descriptor to play
- * @since 3.2
- */
- void OpenAndPlayDesL( const TDesC& aDescriptor );
-
- /**
- * Directing output of a next synthesis to the specified file
- *
- * @param "RFile& aFile" Open file handle to save output of next synthesis.
- * @since 3.2
- */
- void SetOutputFileL( const RFile& aFile );
-
- /**
- * Adds new style to style collection.
- *
- * @param "TTtsStyle& aStyle" Reference to style.
- * @return Assigned style ID.
- */
- TTtsStyleID AddStyleL( const TTtsStyle& aStyle );
-
- /**
- * Deletes style from the style collection.
- *
- * @param "TTtsStyle& aStyle" Reference to style.
- * @return Error code.
- */
- TInt DeleteStyle( TTtsStyleID aID );
-
- /**
- * Returns number of styles.
- *
- * @return Number of styles.
- */
- TUint16 NumberOfStyles();
-
- /**
- * Returns style based on style ID
- *
- * @param "TTtsStyleID aStyleID" Style identifier.
- * @return Reference to found style.
- */
- TTtsStyle& StyleL( TTtsStyleID aStyleID );
-
- /**
- * Returns style based on index.
- *
- * @param "TUint16 aIndex" Index.
- * @return Reference to found style.
- */
- TTtsStyle& StyleL( TUint16 aIndex );
-
- /**
- * Begins playback of the initialised audio sample at the current volume
- * and priority levels.
- *
- * When playing of the audio sample is complete, successfully or
- * otherwise, the callback function
- * <code>MMdaAudioPlayerCallback::MapcPlayComplete()</code> is
- * called. This function raises a CMdaAudioPlayerUtility 1 panic if the
- * audio player utility is not initialised.
- */
- void Play();
-
- /**
- * Stops playback of the audio sample as soon as possible.
- *
- * If the audio sample is playing, playback is stopped as soon as
- * possible. If playback is already complete, nothing further happens as
- * a result of calling this function. The callback function
- * <code>MMdaAudioPlayerCallback::MapcPlayComplete()</code> is not
- * called.The function raises a CMdaAudioPlayerUtility 1 panic if the
- * audio player utility is not initialised.
- */
- void Stop();
-
- /**
- * Changes the current playback volume to a specified value.
- *
- * The volume can be changed before or during playback and is effective
- * immediately. The function raises a CMdaAudioPlayerUtility 1 panic if
- * the audio player utility is not initialised.
- *
- * @param "TInt aVolume"
- * The volume setting. This can be any value from zero to
- * the value returned by a call to
- * <code>CMdaAudioPlayerUtility::MaxVolume()</code>.
- * Setting a zero value mutes the sound. Setting the
- * maximum value results in the loudest possible sound.
- */
- void SetVolume( TInt aVolume );
-
- /**
- * Sets the number of times the audio sample is to be repeated during the
- * playback operation.
- *
- * A period of silence can follow each playing of the sample. The audio
- * sample can be repeated indefinitely.
- *
- * @param "TInt aRepeatNumberOfTimes"
- * The number of times the audio sample, together with
- * the trailing silence, is to be repeated. If this is
- * set to <code>KMdaRepeatForever</code>, then the audio
- * sample, together with the trailing silence, is
- * repeated indefinitely or until <code>Stop()</code> is
- * called. If this is set to zero, then the audio sample
- * is not repeated.
- * @param "const TTimeIntervalMicroSeconds& aTrailingSilence"
- * The time interval of the trailing silence.
- */
- void SetRepeats( TInt aRepeatNumberOfTimes,
- const TTimeIntervalMicroSeconds& aTrailingSilence );
-
- /**
- * Returns the duration of the audio sample.
- *
- * The function raises a CMdaAudioPlayerUtility 1 panic if the audio
- * player utility is not initialised.
- *
- * @returns "TTimeIntervalMicroSeconds&"
- * The duration in microseconds
- */
- const TTimeIntervalMicroSeconds& Duration();
-
- /**
- * Returns an integer representing the maximum volume.
- *
- * This is the maximum value which can be passed to
- * <code>CMdaAudioPlayerUtility::SetVolume()</code>. The function raises a
- * CMdaAudioPlayerUtility 1 panic if the audio player utility is not
- * initialised.
- *
- * @returns "TInt"
- * The maximum volume. This value is platform dependent
- * but is always greater than or equal to one.
- */
- TInt MaxVolume();
-
- /**
- * Opens a descriptor source and plays it.
- *
- * @param "TDesC8& aDescriptor" Descriptor to play.
- */
- void OpenAndPlayDesL( const TDesC8& aDescriptor );
-
- /**
- * Opens a file source and plays it.
- *
- * @param "TDesC& aFileName" File to play.
- */
- void OpenAndPlayFileL( const TDesC& aFileName );
-
- /**
- * Opens a parsed text source and plays it.
- *
- * @param "CTtsParsedText& aText" Parsed text object to play.
- */
- void OpenAndPlayParsedTextL( CTtsParsedText& aText );
-
- /**
- * Open a clip from a file
- *
- * @param "const TDesC& aFileName"
- * File to open
- * @leave Leaves with one of the system wide error codes if a problem is encountered
- * opening the file
- */
- void OpenFileL( const TDesC& aFileName );
-
- /**
- * Open a clip from a descriptor
- *
- * @param "const TDesC8& aDescriptor"
- * Descriptor containing audio clip
- * @leave Leaves with one of the system wide error codes if a problem is encountered
- * opening the file
- */
- void OpenDesL( const TDesC8& aDescriptor );
-
- /**
- * Open parsed text source.
- *
- * @param "CTtsParsedText& aText" Reference to parsed text object.
- */
- void OpenParsedTextL( CTtsParsedText& aText );
-
- /**
- * Pauses playback of the audio clip
- * @returns One of the system-wide error codes
- */
- TInt Pause();
-
- /**
- * Closes the current audio clip (allowing another clip to be opened)
- */
- void Close();
-
- /**
- * Returns the current playback position in microseconds
- *
- * @retval "TTimeIntervalMicroSeconds& aPosition"
- * The current time position in microseconds from the start of the file
- * @returns One of the global error codes
- */
- TInt GetPosition( TTimeIntervalMicroSeconds& aPosition );
-
- /**
- * Returns the current playback position in word index.
- *
- * @retval "TInt& aWordIndex" The current position in words.
- * @return Error code.
- */
- TInt GetPosition( TInt& aWordIndex );
-
- /**
- * Set the current playback position in microseconds from the start of the file
- *
- * @param "TTimeIntervalMicroSeconds& aPosition"
- * The position to move to in microseconds past the start of the file
- */
- void SetPosition( const TTimeIntervalMicroSeconds& aPosition );
-
- /**
- * Set the current playback position in word index.
- *
- * @param "TInt aWordIndex" Playback position.
- */
- void SetPosition( TInt aWordIndex );
-
- /**
- *
- * Set the priority for playback. This is used to arbitrate between multiple
- * objects trying to access a single sound device
- *
- * @param "TInt aPriority"
- * @param "TMdaPriorityPreference aPref"
- * Quality/time preference tradeoff
- *
- * @returns "TInt" One of the global error codes
- */
- TInt SetPriority( TInt aPriority, TMdaPriorityPreference aPref );
-
- /**
- * Returns the current playback volume
- *
- * @retval "TInt& aVolume"
- * A volume value between 0 and the value returned by <code>MaxVolume()</code>
- * @returns "TInt" One of the global error codes
- */
- TInt GetVolume( TInt& aVolume );
-
- /**
- * Sets the current playback balance
- *
- * @param "TInt& aBalance"
- * A value between <code>KMMFBalanceMaxLeft</code>
- * and <code>KMMFBalanceMaxRight</code>. The default value is
- * <code>KMMFBalanceCenter</code>
- * @returns "TInt" One of the global error codes
- */
- TInt SetBalance( TInt aBalance = KMMFBalanceCenter );
-
- /**
- * Returns the current playback balance
- *
- * @retval "TInt& aBalance"
- * A value between <code>KMMFBalanceMaxLeft</code>
- * and <code>KMMFBalanceMaxRight</code>
- * @returns "TInt" One of the global error codes
- */
- TInt GetBalance( TInt& aBalance );
-
- /**
- * Send a synchronous custom command to the controller
- * @param "aDestination" "The destination of the message, consisting of the uid of
- * the interface of this message."
- * @param "aFunction" "The function number to indicate which function is to be called
- * on the interface defined in the aDestination parameter."
- * @param "aDataTo1" "A reference to the first chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataTo2" "A reference to the second chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataFrom" "A reference to an area of memory to which the controller framework will
- * write any data to be passed back to the client. Can't be KNullDesC8."
- * @return "The result of the request. Exact range of values is dependent on the interface."
- */
- TInt CustomCommandSync( const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2,
- TDes8& aDataFrom);
- /**
- * Send a synchronous custom command to the controller
- * @param "aDestination" "The destination of the message, consisting of the uid of
- * the interface of this message."
- * @param "aFunction" "The function number to indicate which function is to be called
- * on the interface defined in the aDestination parameter."
- * @param "aDataTo1" "A reference to the first chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataTo2" "A reference to the second chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @return "The result of the request. Exact range of values is dependent on the interface."
- */
- TInt CustomCommandSync( const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2 );
- /**
- * Send a asynchronous custom command to the controller
- * Note: This method will return immediately. The RunL of the active object owning the
- * <code>aStatus<\code> parameter will be called when the command is completed by the
- * controller framework.
- * @param "aDestination" "The destination of the message, consisting of the uid of
- * the interface of this message."
- * @param "aFunction" "The function number to indicate which function is to be called
- * on the interface defined in the aDestination parameter."
- * @param "aDataTo1" "A reference to the first chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataTo2" "A reference to the second chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataFrom" "A reference to an area of memory to which the controller framework will
- * write any data to be passed back to the client. Can't be KNullDesC8."
- * @param "aStatus" "The TRequestStatus of an active object. This will contain the
- * result of the request on completion. The exact range of
- * result values is dependent on the interface."
- */
- void CustomCommandAsync( const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2,
- TDes8& aDataFrom,
- TRequestStatus& aStatus );
- /**
- * Send a asynchronous custom command to the controller
- * Note: This method will return immediately. The RunL of the active object owning the
- * <code>aStatus<\code> parameter will be called when the command is completed by the
- * controller framework.
- * @param "aDestination" "The destination of the message, consisting of the uid of
- * the interface of this message."
- * @param "aFunction" "The function number to indicate which function is to be called
- * on the interface defined in the aDestination parameter."
- * @param "aDataTo1" "A reference to the first chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aDataTo2" "A reference to the second chunk of data to be copied to the controller
- * framework. The exact contents of the data are dependent on the
- * interface being called. Can be KNullDesC8."
- * @param "aStatus" "The TRequestStatus of an active object. This will contain the
- * result of the request on completion. The exact range of
- * result values is dependent on the interface."
- * @since 7.0s
- */
- void CustomCommandAsync( const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2,
- TRequestStatus& aStatus );
-
- public: // Functions from MMdaAudioPlayerCallback
-
- void MapcInitComplete( TInt /*aError*/, const TTimeIntervalMicroSeconds& /*aDuration*/ ) {}
- void MapcPlayComplete( TInt /*aError*/ ) {}
-
-
- public: // Functions from MMMFControllerEventMonitorObserver
-
- void HandleEvent( const TMMFEvent& aEvent );
-
- private:
-
- /**
- * C++ default constructor.
- *
- * @param "MTtsClientUtilityObserver& aObserver" Reference to observer.
- */
- CTtsUtilityBody( MTtsClientUtilityObserver& aObserver );
-
- /**
- * By default Symbian 2nd phase constructor is private.
- */
- void ConstructL();
-
- // Prohibit copy constructor if not deriving from CBase.
- CTtsUtilityBody( const CTtsUtilityBody& );
- // Prohibit assigment operator if not deriving from CBase.
- CTtsUtilityBody& operator=( const CTtsUtilityBody& );
-
- /**
- * Utility function to open connection to controller plugin.
- *
- * @param "TUid aPluginUid" Plugin UID
- */
- void OpenControllerConnectionL( TUid aPluginUid );
-
- /**
- * Utility function to copy parsed text structure and convert style ids.
- *
- * @param "CTtsParsedText& aText" Parsed text which is copied
- */
- void CopyParsedTextL( CTtsParsedText& aText );
-
- /**
- * Checks if there is an existing connection to some controller plugin
- *
- * @return ETrue if there is an connection
- */
- TBool IsPluginOpen();
-
- /**
- * Stores priority settings but does not send them to the controller
- * plugin just yet.
- *
- * @param "TInt aPriority" Audio priority
- * @param "TMdaPriorityPreference aPref" Audio preference
- */
- void StorePriority( TInt aPriority, TMdaPriorityPreference aPref );
-
- /**
- * Handles conversion from unicode to utf-8
- *
- * @param "const TDesC& aDes" Unicode descriptor
- * @return Pointer to created buffer, pushed to cleanupstack
- */
- HBufC8* ConvertToUtf8LC( const TDesC& aDes );
-
- /**
- * Adds data sink to controller according iUidOfDataSink and iOutputFile.
- */
- void AddDataSinkL();
-
- /**
- * Responds that the correct plugin is loaded
- *
- * @param "TTtsQuality aQuality" Synthesis quality parameter
- * @param "TLanguage aLanguage" Synthesis language
- * @param "const TTtsVoice& aVoice" Synthesis voice
- */
- void CheckAndLoadCorrectPluginL( TTtsQuality aQuality, TLanguage aLanguage,
- const TTtsVoice& aVoice );
-
- /**
- * Tells if currently loaded plugin can handle synthesis with given parameters
- *
- * @param "TLanguage aLanguage" Language to be used
- * @param "const TTtsVoice& aVoice" Voice to be used
- * @return ETrue if parameters are supported
- */
- TBool IsSupportedSpeaker( TLanguage aLanguage, const TTtsVoice& aVoice );
-
- private: // Data
-
- // Client side representation of controller plugin in use
- RMMFController iController;
-
- // Audio custom commands
- RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands;
- RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCommands;
-
- // Tts custom commands
- RTtsCustomCommands iTtsCustomCommands;
-
- // Pointer to controller event monitor
- CMMFControllerEventMonitor* iControllerEventMonitor;
-
- // Reference to observer
- MTtsClientUtilityObserver& iObserver;
-
- // Source and sink handle info
- TMMFMessageDestination iSourceHandle;
- TMMFMessageDestination iSinkHandle;
-
- // Duration of the current TTS "clip"
- TTimeIntervalMicroSeconds iDuration;
-
- // Latest read position of synthesising
- TTimeIntervalMicroSeconds iPosition;
-
- // Plugin priority settings.
- TMMFPrioritySettings iPrioritySettings;
-
- // Duration of current TTS 'clip'
- TTimeIntervalMicroSeconds iTime;
-
- // Registered styles, these will be kept in two places: locally
- // in TtsUtility and in TtsHwDevice in server side.
- RArray<TTtsStyle> iStyles;
-
- // Registered style IDs. (internal to TtsUtility)
- RArray<TTtsStyleID> iInternalStyleIDs;
-
- // Registered style IDs. (plugin id)
- RArray<TTtsStyleID> iControllerStyleIDs;
-
- // Increased numbering for style ids
- TTtsStyleID iCurrentStyleID;
-
- // Flag to tell if playback should be started immediately after priming
- // has finished.
- TBool iPlayImmediately;
-
- // Counter to tell how many times playback should be repeated.
- TInt iRepeats;
-
- // Trailing silence when repeating the playback
- TTimeIntervalMicroSeconds32 iTrailingSilence;
-
- // UID of controller plugin which has been created
- TUid iOpenPlugin;
-
- // Etrue if user has opened plugin by calling function OpenPluginL()
- TBool iPluginOpenedExplicitly;
-
- // Parsed text which is given to the controller plugin
- CTtsParsedText* iParsedText;
-
- // Default style structure
- TTtsStyle iDefaultStyle;
-
- // Uid of data sink to be used
- TUid iUidOfDataSink;
-
- // Output file handle if data sink is set to file output
- RFile iFile;
- };
-
-#endif // TTSUTILITY_H
-
-// End of File
-
-
-