diff -r 000000000000 -r 951a5db380a0 videoeditorengine/audioeditorengine/inc/AudClip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/audioeditorengine/inc/AudClip.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,387 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* +*/ + + + + +#ifndef __AUDCLIP_H__ +#define __AUDCLIP_H__ + + + +#include +#include + + +#include "AudCommon.h" +#include "AudObservers.h" + +/* +* Forward declarations. +*/ + +class CAudSong; +class CAudSongObserver; +class CAudClipInfo; +class MAudClipInfoObserver; + + +/* +* Constant definitions. +*/ + + +/** +* Individual audio clip stored as a single bitstream. +* +* @see CAudSong +*/ +class CAudClip : public CBase + { +public: + + /* Property methods. */ + + /** + * Returns an audio clip info object to get detailed information about + * the original audio clip. Note that the specified editing operations + * (for example, cutting or muting) do not + * affect the values returned by the info object. + * + * @return pointer to an audio clip info instance + */ + IMPORT_C CAudClipInfo* Info() const; + + /** + * Returns a boolean value that indicates whether this clip is normalized + * + * @return ETrue if normalized, EFalse otherwise + */ + IMPORT_C TBool Normalizing() const; + + /** + * Returns a dynamic level mark at the specified index + * If the index is illegal, the method panics with the code + * EIllegalDynamicLevelMarkIndex + * + * @return A dynamic level mark + */ + IMPORT_C TAudDynamicLevelMark DynamicLevelMark(TInt aIndex) const; + + /** + * Returns the number of dynamic level marks + * + * @return The number of dynamic level mark + */ + IMPORT_C TInt DynamicLevelMarkCount() const; + + /** + * Returns whether this clip is muted or not + * + * @return muting + */ + IMPORT_C TBool Muting() const; + + /** + * Sets the start time of this audio clip in clip timebase. + * Panics with EAudioClipIllegalStartTime if + * cut in time is illegal (negative). + * + * @param aCutInTime cut in time in microseconds in clip timebase + */ + IMPORT_C void SetStartTime(TTimeIntervalMicroSeconds aStartTime); + + /** + * Returns the start time of this audio clip in song timebase. + * + * @return start time in microseconds in song timebase + */ + IMPORT_C TTimeIntervalMicroSeconds StartTime() const; + + /** + * Returns the start time of this audio clip in song timebase. + * + * @return start time in milliseconds in song timebase + */ + TInt32 StartTimeMilliSeconds() const; + + + /** + * Returns the end time of this audio clip in song timebase. + * + * @return end time in microseconds in song timebase + */ + IMPORT_C TTimeIntervalMicroSeconds EndTime() const; + + /** + * Returns the duration of this audio clip with the specified + * editing operations applied (for example, cutting) + * + * @return duration in microseconds + */ + IMPORT_C TTimeIntervalMicroSeconds EditedDuration() const; + + /** + * Returns the priority of this audio clip + * + * @return priority + */ + IMPORT_C TInt Priority() const; + + /** + * Returns the index of this audio clip __on a track__ + * + * @return index + */ + IMPORT_C TInt IndexOnTrack() const; + + + /** + * Returns the track index of this audio clip in CAudSong + * + * @return track index + */ + IMPORT_C TInt TrackIndex() const; + + + + /* Song methods. */ + + /** + * Returns the song that this audio clip is part of. + * + * @return song + */ + IMPORT_C CAudSong* Song() const; + + /* Timing methods. */ + + /** + * Returns the cut in time of this audio clip in clip timebase. + * + * @return cut in time in microseconds in clip timebase + */ + IMPORT_C TTimeIntervalMicroSeconds CutInTime() const; + + /** + * Returns the cut in time of this audio clip in clip timebase. + * + * @return cut in time in milliseconds in clip timebase + */ + TInt32 CutInTimeMilliSeconds() const; + + /** + * Sets the cut in time of this audio clip in clip timebase. + * Panics with EAudioClipIllegalCutInTime if + * cut in time is illegal. + * + * @param aCutInTime cut in time in microseconds in clip timebase + */ + IMPORT_C void SetCutInTime(TTimeIntervalMicroSeconds aCutInTime); + + /** + * Returns the cut out time of this audio clip in clip timebase. + * + * @return cut out time in microseconds in clip timebase + */ + IMPORT_C TTimeIntervalMicroSeconds CutOutTime() const; + + /** + * Returns the cut out time of this audio clip in clip timebase. + * + * @return cut out time in milliseconds in clip timebase + */ + TInt32 CutOutTimeMilliSeconds() const; + + /** + * Sets the cut out time of this audio clip in clip timebase. + * Panics with EAudioClipIllegalCutOutTime if + * cut out time is illegal. + * + * @param aCutOutTime cut out time in microseconds in clip timebase + */ + IMPORT_C void SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime); + + /** + * Sets the priority of this audio clip + * + * @param aPriority priority, >= 0 + * + * @return ETrue if aPriority >= 0 + * EFalse if aPriority < 0, priority not set + * + */ + IMPORT_C TBool SetPriority(TInt aPriority); + + + /* Processing methods */ + + /** + * Inserts a dynamic level mark to a clip. + * If time of the given mark is illegal + * EIllegalDynamicLevelMark-panic is raised + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * + * @param aMark mark to be added in clip time domain + * @return index of the mark inserted + */ + IMPORT_C TInt InsertDynamicLevelMarkL(const TAudDynamicLevelMark& aMark); + + /** + * Removes a dynamic level mark in a clip. + * Panics with code EAudioClipIllegalIndex + * if the clip index is invalid. + * + * @param aIndex index of the removed mark in this clip + * @return ETrue if mark was removed, EFalse otherwise + */ + IMPORT_C TBool RemoveDynamicLevelMark(TInt aIndex); + + /** + * Sets whether this clip is muted or not. + * + * @param aMuting ETrue to mute the audio clip; + * EFalse not to mute the audio clip + */ + IMPORT_C void SetMuting(TBool aMuted); + + /** + * Sets whether this clip is normalized + * + * @param aNormalizing ETrue if normalized + * EFalse otherwise + */ + IMPORT_C void SetNormalizing(TBool aNormalizing); + + IMPORT_C void Reset(TBool aNotify); + + /** + * Sets common volume gain for the clip. It is used to store + * the gain; the actual processing will be based on dynamic level + * marks which are set based on the gain value just before processing. + * Since global gain setting may affect the dynamic level mark, + * we need different variable to store the clip-specific gain also after the processing. + * I.e. dynamic level marks do not have effect to this value. + * + * @param aVolumeGain + */ + IMPORT_C void SetVolumeGain(TInt aVolumeGain); + + /** + * Gets common volume gain for the clip. + * Since global gain setting may affect the dynamic level mark, + * we need different variable to store the clip-specific gain also after the processing. + * + * @param aVolumeGain + */ + IMPORT_C TInt GetVolumeGain(); + + /** + * + * Compare is used by RPointerArray::Sort() + * + */ + static TInt Compare(const CAudClip &c1, const CAudClip &c2); + + +protected: + + +private: + + + + /* Constructors. */ + + static CAudClip* NewL(CAudSong* aSong, const TDesC& aFileName, + TTimeIntervalMicroSeconds aStartTime, + MAudClipInfoObserver& aObserver, TInt aTrackIndex); + + static CAudClip* NewL(CAudSong* aSong, RFile* aFileHandle, + TTimeIntervalMicroSeconds aStartTime, + MAudClipInfoObserver& aObserver, TInt aTrackIndex); + + CAudClip(CAudSong* aSong); + + void ConstructL(const TDesC& aFileName, + TTimeIntervalMicroSeconds aStartTime, + MAudClipInfoObserver& aObserver, TInt aTrackIndex); + + void ConstructL(RFile* aFileHandle, + TTimeIntervalMicroSeconds aStartTime, + MAudClipInfoObserver& aObserver, TInt aTrackIndex); + + /* Destructor. */ + + /** + * Destroys the object and releases all resources. + */ + virtual ~CAudClip(); + +private: + // Member variables + + // Song class this clip is part of. + CAudSong* iSong; + // File of the audio clip. + RFile iFile; + + + // Info class of this audio clip. + CAudClipInfo* iInfo; + + // Cut in time of this audio clip. + TTimeIntervalMicroSeconds iCutInTime; + // Cut out time of this audio clip. + TTimeIntervalMicroSeconds iCutOutTime; + // Start time of this audio clip. + TTimeIntervalMicroSeconds iStartTime; + + // Muting of this audio clip. + // If ETrue, the clip is to be muted + TBool iMute; + + // Normalizing of this audio clip. + // If ETrue, the clip is to be normalized + TBool iNormalize; + + // Priority of this audio clip. + TInt iPriority; + + // index of this clip in CAudSong + TInt iIndex; + + // track index of this clip + TInt iTrackIndex; + + TInt iVolumeGain; + + // Marks used for manual level controlling + RPointerArray iDynamicLevelMarkArray; + + friend class CAudSong; + friend class CAudSongAddClipOperation; + friend class RPointerArray; + + }; + + +#endif // __AUDCLIP_H__ +