williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef MDAAUDIOSAMPLEEDITOR_H williamr@2: #define MDAAUDIOSAMPLEEDITOR_H williamr@2: williamr@2: williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class CMdaServer; williamr@2: williamr@2: /** williamr@2: * @publishedAll williamr@2: * @deprecated williamr@2: * williamr@2: * Dummy class - not supported in 7.0s williamr@2: */ williamr@2: class CMdaAudioType : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Destructor williamr@2: */ williamr@2: IMPORT_C ~CMdaAudioType(); williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This class is used by both the audio recorder and audio converter. This class should not be used, williamr@2: other than the TState enum. williamr@2: williamr@2: Prior to 7.0s the pure virtual functions in this class were implemented virtual functions. In 7.0s williamr@2: this changed, so now any classes derived from this one must implement the functions themselves. williamr@2: williamr@2: @see CMdaAudioRecorderUtility williamr@2: @see CMdaAudioConvertUtility williamr@2: */ williamr@2: class CMdaAudioClipUtility : public CBase, williamr@2: public MMMFClientUtility williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Defines the possible state of the audio data sample. williamr@2: */ williamr@2: enum TState williamr@2: { williamr@2: /** The audio clip recorder or audio converter has been constructed but no file or descriptor williamr@2: has been opened. williamr@2: */ williamr@2: ENotReady = 0, williamr@2: /** Files or descriptors are open but no playing or recording operation is in progress. williamr@2: */ williamr@2: EOpen, williamr@2: /** Audio sample data is playing. williamr@2: */ williamr@2: EPlaying, williamr@2: /** New audio sample data is being recorded. williamr@2: */ williamr@2: ERecording williamr@2: }; williamr@2: williamr@2: public: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Returns the current state of the audio sample data. williamr@2: williamr@2: @return The state of the audio sample data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual TState State()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Releases any currently open audio sample data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void Close()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Begins playback of audio sample data at the current playback position using the current volume, williamr@2: gain and priority settings. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void PlayL()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Starts appending new audio sample data. williamr@2: williamr@2: The new audio sample data is appended to the existing audio sample data in the same format as williamr@2: the existing audio sample data. If existing data is to be overwritten, then it should be cropped williamr@2: to the appropriate length before appending the new data. williamr@2: williamr@2: Note, before starting to record, make sure that the gain is set by calling williamr@2: CMdaAudioRecorderUtility::SetGain(), as the initial gain is undefined. The gain might also williamr@2: have been modified by another client application. williamr@2: williamr@2: williamr@2: @since 5.0 williamr@2: @see CMdaAudioRecorderUtility williamr@2: @see CMdaAudioRecorderUtility::SetGain() williamr@2: */ williamr@2: virtual void RecordL()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Stops the playback or recording operation. williamr@2: williamr@2: The operation is stopped at the current location. For a playback operation, the head is positioned at the last played data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void Stop()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Deletes all audio sample data after the current head position. The effects of the function cannot be undone. williamr@2: williamr@2: The function is synchronous and can leave if there is a problem. The leave code depends on the configuration. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void CropL()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Sets the head position. williamr@2: williamr@2: The playback head is moved to a position which is defined in terms of a time interval measured williamr@2: from the beginning of the audio sample data. A subsequent call to PlayL() starts from williamr@2: this new position. williamr@2: williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void SetPosition(const TTimeIntervalMicroSeconds& aPosition)=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Returns the current head position. williamr@2: williamr@2: The head position is defined in terms of a time interval measured from the beginning of the audio sample data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual const TTimeIntervalMicroSeconds& Position()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Returns the recording time available for the selected file or descriptor and encoding format. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual const TTimeIntervalMicroSeconds& RecordTimeAvailable()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Returns the duration of the audio sample data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual const TTimeIntervalMicroSeconds& Duration()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Defines a window on the audio sample data. williamr@2: williamr@2: The window is defined in terms of a start and end position. williamr@2: When the current playback position reaches the window end position, or Stop() is called, the williamr@2: current playback position is set to the window start position and playback stops. williamr@2: williamr@2: The current playback position is not affected by a call to SetPlayWindow() unless it is outside williamr@2: the new playback window, in which case it is set to the window start or end position depending williamr@2: on which one is closer. williamr@2: williamr@2: The window persists until ClearPlayWindow() is called. williamr@2: Loading new audio sample data without adjusting or clearing the window will result in williamr@2: playback errors if the window is outside the new data. williamr@2: williamr@2: @param aStart williamr@2: The position defining the start of the window, measured in microseconds. If this williamr@2: value is less than zero, it is set to zero. If this value is greater than aEnd, williamr@2: then it is swapped with aEnd. williamr@2: @param aEnd williamr@2: The position defining the end of the window, measured in microseconds. If this value williamr@2: is greater than the value returned by Duration(), it is set to the value of Duration(). williamr@2: If this value is less than aStart, then it is swapped with aStart. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd)=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Removes any window defined on the audio sample data. williamr@2: williamr@2: All subsequent playing, position setting and position querying requests are mapped to the whole of the audio sample data. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void ClearPlayWindow()=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Sets the number of times the audio sample is to be repeated during the PlayL() operation. williamr@2: williamr@2: A period of silence can follow each playing of the audio sample. The audio sample can be repeated williamr@2: indefinitely or until stopped. williamr@2: williamr@2: @param aRepeatNumberOfTimes williamr@2: The number of times the audio sample, together with the trailing silence, is to williamr@2: be repeated. If this is set to KMdaRepeatForever, then the audio sample, together with williamr@2: the trailing silence, is repeated indefinitely. If this is set to zero, then the audio williamr@2: sample is not repeated. williamr@2: @param aTrailingSilence williamr@2: The length of the trailing silence in microseconds. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence)=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: This function is no longer supported. It is provided for binary compatibility with previous williamr@2: releases and always leaves with KErrNotSupported. williamr@2: williamr@2: @return Always returns NULL. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual CMdaAudioType* TypeL(); williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Sets the maximum size for a file that is being recorded. williamr@2: williamr@2: When this limit is reached, MMF stops recording and notifies the client application. Notification is caused williamr@2: by MMdaObjectStateChangeObserver::MoscoStateChangeEvent() with the error code KErrEof. williamr@2: williamr@2: This function is provided so that applications such as recorders can limit the amount of file storage/memory williamr@2: that should be allocated. williamr@2: williamr@2: @param aMaxWriteLength williamr@2: The maximum file size in kilobytes. If the default value is used, there is no maximum file size. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void SetMaxWriteLength(TInt aMaxWriteLength = KMdaClipLocationMaxWriteLengthNone)=0; williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Deletes all audio sample data from the beginning of the audio clip. The effects of the function cannot be undone. williamr@2: williamr@2: The function is synchronous and can leave if there is a problem. The leave code depends on the configuration. williamr@2: williamr@2: @since 5.0 williamr@2: */ williamr@2: virtual void CropFromBeginningL()=0; williamr@2: public: williamr@2: // Reserved functions - do not call - to allow virtual additional functions to be added to class williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Reserved function williamr@2: */ williamr@2: virtual void ClipUtil_Reserved3(); williamr@2: williamr@2: /** williamr@2: @internalTechnology williamr@2: williamr@2: Reserved function williamr@2: */ williamr@2: virtual void ClipUtil_Reserved4(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CMMFMdaAudioRecorderUtility; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Plays back, records and edits audio sample data. williamr@2: williamr@2: The class offers an interface to play, record and edit audio sample data. This data can be supplied williamr@2: either in a file or as a descriptor. The functions that start and stop playback and recording are williamr@2: defined in the base class CMdaAudioClipUtility. williamr@2: williamr@2: While this class is abstract, the static NewL() function constructs, initialises and returns a williamr@2: pointer to an instance of a concrete class derived from this abstract class. This concrete class williamr@2: is part of the MMF implementation and is private. williamr@2: williamr@2: */ williamr@2: class CMdaAudioRecorderUtility : public CMdaAudioClipUtility williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Device mode. Used by SetAudioDeviceMode method which is not used from 7.0s williamr@2: @since 5.0 williamr@2: */ williamr@2: enum TDeviceMode williamr@2: { williamr@2: /** williamr@2: The default behaviour. williamr@2: williamr@2: When recording: williamr@2: If a telephony call is in progress, an attempt is made to connect to the telephony downlink williamr@2: plus the device microphone. If there is no telephony call in progress or a connection to the williamr@2: telephony downlink fails, an attempt is made to connect to the device microphone only. williamr@2: williamr@2: When playing: williamr@2: If a telephony call is in progress, an attempt is made to connect to the telephony uplink. williamr@2: If there is no telephony call in progress or a connection to the telephony uplink fails, an williamr@2: attempt is made to connect to the device speaker. williamr@2: */ williamr@2: EDefault = 0, williamr@2: /** See EDefault. williamr@2: */ williamr@2: ETelephonyOrLocal = EDefault, williamr@2: /** williamr@2: When recording: williamr@2: If a telephony call is in progress the audio source is the telephony downlink mixed with williamr@2: the device microphone. If there is no telephony call in progress or a connection to the telephony williamr@2: downlink fails, no attempt is made to connect to the microphone. williamr@2: williamr@2: When playing: williamr@2: If a telephony call is in progress the audio sample data is played to the telephony uplink and williamr@2: the device speaker. If there is no telephony call in progress or a connection to the telephony williamr@2: uplink fails, no attempt is made to connect to the device speaker. williamr@2: */ williamr@2: ETelephonyMixed = 1, williamr@2: /** williamr@2: When recording, the audio source is the telephony downlink and is not mixed with the device microphone. williamr@2: williamr@2: When playing, the audio sample data is played to the telephony uplink and is not mixed with the williamr@2: device speaker. williamr@2: */ williamr@2: ETelephonyNonMixed = 2, williamr@2: /** williamr@2: When recording, the audio source is the device microphone. williamr@2: williamr@2: When playing, the audio sample data is played to the device speaker. williamr@2: */ williamr@2: ELocal = 3 williamr@2: }; williamr@2: williamr@2: virtual ~CMdaAudioRecorderUtility(); williamr@2: williamr@2: IMPORT_C static CMdaAudioRecorderUtility* NewL( williamr@2: MMdaObjectStateChangeObserver& aObserver, williamr@2: CMdaServer* aServer = NULL, williamr@2: TInt aPriority = EMdaPriorityNormal, williamr@4: TInt aPref = EMdaPriorityPreferenceTimeAndQuality); williamr@2: williamr@2: virtual void OpenFileL(const TDesC& aFileName); williamr@2: IMPORT_C void OpenFileL(const RFile& aFile); williamr@2: williamr@2: IMPORT_C void OpenFileL(const TMMSource& aSource); williamr@2: williamr@2: virtual void OpenDesL(const TDesC8& aDescriptor); williamr@2: williamr@2: IMPORT_C void OpenDesL(TDes8& aDescriptor); williamr@2: williamr@2: virtual void OpenL(TMdaClipLocation* aLocation, williamr@2: TMdaClipFormat* aFormat, williamr@2: TMdaPackage* aArg1 = NULL, williamr@2: TMdaPackage* aArg2 = NULL); williamr@2: williamr@2: virtual void SetAudioDeviceMode(TDeviceMode aMode); williamr@2: williamr@2: virtual TInt MaxVolume(); williamr@2: williamr@2: virtual TInt MaxGain(); williamr@2: williamr@2: virtual TInt SetVolume(TInt aVolume); williamr@2: williamr@2: virtual void SetGain(TInt aGain); williamr@2: williamr@2: virtual void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); williamr@2: williamr@2: IMPORT_C void OpenFileL(const TDesC& aFileName, williamr@2: TUid aRecordControllerUid, // controller to use williamr@2: TUid aPlaybackControllerUid=KNullUid, // playback controller (if different) williamr@2: TUid aDestinationFormatUid=KNullUid, // Data format williamr@2: TFourCC aDestinationDataType = KFourCCNULL); // data type for recording williamr@2: williamr@2: IMPORT_C void OpenFileL(const RFile& aFile, williamr@2: TUid aRecordControllerUid, // controller to use williamr@2: TUid aPlaybackControllerUid=KNullUid, // playback controller (if different) williamr@2: TUid aDestinationFormatUid=KNullUid, // Data format williamr@2: TFourCC aDestinationDataType = KFourCCNULL); // data type for recording williamr@2: williamr@2: IMPORT_C void OpenFileL(const TMMSource& aSource, williamr@2: TUid aRecordControllerUid, // controller to use williamr@2: TUid aPlaybackControllerUid=KNullUid, // playback controller (if different) williamr@2: TUid aDestinationFormatUid=KNullUid, // Data format williamr@2: TFourCC aDestinationDataType = KFourCCNULL); // data type for recording williamr@2: williamr@2: IMPORT_C void OpenDesL(TDes8& aDescriptor, williamr@2: TUid aRecordControllerUid, // controller to use williamr@2: TUid aPlaybackControllerUid=KNullUid, // playback controller (if different) williamr@2: TUid aDestinationFormatUid=KNullUid, // Data format williamr@2: TFourCC aDestinationDataType = KFourCCNULL); // data type for recording williamr@2: williamr@2: IMPORT_C void OpenUrlL(const TDesC& aUrl, williamr@2: TInt aIapId, // internet access point williamr@2: TUid aRecordControllerUid, // controller to use williamr@2: TUid aPlaybackControllerUid=KNullUid, // playback controller (if different) williamr@2: TUid aDestinationFormatUid=KNullUid, // Data format williamr@2: TFourCC aDestinationDataType = KFourCCNULL); // data type for recording williamr@2: williamr@2: IMPORT_C void OpenUrlL(const TDesC& aUrl, williamr@2: TInt aIapId =KUseDefaultIap, williamr@2: const TDesC8& aMimeType = KNullDesC8); williamr@2: williamr@2: IMPORT_C TInt GetGain(TInt& aGain); williamr@2: williamr@2: IMPORT_C TInt GetVolume(TInt& aVolume); williamr@2: williamr@2: IMPORT_C TInt SetPlaybackBalance(TInt aBalance = KMMFBalanceCenter); williamr@2: williamr@2: IMPORT_C TInt GetPlaybackBalance(TInt& aBalance); williamr@2: williamr@2: IMPORT_C TInt SetRecordBalance(TInt aBalance = KMMFBalanceCenter); williamr@2: williamr@2: IMPORT_C TInt GetRecordBalance(TInt& aBalance); williamr@2: williamr@2: IMPORT_C TInt GetNumberOfMetaDataEntries(TInt& aNumEntries); williamr@2: williamr@2: IMPORT_C CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex); williamr@2: williamr@2: IMPORT_C void AddMetaDataEntryL(CMMFMetaDataEntry& aMetaDataEntry); williamr@2: williamr@2: IMPORT_C TInt RemoveMetaDataEntry(TInt aMetaDataIndex); williamr@2: williamr@2: IMPORT_C void ReplaceMetaDataEntryL(TInt aMetaDataIndex, CMMFMetaDataEntry& aMetaDataEntry); williamr@2: williamr@4: IMPORT_C void SetPriority(TInt aPriority, TInt aPref); williamr@2: williamr@2: //DataType support williamr@2: williamr@2: IMPORT_C void GetSupportedDestinationDataTypesL(RArray& aSupportedDataTypes); williamr@2: williamr@2: IMPORT_C void SetDestinationDataTypeL(TFourCC aDataType); williamr@2: williamr@2: IMPORT_C TFourCC DestinationDataTypeL(); williamr@2: williamr@2: // Bit rate support williamr@2: williamr@2: IMPORT_C void SetDestinationBitRateL(TUint aBitRate); williamr@2: williamr@2: IMPORT_C TUint DestinationBitRateL(); williamr@2: williamr@2: IMPORT_C TUint SourceBitRateL(); williamr@2: williamr@2: IMPORT_C void GetSupportedBitRatesL(RArray& aSupportedBitRates); williamr@2: williamr@2: // Sample rate support williamr@2: williamr@2: IMPORT_C void SetDestinationSampleRateL(TUint aSampleRate); williamr@2: williamr@2: IMPORT_C TUint DestinationSampleRateL(); williamr@2: williamr@2: IMPORT_C void GetSupportedSampleRatesL(RArray& aSupportedSampleRates); williamr@2: // Format support williamr@2: williamr@2: IMPORT_C void SetDestinationFormatL(TUid aFormatUid); williamr@2: williamr@2: IMPORT_C TUid DestinationFormatL(); williamr@2: williamr@2: // Number of channels williamr@2: IMPORT_C void SetDestinationNumberOfChannelsL(TUint aNumberOfChannels); williamr@2: williamr@2: IMPORT_C TUint DestinationNumberOfChannelsL(); williamr@2: williamr@2: IMPORT_C void GetSupportedNumberOfChannelsL(RArray& aSupportedNumChannels); williamr@2: williamr@2: virtual TState State(); williamr@2: williamr@2: virtual void Close(); williamr@2: williamr@2: virtual void PlayL(); williamr@2: williamr@2: virtual void RecordL(); williamr@2: williamr@2: virtual void Stop(); williamr@2: williamr@2: virtual void CropL(); williamr@2: williamr@2: virtual void SetPosition(const TTimeIntervalMicroSeconds& aPosition); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& Position(); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& RecordTimeAvailable(); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& Duration(); williamr@2: williamr@2: IMPORT_C TMMFDurationInfo Duration(TTimeIntervalMicroSeconds& aDuration); williamr@2: williamr@2: virtual void SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd); williamr@2: williamr@2: virtual void ClearPlayWindow(); williamr@2: williamr@2: virtual void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); williamr@2: williamr@2: virtual void SetMaxWriteLength(TInt aMaxWriteLength = KMdaClipLocationMaxWriteLengthNone); williamr@2: williamr@2: virtual void CropFromBeginningL(); williamr@2: williamr@2: IMPORT_C void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback); williamr@2: williamr@2: IMPORT_C void GetAudioLoadingProgressL(TInt& aPercentageComplete); williamr@2: williamr@2: IMPORT_C const CMMFControllerImplementationInformation& AudioPlayControllerImplementationInformationL(); williamr@2: williamr@2: IMPORT_C const CMMFControllerImplementationInformation& AudioRecorderControllerImplementationInformationL(); williamr@2: williamr@2: IMPORT_C TInt RecordControllerCustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); williamr@2: williamr@2: IMPORT_C TInt RecordControllerCustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); williamr@2: williamr@2: IMPORT_C void RecordControllerCustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void RecordControllerCustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C TInt PlayControllerCustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); williamr@2: williamr@2: IMPORT_C TInt PlayControllerCustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); williamr@2: williamr@2: IMPORT_C void PlayControllerCustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void PlayControllerCustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C MMMFDRMCustomCommand* GetDRMCustomCommand(); williamr@2: williamr@2: IMPORT_C TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback,TUid aNotificationEventUid,const TDesC8& aNotificationRegistrationData = KNullDesC8); williamr@2: williamr@2: IMPORT_C TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId); williamr@2: williamr@2: IMPORT_C TInt WillResumePlay(); williamr@2: williamr@2: IMPORT_C TInt SetThreadPriorityPlayback(const TThreadPriority& aThreadPriority) const; williamr@2: IMPORT_C TInt SetThreadPriorityRecord(const TThreadPriority& aThreadPriority) const; williamr@2: williamr@2: IMPORT_C void UseSharedHeap(); williamr@2: private: williamr@2: CMMFMdaAudioRecorderUtility* iProperties; williamr@2: }; williamr@2: williamr@2: class CMMFMdaAudioConvertUtility; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Converts the type, sample rate and format of audio data. williamr@2: williamr@2: The audio sample data can be supplied either in a file or as a descriptor. williamr@2: */ williamr@2: class CMdaAudioConvertUtility : public CMdaAudioClipUtility williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C static CMdaAudioConvertUtility* NewL( williamr@2: MMdaObjectStateChangeObserver& aObserver, williamr@2: CMdaServer* aServer = NULL, williamr@2: TInt aPriority = EMdaPriorityNormal, williamr@4: TInt aPref = EMdaPriorityPreferenceTimeAndQuality); williamr@2: williamr@2: virtual ~CMdaAudioConvertUtility(); williamr@2: williamr@2: virtual void OpenL(const TDesC& aPrimaryFile, const TDesC& aSecondaryFile); williamr@2: williamr@2: virtual void OpenL(const TDesC& aPrimaryFile, williamr@2: TMdaClipLocation* aLocation, // Normally file or descriptor williamr@2: TMdaClipFormat* aFormat, // Data format williamr@2: TMdaPackage* aArg1 = NULL, // Normally codec to use williamr@2: TMdaPackage* aArg2 = NULL); // Normally audio settings williamr@2: williamr@2: virtual void OpenL(TMdaClipLocation* aPriLocation, williamr@2: TMdaClipLocation* aSecLocation, williamr@2: TMdaClipFormat* aPriFormat, williamr@2: TMdaClipFormat* aSecFormat, williamr@2: TMdaPackage* aPriArg1 = NULL, williamr@2: TMdaPackage* aPriArg2 = NULL, williamr@2: TMdaPackage* aSecArg1 = NULL, williamr@2: TMdaPackage* aSecArg2 = NULL); williamr@2: williamr@2: // new controller based open williamr@2: // N.B. this override is new and must NOT be made virtual. This is because williamr@2: // it will break BC on the WINS build (due to the MS compiler grouping and williamr@2: // reordering the overrides together in the vtable and _not_ using the williamr@2: // declaration order!) williamr@2: williamr@2: IMPORT_C void OpenL(TMdaClipLocation* aPriLocation, williamr@2: TMdaClipLocation* aSecLocation, williamr@2: TUid aControllerUid, williamr@2: TUid aDestFormatUid, williamr@2: TFourCC aDestDataType); williamr@2: williamr@2: //Data type support williamr@2: williamr@2: IMPORT_C void GetSupportedDestinationDataTypesL(RArray& aSupportedDestinationDataTypes); williamr@2: williamr@2: IMPORT_C void SetDestinationDataTypeL(TFourCC aDataType); williamr@2: williamr@2: IMPORT_C TFourCC DestinationDataTypeL(); williamr@2: williamr@2: IMPORT_C TFourCC SourceDataTypeL(); williamr@2: // Bit rate support williamr@2: williamr@2: IMPORT_C void SetDestinationBitRateL(TUint aBitRate); williamr@2: williamr@2: IMPORT_C TUint DestinationBitRateL(); williamr@2: williamr@2: IMPORT_C void GetSupportedConversionBitRatesL(RArray& aSupportedBitRates); williamr@2: williamr@2: IMPORT_C TInt SourceBitRateL(); williamr@2: williamr@2: // Sample rate support williamr@2: IMPORT_C void SetDestinationSampleRateL(TUint aSampleRate); williamr@2: williamr@2: IMPORT_C TUint DestinationSampleRateL(); williamr@2: williamr@2: IMPORT_C void GetSupportedConversionSampleRatesL(RArray& aSupportedSampleRates); williamr@2: williamr@2: IMPORT_C TUint SourceSampleRateL(); williamr@2: williamr@2: // Format support williamr@2: IMPORT_C void SetDestinationFormatL(TUid aFormatUid); williamr@2: williamr@2: IMPORT_C TUid DestinationFormatL(); williamr@2: williamr@2: IMPORT_C TUid SourceFormatL(); williamr@2: williamr@2: // Number of channels williamr@2: IMPORT_C void SetDestinationNumberOfChannelsL(TUint aNumberOfChannels); williamr@2: williamr@2: IMPORT_C TUint DestinationNumberOfChannelsL(); williamr@2: williamr@2: IMPORT_C void GetSupportedConversionNumberOfChannelsL(RArray& aSupportedNumChannels); williamr@2: williamr@2: IMPORT_C TUint SourceNumberOfChannelsL(); williamr@2: williamr@2: // New function ConvertL (PlayL and RecordL now deprecated for CMdaAudioConvertUtility) williamr@2: IMPORT_C void ConvertL(); williamr@2: williamr@2: virtual TState State(); williamr@2: williamr@2: virtual void Close(); williamr@2: williamr@2: virtual void PlayL(); williamr@2: williamr@2: virtual void RecordL(); williamr@2: williamr@2: virtual void Stop(); williamr@2: williamr@2: virtual void CropL(); williamr@2: williamr@2: virtual void SetPosition(const TTimeIntervalMicroSeconds& aPosition); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& Position(); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& RecordTimeAvailable(); williamr@2: williamr@2: virtual const TTimeIntervalMicroSeconds& Duration(); williamr@2: williamr@2: virtual void SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd); williamr@2: williamr@2: virtual void ClearPlayWindow(); williamr@2: williamr@2: virtual void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); williamr@2: williamr@2: virtual void SetMaxWriteLength(TInt aMaxWriteLength = KMdaClipLocationMaxWriteLengthNone); williamr@2: williamr@2: virtual void CropFromBeginningL(); williamr@2: williamr@2: IMPORT_C const CMMFControllerImplementationInformation& ControllerImplementationInformationL(); williamr@2: williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); williamr@2: williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); williamr@2: williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C TInt SetThreadPriority(const TThreadPriority& aThreadPriority) const; williamr@2: williamr@2: IMPORT_C void UseSharedHeap(); williamr@2: private: williamr@2: CMMFMdaAudioConvertUtility* iProperties; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif