--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/ttscontrollerplugin/src/ttspluginbody.h Thu Dec 17 08:46:30 2009 +0200
@@ -0,0 +1,857 @@
+/*
+* 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: Class CTtsControllerPluginBody
+*
+*/
+
+
+
+#ifndef TTSPLUGINBODY_H
+#define TTSPLUGINBODY_H
+
+// INCLUDES
+#include <mmfcontroller.h>
+#include <nssdevtts.h>
+
+// FORWARD DECLARATIONS
+class CTtsControllerPlugin;
+class CTTSDataLoader;
+
+// CLASS DECLARATION
+
+/**
+* Implementation class for Tts controller plugin.
+*
+* @lib TtsPlugin.lib
+* @since 2.8
+*/
+class CTtsControllerPluginBody : public CActive, public MDevTTSObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CTtsControllerPluginBody* NewL( CTtsControllerPlugin* aObserver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CTtsControllerPluginBody();
+
+ public: // New functions
+
+ /**
+ * Add a data source to the controller plugin.
+ *
+ * @param "aDataSource" "A reference to the data source to be added.
+ * The controller plugin may call <code>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 <code>KErrNotSupported<\code>.
+ */
+ 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 <code>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 <code>KErrNotSupported<\code>.
+ */
+ 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 <code>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.
+ */
+ 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 <code>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.
+ */
+ 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 <code>KErrNotSupported<\code>."
+ */
+ 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."
+ */
+ 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."
+ */
+ 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 <code>Play()<\code> will cause the controller
+ * plugin to resume playback from the point it was paused (unless
+ * there has been a call to <code>SetPosition()<\code> in the meantime.
+ *
+ * @leave "" "The controller plugin may leave during this method with
+ * any of the standard system-wide error codes."
+ */
+ void PauseL();
+
+ /**
+ * Stop the controller plugin.
+ *
+ * The controller must now undo anything that occurred during the call
+ * to <code>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."
+ */
+ 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."
+ */
+ 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."
+ */
+ 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."
+ */
+ 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"
+ */
+ 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."
+ */
+ 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."
+ */
+ 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."
+ */
+ CMMFMetaDataEntry* GetMetaDataEntryL( TInt aIndex );
+
+
+ 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& 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 7.0s
+ */
+ virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& 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 7.0s
+ */
+ virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual 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."
+ */
+ virtual void MapdSetVolumeRampL( const TTimeIntervalMicroSeconds& aRampDuration );
+
+ /**
+ Set the balance between the left and right stereo audio channels.
+
+ @param "aBalance" "Use a value between <code>KMMFBalanceMaxLeft<\code> and
+ <code>KMMFBalanceMaxRight<\code>. Centre balance can be restored by using
+ <code>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 7.0s
+ */
+ virtual 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 7.0s
+ */
+ virtual void MapdGetBalanceL(TInt& aBalance);
+
+ public: // Functions from MTtsCustomCommandImplementor
+
+ /**
+ * Adds a new style.
+ *
+ * @param "TTtsStyle& aStyle" Style to add.
+ * @return Style identifier.
+ */
+ TTtsStyleID MttscAddStyleL( const TTtsStyle& aStyle );
+
+ /**
+ * Deletes a style based on style ID.
+ *
+ * @param "TTtsStyleID aID" Style ID to be deleted.
+ * @return Error code.
+ */
+ TInt MttscDeleteStyle( TTtsStyleID aID );
+
+ /**
+ * Gets the synthesis position.
+ *
+ * @retval "TInt& aWordIndex" Returned position of synthesis.
+ */
+ void MttscGetPositionL( TInt& aWordIndex );
+
+ /**
+ * Returns the number of registered styles.
+ *
+ * @return Number of styles.
+ */
+ TUint16 MttscNumberOfStyles();
+
+ /**
+ * Opens parsed text as source.
+ *
+ * @param "CTtsParsedText& aText" Reference to parsed text.
+ */
+ void MttscOpenParsedTextL( CTtsParsedText& aText );
+
+ /**
+ * Sets the synthesis position based on word index.
+ *
+ * @param "TInt aWordIndex" Word index.
+ */
+ void MttscSetPositionL( TInt aWordIndex );
+
+ /**
+ * Returns the style based on ID.
+ *
+ * @param "TTtsStyleID aStyleID" Style ID.
+ * @return Reference to style object.
+ */
+ TTtsStyle& MttscStyleL( TTtsStyleID aStyleID );
+
+ /**
+ * Returns the style based on index.
+ *
+ * @param "TUint16 aIndex" Style index.
+ * @return Reference to style object.
+ */
+ TTtsStyle& MttscStyleL( TUint16 aIndex );
+
+ /**
+ * Sets the default style parameters for synthesis.
+ *
+ * @param "const TTtsStyle& aStyle" Style created by the client
+ */
+ 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
+ */
+ TTtsStyle& MttscDefaultStyleL();
+
+ /**
+ * Sets the speaking rate of synthesizer.
+ *
+ * @param TInt aRate Speaking rate value
+ * @leave KErrNotSupported if synthesizer does not support speaking rate setting
+ */
+ 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
+ */
+ TInt MttscSpeakingRateL();
+
+ /**
+ * 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 MttscGetSupportedLanguagesL( RArray<TLanguage>& aLanguages );
+
+ /**
+ * Returns the list of supported voices for a certain language.
+ *
+ * @param "TLanguage aLanguage" Language
+ * @param "RArray<TTtsStyle>& aVoices" Output parameter which contains the voices
+ * @leave KErrNotReady if no plugin is loaded to handle the function call
+ */
+ void MttscGetSupportedVoicesL( TLanguage aLanguage, RArray<TTtsStyle>& aVoices );
+
+ public: // Functions from MDevTTSObserver
+
+ /**
+ * Invoked by DevTTS when it needs a configuration data package.
+ * TODO: Add start and endpoint parameters.
+ *
+ * @param "TUint32 aPackageType"
+ * Packege type identifier
+ * @param "TUint32 aPackageID"
+ * Package identifier
+ *
+ * @return Pointer to created data buffer. NULL if failure. User must
+ * take care of the buffer deletion after usage.
+ */
+ HBufC8* MdtoConfigurationData( TUint32 aPackageType,
+ TUint32 aPackageID,
+ TUint32 aStartPosition,
+ TUint32 aEndPosition );
+
+ /**
+ * Called by DevTTS when an event occured. EDevTTSEventComplete is the only
+ * event that can happen currently.
+ *
+ * @param "TDevTTSEvent aEvent"
+ * Event code
+ * @param "TInt aStatus"
+ * Error code. KErrNone if success, one of the system level
+ * error codes otherwise.
+ */
+ void MdtoEvent( TDevTTSEvent aEvent, TInt aStatus );
+
+ /**
+ * Called by DevTTS device when output mode is EDevTTSClientMode and a
+ * new audio buffer has been filled by the synthesizer.
+ *
+ * @param "TDesC8& aBuffer"
+ * Synthesized audio buffer.
+ */
+ void MdtoProcessBuffer( const TDesC8& aBuffer );
+
+ protected:
+ /**
+ * CActive::RunL
+ */
+ void RunL();
+
+ /**
+ * CActive::DoCancel()
+ */
+ void DoCancel();
+
+ /**
+ * Handles play asynchrnously
+ */
+ void HandlePlay();
+
+ /**
+ * Activates this active object.
+ */
+ void Ready();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CTtsControllerPluginBody( CTtsControllerPlugin* aObserver );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ // Prohibit copy constructor.
+ CTtsControllerPluginBody( const CTtsControllerPluginBody& );
+ // Prohibit assigment operator.
+ CTtsControllerPluginBody& operator=( const CTtsControllerPluginBody& );
+
+ /**
+ * Copies descriptor to parsed text with default style.
+ */
+ void ConstructParsedTextL( TDes8& aBufferPtr );
+
+ /**
+ * Copies parsed text structure to iParsedTextPointer.
+ * Deletes previous if exists
+ */
+ void CopyParsedTextL( CTtsParsedText& aText );
+
+ /**
+ * Does priming from AddDataSource
+ */
+ void DoEarlyPrimingL();
+
+ private: // Data
+
+ // TTP data loader, owned
+ CTTSDataLoader* iTtsLoader;
+
+ // Pointer to the DevTTS, owned
+ CDevTTS* iDevTts;
+
+ // Pointer to 'opened' parsed text object, owned
+ CTtsParsedText* iParsedTextPointer;
+
+ // Observer, not owned.
+ CTtsControllerPlugin* iObserver;
+
+ // Requested asynchronous function.
+ TInt iRequestFunction;
+
+ // Default style which will be used if no OpenParsedText is used
+ TTtsStyle iDefaultStyle;
+
+ // Style ID of default style
+ TTtsStyleID iDefaultStyleID;
+
+ // Tells if priming has been done already in AddDataSource
+ TBool iEarlyPrimingDone;
+
+ // ETrue if MttscSetDefaultStyleL() called
+ TBool iUserSpecifiedDefaultStyle;
+
+ // Output is currently either file or loudspeaker
+ TDevTTSOutputMode iTtsOutputMode;
+
+ // File server session
+ RFs iFs;
+
+ // Handle to the output file, not owned.
+ RFile* iOutputFile;
+
+ // Drive number (according TDriveNumber) where file handle is pointing
+ TInt iOutFileDriveNumber;
+
+ };
+
+#endif // TTSPLUGINBODY_H
+
+// End of File
+