diff -r cad71a31b7fc -r e36f3802f733 srsf/ttscontrollerplugin/src/ttsplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/ttscontrollerplugin/src/ttsplugin.h Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,819 @@ +/* +* 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: Interface towards Tts Controller Plugin +* +*/ + + + +#ifndef TTSPLUGIN_H +#define TTSPLUGIN_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class CTtsControllerPluginBody; + +// CLASS DECLARATION + +/** +* TTS controller plugin implementation +* +* @lib nssttsplugin.lib +* @since 2.8 +*/ +class CTtsControllerPlugin : public CMMFController, + public MMMFAudioControllerCustomCommandImplementor, + public MMMFAudioPlayDeviceCustomCommandImplementor, + public MTtsCustomCommandImplementor + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CTtsControllerPlugin* NewL(); + + /** + * Destructor. + */ + virtual ~CTtsControllerPlugin(); + + public: // New functions + /** + * Called when initializations are ready + */ + void InitializationReady( TInt aError ); + + /** + * Called when synthesis is ready + */ + void SynthesisReady( TInt aError ); + + public: // MMMFAudioControllerCustomCommandImplementor + + /** + * Set the sample rate of the data source in samples per second. + * + * @param "aSampleRate" "The sample rate, in samples per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSourceSampleRateL(TUint aSampleRate); + + /** + * Set the bit rate of the data source in bits per second. + * + * @param "aSampleRate" "The bit rate, in bits per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSourceBitRateL(TUint aBitRate); + + /** + * Set the number of channels in the data source. + * For example, one channel for mono, two channels for stereo etc. + * + * @param "aNumChannels" "The number of channels." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSourceNumChannelsL(TUint aNumChannels); + + /** + * Set the format of the data source. + * + * The UID corresponds to the uid of the CMMFFormat-derived ECOM plugin to be used. + * @param "aFormatUid" "The format plugin to be used." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSourceFormatL(TUid aFormatUid); + + /** + * Set the fourCC code of the source. + * + * @param "aDataType" "The fourCC code." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSourceDataTypeL(TFourCC aDataType); + + /** + * Set the sample rate of the data sink in samples per second. + * + * @param "aSampleRate" "The sample rate, in samples per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSinkSampleRateL(TUint aSampleRate); + + /** + * Set the bit rate of the data sink in bits per second. + * + * @param "aSampleRate" "The bit rate, in bits per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSinkBitRateL(TUint aRate); + + /** + * Set the number of channels in the data sink. + * + * For example, one channel for mono, two channels for stereo etc. + * @param "aNumChannels" "The number of channels." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSinkNumChannelsL(TUint aNumChannels); + + /** + * Set the format of the data sink. + * + * The UID corresponds to the uid of the CMMFFormat-derived ECOM plugin to be used. + * @param "aFormatUid" "The format plugin to be used." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSinkFormatL(TUid aFormatUid); + + /** + * Set the fourCC code of the sink. + * + * @param "aDataType" "The fourCC code." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetSinkDataTypeL(TFourCC aDataType); + + /** + * Set the codec to be used. Useful when recording data. + * + * @param "aSourceDataType" "The data type of the source of the codec." + * @param "aSinkDataType" "The data type of the sink of the codec." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType); + + + /** + * Get the sample rate of the data source in samples per second. + * + * @param "aRate" "The sample rate, in samples per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSourceSampleRateL(TUint& aRate); + + /** + * Get the bit rate of the data source in bits per second. + * + * @param "aRate" "The bit rate, in bits per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSourceBitRateL(TUint& aRate); + + /** + * Get the number of channels in the data source. + * + * For example, one channel for mono, two channels for stereo etc. + * @param "aNumChannels" "The number of channels." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * since 2.8 + */ + void MacGetSourceNumChannelsL(TUint& aNumChannels); + + /** + * Get the format of the data source. + * + * The UID corresponds to the uid of the CMMFFormat-derived ECOM plugin being used. + * @param "aFormatUid" "The format plugin being used." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSourceFormatL(TUid& aFormat); + + /** + * Get the fourCC code of the source. + * + * @param "aDataType" "The fourCC code." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSourceDataTypeL(TFourCC& aDataType); + + /** + * Get the sample rate of the data sink in samples per second. + * + * @param "aRate" "The sample rate, in samples per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSinkSampleRateL(TUint& aRate); + + /** + * Get the bit rate of the data sink in bits per second. + * + * @param "aRate" "The bit rate, in bits per second." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSinkBitRateL(TUint& aRate); + + /** + * Get the number of channels in the data sink. + * + * For example, one channel for mono, two channels for stereo etc. + * @param "aNumChannels" "The number of channels." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSinkNumChannelsL(TUint& aNumChannels); + + /** + * Get the format of the data sink. + * + * The UID corresponds to the uid of the CMMFFormat-derived ECOM plugin being used. + * @param "aFormatUid" "The format plugin being used." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSinkFormatL(TUid& aFormat); + + /** + * Get the fourCC code of the sink. + * + * @param "aDataType" "The fourCC code." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSinkDataTypeL(TFourCC& aDataType); + + + /** + * Get the list of sample rates supported by the data source. + * + * @param "aSupportedRates" "The supported rates. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSourceSampleRatesL(RArray& aSupportedRates); + + /** + * Get the list of bit rates supported by the data source. + * + * @param "aSupportedRates" "The supported rates. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSourceBitRatesL(RArray& aSupportedRates); + + /** + * Get the list of channels supported by the data source L(ie mono, stereo etc). + * + * @param "aSupportedChannels" "The supported channels. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSourceNumChannelsL(RArray& aSupportedChannels); + + /** + * Get the list of fourCC codes supported by the data source. + * + * @param "aSupportedDataTypes" "The supported data types. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSourceDataTypesL(RArray& aSupportedDataTypes); + + /** + * Get the list of sample rates supported by the data sink. + * + * @param "aSupportedRates" "The supported rates. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSinkSampleRatesL(RArray& aSupportedRates); + + /** + * Get the list of bit rates supported by the data sink. + * + * @param "aSupportedRates" "The supported rates. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSinkBitRatesL(RArray& aSupportedRates); + + /** + * Get the list of channels supported by the data sink L(ie mono, stereo etc). + * + * @param "aSupportedChannels" "The supported channels. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSinkNumChannelsL(RArray& aSupportedChannels); + + /** + * Get the list of fourCC codes supported by the data sink. + * @param "aSupportedDataTypes" "The supported data types. Warning: Existing objects in this array will be removed by this method." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MacGetSupportedSinkDataTypesL(RArray& aSupportedDataTypes); + + + public: // From MMMFAudioPlayDeviceCustomCommandImplementor + + /** + * Set the volume of the sound device. + * + * @param "aVolume" "The new volume" + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MapdSetVolumeL(TInt aVolume); + + /** + * Get the maximum volume supported by the sound device. + * @param "aMaxVolume" "The maximum volume, to be filled in by the controller plugin." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MapdGetMaxVolumeL(TInt& aMaxVolume); + + /** + * Get the current playback volume. + * @param "aVolume" "The volume, to be filled in by the controller." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MapdGetVolumeL(TInt& aVolume); + + /** + * Set a volume ramp. + * + * This will cause the sound device to start playing with zero volume, + * increasing the volume over aRampDuration microseconds. + * + * The volume ramp can be removed by setting the ramp duration to zero. + * + * @param "aRampDuration" "The duration over which the volume is to be + * increased, in microseconds." + * @leave "This function can leave with one of the system-wide error codes. + * The request will be completed with the leave code." + */ + void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration); + + /** + * Set the balance between the left and right stereo audio channels. + * + * @param "aBalance" "Use a value between KMMFBalanceMaxLeft<\code> and + * KMMFBalanceMaxRight<\code>. Centre balance can be restored by using + * KMMFBalanceCenter<\code>." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MapdSetBalanceL(TInt aBalance); + + /** + * Retrieve the balance between the left and right stereo audio channels. + * + * @param "aBalance""The current balance, filled in by the controller." + * @leave "This function can leave with one of the system-wide error codes. The request will be + * completed with the leave code." + * @since 2.8 + */ + void MapdGetBalanceL(TInt& aBalance); + + + public: // MTtsCustomCommandImplementor + + /** + * Adds a new style. + * + * @param "TTtsStyle& aStyle" Style to add. + * @since 2.8 + */ + TTtsStyleID MttscAddStyleL( const TTtsStyle& aStyle ); + + /** + * Deletes a style based on style ID. + * + * @param "TTtsStyleID aID" Style ID to be deleted. + * @since 2.8 + */ + TInt MttscDeleteStyle( TTtsStyleID aID ); + + /** + * Gets the synthesis position. + * + * @retval "TInt& aWordIndex" Returned position of synthesis. + * @since 2.8 + */ + void MttscGetPositionL( TInt& aWordIndex ); + + /** + * Returns the number of registered styles. + * + * @return Number of styles. + * @since 2.8 + */ + TUint16 MttscNumberOfStyles(); + + /** + * Opens parsed text as source. + * + * @param "CTtsParsedText& aText" Reference to parsed text. + * @since 2.8 + */ + void MttscOpenParsedTextL( CTtsParsedText& aText ); + + /** + * Sets the synthesis position based on word index. + * + * @param "TInt aWordIndex" Word index. + * @since 2.8 + */ + void MttscSetPositionL( TInt aWordIndex ); + + /** + * Returns the style based on ID. + * + * @param "TTtsStyleID aStyleID" Style ID. + * @return Reference to style object. + * @since 2.8 + */ + TTtsStyle& MttscStyleL( TTtsStyleID aStyleID ); + + /** + * Returns the style based on index. + * + * @param "TUint16 aIndex" Style index. + * @return Reference to style object. + * @since 2.8 + */ + TTtsStyle& MttscStyleL( TUint16 aIndex ); + + /** + * Sets the default style parameters for synthesis. + * + * @param "const TTtsStyle& aStyle" Style created by the client + * @since 3.2 + */ + void MttscSetDefaultStyleL( const TTtsStyle& aStyle ); + + /** + * Returns the registered default style + * + * @return Style reference + * @leave KErrNotReady if no plugin is loaded to handle the function call + * @since 3.2 + */ + TTtsStyle& MttscDefaultStyleL(); + + /** + * Sets the speaking rate of synthesizer. + * + * @param TInt aRate Speaking rate value + * @leave KErrNotSupported if synthesizer does not support speaking rate setting + * @since 3.2 + */ + void MttscSetSpeakingRateL( 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 + * @since 3.2 + */ + TInt MttscSpeakingRateL(); + + /** + * Returns the list of supported languages. + * + * @param "RArray& aLanguages" Output parameter which contains + * the languages + * @leave KErrNotReady if no plugin is loaded to handle the function call + * @since 3.2 + */ + void MttscGetSupportedLanguagesL( RArray& aLanguages ); + + /** + * Returns the list of supported voices for a certain language. + * + * @param "TLanguage aLanguage" Language + * @param "RArray& aVoices" Output parameter which contains the voices + * @leave KErrNotReady if no plugin is loaded to handle the function call + * @since 3.2 + */ + void MttscGetSupportedVoicesL( TLanguage aLanguage, RArray& aVoices ); + + protected: // Functions from CMMFController + + /** + * Add a data source to the controller plugin. + * + * @param "aDataSource" "A reference to the data source to be added. + * The controller plugin may call aDataSource.DataSourceType() + * <\code> to find out exactly what type of source it is." + * @leave "" "The controller plugin may leave during this method. + * If the controller plugin does not support the data source, it + * should leave with KErrNotSupported<\code>. + * @since 2.8 + */ + void AddDataSourceL( MDataSource& aDataSource ); + + /** + * Add a data sink to the controller plugin. + * + * @param "aDatasink" "A reference to the data sink to be added. + * The controller plugin may call aDatasink.DatasinkType() + * <\code> to find out exactly what type of sink it is." + * @leave "" "The controller plugin may leave during this method. + * If the controller plugin does not support the data sink, it + * should leave with KErrNotSupported<\code>. + * @since 2.8 + */ + void AddDataSinkL( MDataSink& aDataSink ); + + /** + * Remove a data source from the controller plugin. + * + * @param "aDataSource" A reference to the data source to be removed. + * @leave "" "The controller plugin may leave during this method. + * If the controller plugin does not support the removal of data + * sources, it should leave with KErrNotSupported<\code>. + * If the controller plugin leaves, the data source will not be + * destroyed by the controller framework. If it does not leave, + * the data source will be destroyed. + * @since 2.8 + */ + void RemoveDataSourceL( MDataSource& aDataSource ); + + /** + * Remove a data sink from the controller plugin. + * + * @param "aDatasink" A reference to the data sink to be removed. + * @leave "" "The controller plugin may leave during this method. + * If the controller plugin does not support the removal of data sinks, + * it should leave with KErrNotSupported<\code>. If the + * controller plugin leaves, the data sink will not be destroyed by + * the controller framework. If it does not leave, the data sink + * will be destroyed. + * @since 2.8 + */ + void RemoveDataSinkL( MDataSink& aDataSink ); + + /** + * Reset the controller plugin. + * + * The controller should revert back to its newly constructed state. If + * the Reset is successful (i.e. it doesn't leave), the controller + * framework will delete all objects added to the MMFObjectManager + * including any sources and sinks. + * + * @leave "" "The controller plugin may leave during this method. + * If the controller plugin does not support being reset, + * it should leave with KErrNotSupported<\code>." + * @since 2.8 + */ + void ResetL(); + + /** + * Prime the controller plugin. + * + * The controller must prepare to start playing, by initialising its + * sources, sinks and buffers. This moves the controller from the + * STOPPED to the PRIMED state. + * + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void PrimeL(); + + /** + * Commence playback. + * + * The controller must now begin transferring data from its source(s) + * to its sink(s). This moves the controller from the PRIMED to the + * PLAYING state. + * + * Note: this method must return once playing has commenced, and not + * wait until playing is complete. + * + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void PlayL(); + + /** + * Pause the controller plugin. + * + * The controller must now cease transferring data from its source(s) + * to its sink(s). This moves the controller from the PLAYING back to + * the PRIMED state. + * + * A subsequent call to Play()<\code> will cause the controller + * plugin to resume playback from the point it was paused (unless + * there has been a call to SetPosition()<\code> in the meantime. + * + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void PauseL(); + + /** + * Stop the controller plugin. + * + * The controller must now undo anything that occurred during the call + * to Prime()<\code>. This moves the controller from the PRIMED + * back to the STOPPED state. + * + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void StopL(); + + /** + * Get the current position. + * + * The controller plugin should calculate the current position in microseconds. + * + * @return "The current position in microseconds." + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + TTimeIntervalMicroSeconds PositionL() const; + + /** + * Set the current position. + * + * The controller plugin should reposition itself to the position provided. + * + * @param "The desired position in microseconds." + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void SetPositionL( const TTimeIntervalMicroSeconds& aPosition ); + + /** + * Get the duration of the clip. + * + * The controller plugin should calculate the clip duration in microseconds. + * + * @return "The clip duration in microseconds." + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + TTimeIntervalMicroSeconds DurationL() const; + + /** + * Set the priority settings. + * + * The new priority settings must be applied to any resource being used + * by the controller plugin that requires priority settings (for example + * the sound device). + * + * @param "aPrioritySettings" "The new priority settings" + * @since 2.8 + */ + void SetPrioritySettings( const TMMFPrioritySettings& aPrioritySettings ); + + /** + * Handle a custom command. + * + * Custom commands allow a controller plugin to define its own API. + * If the controller framework does not understand a message from the + * client, it is assumed this is a custom command for the plugin and + * passed into this interface. + * + * The more common custom commands can be handled by Custom Command + * Parsers on behalf of the controller plugin. This allows the + * controller plugin to implement a concrete interface (defined by + * mixin classes) rather than having to decode the command itself. + * For more information, @see CMMFCustomCommandParserBase. + * + * The controller plugin must always complete the message passed + * into this method, even if it does not support the interface + * required by the message. + * + * @param "aMessage" "The message to be handled by the controller plugin." + * @since 2.8 + */ + void CustomCommand( TMMFMessage& aMessage ); + + /** + * Retrieve the number of meta data entries in the clip. + * + * @param "aNumberOfEntries" "The controller plugin must set this to + * the number of meta data entries in the clip." + * + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + void GetNumberOfMetaDataEntriesL( TInt& aNumberOfEntries ); + + /** + * Retrieve a meta data entry from the clip. + * + * @param "aIndex" "The index of the meta data entry to retrieve." + * @return "A pointer to a newly created CMMFMetaDataEntry object + * containing the meta information. The controller framework + * will take ownership of the object when this method returns." + * @leave "" "The controller plugin may leave during this method with + * any of the standard system-wide error codes." + * @since 2.8 + */ + CMMFMetaDataEntry* GetMetaDataEntryL( TInt aIndex ); + + + private: + + /** + * C++ default constructor. + */ + CTtsControllerPlugin(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor. + CTtsControllerPlugin( const CTtsControllerPlugin& ); + // Prohibit assigment operator. + CTtsControllerPlugin& operator=( const CTtsControllerPlugin& ); + + private: // Data + + // Implementation class + CTtsControllerPluginBody* iBody; + + // Reserved pointer for future extension + TAny* iReserved; + + }; + +#endif // TTSPLUGIN_H + +// End of File +