diff -r 000000000000 -r bde4ae8d615e os/mm/mmlibs/mmfw/MIDI/src/midiclientutilitybody.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/mm/mmlibs/mmfw/MIDI/src/midiclientutilitybody.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,251 @@ +// Copyright (c) 2003-2009 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: +// + +#ifndef __MIDICLIENTUTILITYBODY_H__ +#define __MIDICLIENTUTILITYBODY_H__ + +#include +#include +#include +#include +#include "mmfclientutility.h" + + +/** +Mixin class to allow notification that the timed silence has finished. +*/ +class MRepeatTrailingSilenceTimerObs + { +public: + virtual void RepeatTrailingSilenceTimerComplete() = 0; + }; + +/** +CTimer-based active object that waits the requested time before notifying its observer. +*/ +class CRepeatTrailingSilenceTimer : public CTimer + { +public: + static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs); + void RunL(); +private: + CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs); +private: + MRepeatTrailingSilenceTimerObs& iObs; + }; + + +class MMidiControllerEventMonitorObserver + { +public: + virtual void HandleMidiEvent(const CMMFMidiEvent& aEvent) = 0; + }; + + +class CMidiControllerEventMonitor : public CActive + { +public: + static CMidiControllerEventMonitor* NewL(MMidiControllerEventMonitorObserver& aMidiObserver, + RMidiControllerCustomCommands& aMidiControllerCustomCommands, + const CMidiClientUtility& aParent); + ~CMidiControllerEventMonitor(); + void Start(); + void SelfComplete(TInt aError); +private: + void ConstructL(); + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + CMidiControllerEventMonitor(MMidiControllerEventMonitorObserver& aObserver, + RMidiControllerCustomCommands& aMidiControllerCustomCommands, const CMidiClientUtility& aParent); +private: + MMidiControllerEventMonitorObserver& iMidiObserver; + RMidiControllerCustomCommands& iMidiControllerCustomCommands; + TPckgBuf iSizeOfEvent; + const CMidiClientUtility& iParent; + CMMFMidiEvent* iMidiEvent; + }; + + +class CMidiEventMonitor : public CActive + { +public: + static CMidiEventMonitor* NewL(MMidiControllerEventMonitorObserver& aMidiObserver, + const CMidiClientUtility& aParent); + ~CMidiEventMonitor(); + void SelfComplete(TInt aError); +private: + void ConstructL(); + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + CMidiEventMonitor(MMidiControllerEventMonitorObserver& aObserver, + const CMidiClientUtility& aParent); +private: + MMidiControllerEventMonitorObserver& iMidiObserver; + const CMidiClientUtility& iParent; + CMMFMidiEvent* iMidiEvent; + }; + + +class CContent; +class CData; +/** +*/ +class CMidiClientUtility::CBody : public CBase, + public MMidiControllerEventMonitorObserver, + public MRepeatTrailingSilenceTimerObs, + public MMMFAddDataSourceSinkAsyncObserver + { +public: + static CMidiClientUtility::CBody* NewL(CMidiClientUtility* aParent, + MMidiClientUtilityObserver& aObserver, + TInt aPriority, + TInt aPref, + TBool aUseSharedHeap); + + +/** + Destructor +*/ + ~CBody(); + + void OpenFile(const TDesC& aFileSource); + void OpenFile(RFile& aFile); + void OpenFile(const TMMSource& aFileSource); + void OpenDes(const TDesC8& aDescriptor); + void OpenUrl(const TDesC& aUrl,TInt aIapId = KUseDefaultIap,const TDesC8& aMimeType=KNullDesC8); + void Close(); + void Play(); + void Stop(const TTimeIntervalMicroSeconds& aFadeOutDuration); + TMidiState State() const; + void PlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity); + void PlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aStartTime,const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity); + void StopNotes(TInt aChannel); + void NoteOnL(TInt aChannel,TInt aNote,TInt aVelocity); + void NoteOffL(TInt aChannel,TInt aNote,TInt aVelocity); + TInt PlaybackRateL() const; + void SetPlaybackRateL(TInt aRate); + TInt MaxPlaybackRateL() const; + TInt MinPlaybackRateL() const; + TInt TempoMicroBeatsPerMinuteL() const; + void SetTempoL(TInt aMicroBeatsPerMinute); + TInt PitchTranspositionCentsL() const; + TInt SetPitchTranspositionL(TInt aCents); + TTimeIntervalMicroSeconds DurationMicroSecondsL() const; + TInt64 DurationMicroBeatsL() const; + TInt NumTracksL() const; + void SetTrackMuteL(TInt aTrack,TBool aMuted) const; + const TDesC8& MimeTypeL(); + TTimeIntervalMicroSeconds PositionMicroSecondsL() const; + void SetPositionMicroSecondsL(const TTimeIntervalMicroSeconds& aPosition); + TInt64 PositionMicroBeatsL() const; + void SetPositionMicroBeatsL(TInt64 aMicroBeats); + void SetSyncUpdateCallbackIntervalL(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 aMicroBeats=0); + TInt SendMessageL(const TDesC8& aMidiMessage); + TInt SendMessageL(const TDesC8& aMidiMessage,const TTimeIntervalMicroSeconds& aTime); + void SendMipMessageL(const RArray& aEntry); + TInt NumberOfBanksL(TBool aCustom) const; + TInt GetBankIdL(TBool aCustom,TInt aBankIndex) const; + void LoadCustomBankL(const TDesC& aFileName,TInt& aBankCollectionIndex); + void UnloadCustomBankL(TInt aBankCollectionIndex); + TBool CustomBankLoadedL(TInt aBankCollectionIndex) const; + void UnloadAllCustomBanksL(); + TInt NumberOfInstrumentsL(TInt aBankId,TBool aCustom) const; + TInt GetInstrumentIdL(TInt aBankId,TBool aCustom,TInt aInstrumentIndex) const; + HBufC* InstrumentNameL(TInt aBankId, TBool aCustom, TInt aInstrumentId) const; + void SetInstrumentL(TInt aChannel,TInt aBankId,TInt aInstrumentId); + void LoadCustomInstrumentL(const TDesC& aFileName,TInt aFileBankId,TInt aFileInstrumentId,TInt aMemoryBankId,TInt aMemoryInstrumentId); + void UnloadCustomInstrumentL(TInt aCustomBankId,TInt aInstrumentId); + HBufC* PercussionKeyNameL(TInt aNote, TInt aBankId, TBool aCustom, TInt aInstrumentId) const; + void StopTimeL(TTimeIntervalMicroSeconds& aStopTime) const; + void SetStopTimeL(const TTimeIntervalMicroSeconds& aStopTime); + void SetRepeatsL(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); + TInt PolyphonyL() const; + TInt ChannelsSupportedL() const; + TReal32 ChannelVolumeL(TInt aChannel) const; + TReal32 MaxChannelVolumeL() const; + void SetChannelVolumeL(TInt aChannel,TReal32 aVolume); + void SetChannelMuteL(TInt aChannel,TBool aMuted); + TInt VolumeL() const; + TInt MaxVolumeL() const; + void SetVolumeL(TInt aVolume); + void SetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration); + TInt GetBalanceL() const; + void SetBalanceL(TInt aBalance = KMMFBalanceCenter); + void SetPriorityL(TInt aPriority, TInt aPref); + TInt NumberOfMetaDataEntriesL() const; + CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex) const; + void SetMaxPolyphonyL(TInt aMaxVoices); + TInt GetRepeats(); + void LoadCustomBankDataL(const TDesC8& aBankData,TInt& aBankCollectionIndex); + void LoadCustomInstrumentDataL(const TDesC8& aInstrumentData, TInt aBankDataId, TInt aInstrumentDataId, TInt aMemoryBankId, TInt aMemoryInstrumentId); + void SetBankL(TBool aCustom); + TBool IsTrackMuteL(TInt aTrack) const; + TBool IsChannelMuteL(TInt aChannel) const; + void GetInstrumentL(TInt aChannel, TInt& aInstrumentId, TInt& aBankId); + TInt MaxPolyphonyL() const; + void CustomCommandSyncL(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); + void CustomCommandSyncL(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); + void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); + void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); + + MMMFDRMCustomCommand* GetDRMCustomCommand(); + + virtual void RepeatTrailingSilenceTimerComplete(); + //From MMMFControllerEventMonitorObserver + virtual void HandleMidiEvent(const CMMFMidiEvent& aEvent); + + // from MMMFAddDataSourceSinkAsyncObserver + virtual void MadssaoAddDataSourceSinkAsyncComplete(TInt aError, const TMMFMessageDestination& aHandle); + +private: + CBody(CMidiClientUtility* aParent, MMidiClientUtilityObserver& aObserver, TInt aPriority, TInt aPref); + void ConstructL(TBool aUseSharedHeap); + TInt DoOpen(const RMMFControllerImplInfoArray& aControllers, TUid aSinkUid, const TDesC8& aSinkData, TBool aUseSharedHeap); + void ExternalizeToCBufFlatL(CBufFlat*& aCfgBuffer, const CMMFUrlParams* aUrlParams) const; + void DoOpenFileL(const TMMSource& aSource); + void DoOpenUrlL(const TDesC& aUrl, TInt aIapId); +private: + CMidiClientUtility* iParent; + MMidiClientUtilityObserver& iObserver; + RMMFController iController; + CMidiControllerEventMonitor* iMidiControllerEventMonitor; + TMidiState iState; + TMMFPrioritySettings iPrioritySettings; + CRepeatTrailingSilenceTimer* iRepeatTrailingSilenceTimer; + + // Source and sink handle info + TMMFMessageDestination iSourceHandle; + TMMFMessageDestination iSinkHandle; + + // Custom command handlers + RMidiControllerCustomCommands iMidiControllerCommands; + + RMMFDRMCustomCommands iDRMCustomCommands; + + //Stop position + TTimeIntervalMicroSeconds iStopPosition; + + HBufC8* iMimeType; + TBool iIntervalSec; + CMMFAddDataSourceSinkAsync* iAddDataSourceSinkAsync; + CMMSourceSink* iSource; + + ContentAccess::CContent* iContent; + ContentAccess::CData* iData; + }; + +#endif