mmlibs/mmfw/MIDI/src/midiclientutilitybody.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/MIDI/src/midiclientutilitybody.h	Tue Feb 02 01:56:55 2010 +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 <midiclientutility.h>
+#include <mmf/common/midistandardcustomcommands.h>
+#include <mmf/server/mmffile.h>
+#include <mmf/server/mmfdes.h>
+#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<TInt> 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<TMipMessageEntry>& 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