sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: sl@0: #ifndef TS_CMMFMIDITESTCONTROLLER_H sl@0: #define TS_CMMFMIDITESTCONTROLLER_H sl@0: sl@0: #include sl@0: #include sl@0: sl@0: sl@0: sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include "CmmfMidiTestControllerUIDs.hrh" sl@0: sl@0: sl@0: class CMMFMidiTestController : public CMMFController, sl@0: public MMidiCustomCommandImplementor, sl@0: public MMMFDRMCustomCommandImplementor sl@0: { sl@0: public: sl@0: static CMMFMidiTestController* NewL(void); sl@0: static CMMFMidiTestController* NewLC(void); sl@0: sl@0: //implement CMMFMidiTestController ecom plugin interface sl@0: virtual void AddDataSourceL(MDataSource& aDataSource); sl@0: virtual void AddDataSinkL(MDataSink& aDataSink); sl@0: virtual void RemoveDataSourceL(MDataSource& aDataSource); sl@0: virtual void RemoveDataSinkL(MDataSink& aDataSink); sl@0: virtual void RemoveSourceSinkL(); sl@0: virtual void ResetL();//XXX - replacement for RemoveSourceSink() sl@0: virtual void PrimeL(); sl@0: virtual void PlayL(); sl@0: virtual void PauseL(); sl@0: virtual void StopL(); sl@0: virtual TTimeIntervalMicroSeconds PositionL() const; sl@0: virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition); sl@0: virtual TTimeIntervalMicroSeconds DurationL() const; sl@0: virtual void CustomCommand(TMMFMessage& aMessage); sl@0: virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings); sl@0: virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries); sl@0: virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex); sl@0: sl@0: TInt SendEventToClient(const TMMFEvent& aEvent); sl@0: TInt OpenComplete(); sl@0: TInt PlayStarted(); sl@0: TInt SyncUpdate(); sl@0: TInt PlayFinished(); sl@0: TInt Stop(); sl@0: TInt Close(); sl@0: TInt TempoChanged(); sl@0: TInt VolumeChanged(); sl@0: TInt MuteChanged(); sl@0: TInt PolyphonyChanged(); sl@0: TInt InstrumentChanged(); sl@0: TInt SmfMetaDataEntryFound(); sl@0: TInt MipMessageReceived(); sl@0: sl@0: //-------------------------------// sl@0: // MMidiCustomCommandImplementor // sl@0: //-------------------------------// sl@0: virtual void MmcSetPositionMicroBeatsL(TInt64 aMicroBeats); sl@0: virtual void MmcPositionMicroBeatsL(TInt64& aMicroBeats); sl@0: virtual void MmcPlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity); sl@0: virtual void MmcPlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aStartTime, const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity); sl@0: virtual void MmcStopNotesL(TInt aChannel); sl@0: virtual void MmcNoteOnL(TInt aChannel,TInt aNote,TInt aVelocity); sl@0: virtual void MmcNoteOffL(TInt aChannel,TInt aNote,TInt aVelocity); sl@0: virtual void MmcPlaybackRateL(TInt& aPlayBackRate); sl@0: virtual void MmcSetPlaybackRateL(TInt aPlayBackRate); sl@0: virtual void MmcMaxPlaybackRateL(TInt& aMaxRate); sl@0: virtual void MmcMinPlaybackRateL(TInt& aMinRate); sl@0: virtual void MmcTempoMicroBeatsPerMinuteL(TInt& aMicroBeatsPerMinute); sl@0: virtual void MmcSetTempoL(TInt aMicroBeatsPerMinute); sl@0: virtual void MmcPitchTranspositionCentsL(TInt& aPitch); sl@0: virtual void MmcSetPitchTranspositionL(TInt aCents, TInt& aCentsApplied); sl@0: virtual void MmcDurationMicroBeatsL(TInt64& aDuration); sl@0: virtual void MmcNumTracksL(TInt& aTracks); sl@0: virtual void MmcSetTrackMuteL(TInt aTrack, TBool aMuted); sl@0: virtual void MmcMimeTypeL(TDes8& aMimeType); sl@0: virtual void MmcSetSyncUpdateCallbackIntervalL(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 aMicroBeats); sl@0: virtual void MmcSendMessageL(const TDesC8& aMidiMessage, TInt& aBytes); sl@0: virtual void MmcSendMessageL(const TDesC8& aMidiMessage,const TTimeIntervalMicroSeconds& aTime, TInt& aBytes); sl@0: virtual void MmcSendMipMessageL(const TArray& aEntry); sl@0: virtual void MmcNumberOfBanksL(TBool aCustom, TInt& aNumBanks); sl@0: virtual void MmcGetBankIdL(TBool aCustom, TInt aBankIndex, TInt& aBankId); sl@0: virtual void MmcLoadCustomBankL(const TDesC& aFileName,TInt& aBankId); sl@0: virtual void MmcUnloadCustomBankL(TInt aBankId); sl@0: virtual void MmcCustomBankLoadedL(TInt aBankId, TBool& aBankLoaded); sl@0: virtual void MmcUnloadAllCustomBanksL(); sl@0: virtual void MmcNumberOfInstrumentsL(TInt aBankId, TBool aCustom, TInt& aNumInstruments); sl@0: virtual void MmcGetInstrumentIdL(TInt aBankId,TBool aCustom,TInt aInstrumentIndex, TInt& aInstrumentId); sl@0: virtual const TDesC& MmcInstrumentNameL(TInt aBankId, TBool aCustom, TInt aInstrumentId); sl@0: virtual void MmcSetInstrumentL(TInt aChannel,TInt aBankId,TInt aInstrumentId); sl@0: virtual void MmcLoadCustomInstrumentL(const TDesC& aFileName, TInt aFileBankId, TInt aFileInstrumentId, TInt aMemoryBankId, TInt aMemoryInstrumentId); sl@0: virtual void MmcUnloadCustomInstrumentL(TInt aCustomBankId,TInt aInstrumentId); sl@0: virtual const TDesC& MmcPercussionKeyNameL(TInt aNote, TInt aBankId, TBool aCustom, TInt aInstrumentId); sl@0: virtual void MmcStopTimeL(TTimeIntervalMicroSeconds& aStopTime); sl@0: virtual void MmcSetStopTimeL(const TTimeIntervalMicroSeconds& aStopTime); sl@0: virtual void MmcPolyphonyL(TInt& aNumNotes); sl@0: virtual void MmcChannelsSupportedL(TInt& aChannels); sl@0: virtual void MmcChannelVolumeL(TInt aChannel, TReal32& aChannelVol); sl@0: virtual void MmcMaxChannelVolumeL(TReal32& aMaxVol); sl@0: virtual void MmcSetChannelVolumeL(TInt aChannel,TReal32 aVolume); sl@0: virtual void MmcSetChannelMuteL(TInt aChannel,TBool aMuted); sl@0: virtual void MmcVolumeL(TInt& aVolume); sl@0: virtual void MmcMaxVolumeL(TInt& aMaxVolume); sl@0: virtual void MmcSetVolumeL(TInt aVolume); sl@0: virtual void MmcSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration); sl@0: virtual void MmcGetBalanceL(TInt& aBalance); sl@0: virtual void MmcSetBalanceL(TInt aBalance); sl@0: virtual void MmcLoadCustomBankDataL(const TDesC8& aBankData,TInt& aBankId); sl@0: virtual void MmcLoadCustomInstrumentDataL(const TDesC8& aInstrumentData, TInt aBankDataId, TInt aInstrumentDataId, TInt aMemoryBankId, TInt aMemoryInstrumentId); sl@0: virtual void MmcSetMaxPolyphonyL(TInt aMaxNotes); sl@0: virtual void MmcGetRepeatsL(TInt& aNumRepeats); sl@0: virtual void MmcSetRepeatsL(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); sl@0: virtual void MmcSetBankL(TBool aCustom); sl@0: virtual void MmcIsTrackMuteL(TInt aTrack, TBool& aTrackMute); sl@0: virtual void MmcIsChannelMuteL(TInt aChannel, TBool& aChannelMute); sl@0: virtual void MmcGetInstrumentL(TInt aChannel, TInt& aInstrumentId, TInt& aBankId); sl@0: virtual void MmcCloseL(); sl@0: virtual void MmcStopL(const TTimeIntervalMicroSeconds& aFadeOutDuration); sl@0: virtual void MmcMaxPolyphonyL(TInt& aMaxNotes); sl@0: sl@0: // MMMFDRMCustomCommandImplementor sl@0: virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent); sl@0: virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent); sl@0: virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent); sl@0: virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue); sl@0: private: sl@0: sl@0: class CControllerTimer : public CTimer sl@0: { sl@0: public: sl@0: enum TimerType sl@0: { sl@0: ETmrOpenComplete, sl@0: ETmrSyncUpdate, sl@0: ETmrDelayPlayStarted, sl@0: ETmrPlayFinished, sl@0: ETmrDelayStop, sl@0: ETmrDelayClose sl@0: }; sl@0: public: sl@0: static CControllerTimer* NewL(CMMFMidiTestController* aController); sl@0: void DelayOpen(TTimeIntervalMicroSeconds aDelay); sl@0: void DelayPlayStarted(TTimeIntervalMicroSeconds aDelay); sl@0: void PlayFinished(TTimeIntervalMicroSeconds aDelay); sl@0: void DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay); sl@0: void DelayStop(TTimeIntervalMicroSeconds aDelay); sl@0: void DelayClose(TTimeIntervalMicroSeconds aDelay); sl@0: sl@0: void RunL(); sl@0: private: sl@0: CControllerTimer(CMMFMidiTestController* aController); sl@0: CMMFMidiTestController* iController; sl@0: TimerType iType; sl@0: }; sl@0: sl@0: class CMidiEventGenerator : public CTimer sl@0: { sl@0: public: sl@0: enum TEventType sl@0: { sl@0: EEventTempoChanged, sl@0: EEventVolumeChanged, sl@0: EEventMuteChanged, sl@0: EEventPolyphonyChanged, sl@0: EEventInstrumentChanged, sl@0: EEventSmfMetaDataEntryFound, sl@0: EEventMipMessageReceived sl@0: }; sl@0: public: sl@0: static CMidiEventGenerator* NewL(CMMFMidiTestController* aController); sl@0: void MidiEventTrigger(); sl@0: void RunL(); sl@0: private: sl@0: CMidiEventGenerator(CMMFMidiTestController* aController); sl@0: CMMFMidiTestController* iController; sl@0: TEventType iType; sl@0: TTimeIntervalMicroSeconds iDelay; sl@0: TInt iTriggerCount; sl@0: }; sl@0: sl@0: private: sl@0: CMMFMidiTestController(void); sl@0: ~CMMFMidiTestController(void); sl@0: void ConstructL(void); sl@0: void InsertInterfaceNameInChunk(const TDesC8& aInterfaceName); sl@0: sl@0: private: sl@0: // CMidiCustomCommandParser* iMidiParser; sl@0: MMidiEventHandler* iMidiEventHandler; sl@0: CControllerTimer* iDelayEvent; sl@0: CMidiEventGenerator* iMidiEventGenerator; sl@0: sl@0: TInt iPlayBackRate; sl@0: TInt iMaxRate; sl@0: TInt iMinRate; sl@0: TInt iTempoMicroBeatsPerMinute; sl@0: TInt iPitchTranspositionCents; sl@0: TInt iCentsApplied; sl@0: TTimeIntervalMicroSeconds iDurationMicroSeconds; sl@0: TInt64 iDurationMicroBeats; sl@0: TInt iNumTracks; sl@0: TTimeIntervalMicroSeconds iPositionMicroSeconds; sl@0: TInt64 iPositionMicroBeats; sl@0: TInt iNumBanks; sl@0: TInt iNumInstruments; sl@0: TTimeIntervalMicroSeconds iStopTime; sl@0: TInt iNumNotes; sl@0: TInt iChannels; sl@0: TReal32 iMaxVol; sl@0: TInt iMaxVolume; sl@0: TInt iBalance; sl@0: TInt iRepeatNumberOfTimes; sl@0: TTimeIntervalMicroSeconds iTrailingSilence; sl@0: TInt iMaxNotes; sl@0: sl@0: CArrayFixFlat* iChanVolumeValues; sl@0: TMidiState iCurrentMidiTestControllerState; sl@0: TBool iDisableAutoIntent; sl@0: MDataSource* iDataSource; sl@0: }; sl@0: sl@0: #endif