videoeditorengine/audioeditorengine/inc/AudClip.h
changeset 0 951a5db380a0
--- /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 <e32base.h>
+#include <f32file.h>
+
+
+#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 <em>not</em>
+    * 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 
+    * <code>EIllegalDynamicLevelMarkIndex</code> 
+    *
+    * @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 <code>EAudioClipIllegalStartTime</code> 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 <code>EAudioClipIllegalCutInTime</code> 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 <code>EAudioClipIllegalCutOutTime</code> 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
+    * <code>EIllegalDynamicLevelMark</code>-panic is raised
+    *
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> 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 <code>EAudioClipIllegalIndex</code> 
+    * 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  <code>ETrue</code> to mute the audio clip;
+    *                 <code>EFalse</code> not to mute the audio clip
+    */
+    IMPORT_C void SetMuting(TBool aMuted);
+    
+    /**
+    * Sets whether this clip is normalized
+    * 
+    * @param  aNormalizing <code>ETrue</code> if normalized 
+    *                        <code>EFalse</code> 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<TAudDynamicLevelMark> iDynamicLevelMarkArray;
+    
+    friend class CAudSong;
+    friend class CAudSongAddClipOperation;
+    friend class RPointerArray<CAudClip>;
+    
+    };
+
+
+#endif // __AUDCLIP_H__
+