javauis/mmapi_qt/baseline/inc/cmmamidicontrol.h
changeset 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/inc/cmmamidicontrol.h	Fri May 14 15:47:24 2010 +0300
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2002-2007 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:  This class is a MIDIControl.
+*
+*/
+
+
+#ifndef CMMAMIDICONTROL_H
+#define CMMAMIDICONTROL_H
+
+// EXTERNAL INCLUDES
+
+//  INTERNAL INCLUDES
+#include "cmmacontrol.h" // base class
+#include "mmmaplayerstatelistener.h"
+#include <midiclientutility.h> // MMidiClientUtilityObserver
+#include <TimeOutTimer.h>
+
+// CONSTANTS
+
+// Constant for control name. Name is used in Java side to instantiate
+// Java Class which uses CMMAMIDIControl.
+_LIT(KMIDIControlName, "MIDIControl");
+
+class CMMAMIDIPlayer;
+
+// Maximum volume defined in the Java API.
+// It is used to convert volume values between native and java values.
+static const TInt KMAXVolume = 127;
+
+
+
+//  CLASS DECLARATION
+/**
+*   This class implements MIDIControl interface.
+*
+*
+*/
+NONSHARABLE_CLASS(CMMAMIDIControl): public CMMAControl,
+        public MMidiClientUtilityObserver
+{
+private:
+
+    class CChannelVolumeEventWait : public CBase,
+            public MTimeOutNotify
+    {
+    public:  // Constructor and destructor
+
+        static CChannelVolumeEventWait* NewL();
+
+        ~CChannelVolumeEventWait();
+
+    public:  // Methods from base classes
+
+        /**
+        * From MTimeOutNotify Timer expiration call back method
+        */
+        void TimerExpired();
+
+    public:  // New methods
+
+        void StartWait(TInt aChannel);
+
+        void StopWait();
+
+        void HandleVolumeChangedEvent(TInt aChannel);
+
+    private: // Constructor
+
+        CChannelVolumeEventWait();
+
+        void ConstructL();
+
+    private: // Data
+
+        // Own. For waiting the correct volume changed event
+        CActiveSchedulerWait* iWait;
+
+        // Own. Time-out for waiting volume changed event
+        CTimeOutTimer* iTimer;
+
+        // Expected channel for volume event
+        TInt iChannel;
+
+    };
+
+public:
+    /**
+     * Creates new CMMAMIDIControl.
+     *
+     * @param aPlayer Player that plays the MIDI.
+     */
+    static CMMAMIDIControl* NewL(CMMAMIDIPlayer* aPlayer);
+
+    /**
+     * Destructor.
+     */
+    ~CMMAMIDIControl();
+protected:
+    /**
+     * Constructor.
+     * @param aPlayer Player that plays the MIDI.
+     */
+    CMMAMIDIControl(CMMAMIDIPlayer* aPlayer);
+
+    /**
+     * Initializes this control.
+     */
+    void ConstructL();
+
+public: // From CMMAControl
+    const TDesC& ClassName() const;
+
+public: // From MMMAPlayerStateListener
+    void StateChanged(TInt aState);
+
+public: // Static new methods
+
+    /**
+     * Get volume for the given channel. The return value is
+     * independent of the player's volume.
+     *
+     * @param aChannel 0-15
+     */
+    TInt ChannelVolumeL(TInt aChannel);
+
+    /**
+     * Set volume for given channel.
+     *
+     * @param aChannel 0-15
+     * @param aVolume 0-127
+     */
+    void SetChannelVolumeL(TInt aChannel, TInt aVolume);
+
+    /**
+     * Set program of a channel.
+     *
+     * @param aChannel 0-15
+     * @param aBank 0-16383, or -1 for default bank
+     * @param aProgram 0-127
+     */
+    void SetProgramL(TInt aChannel,
+                     TInt aBank,
+                     TInt aProgram);
+
+    /**
+     * Sends a long MIDI event to the device.
+     * This method passes the data directly to the receiving device.
+     * The data array's contents are not checked for validity.
+     *
+     * @param aData array of the bytes to send
+     * @return the number of bytes actually sent to the device
+     */
+    TInt SendMIDIEventL(const TDesC8* aData);
+
+    /**
+     * Reinitializes native midi engine with new sequence data.
+     * First closes midi engine and then opens it again with new
+     * data. The data array's contents are not checked for validity.
+     *
+     * @param aData midi sequence data for initialization
+     * @return KErrNone (return value is present only for
+     * method footprint)
+     */
+    TInt ReInitializeMidiL(const TDesC8* aData);
+
+public: // from MMidiClientUtilityObserver
+    void MmcuoStateChanged(TMidiState aOldState,TMidiState aNewState,const TTimeIntervalMicroSeconds& aTime,TInt aError);
+    void MmcuoTempoChanged(TInt aMicroBeatsPerMinute);
+    void MmcuoVolumeChanged(TInt aChannel,TReal32 aVolumeInDecibels);
+    void MmcuoMuteChanged(TInt aChannel,TBool aMuted);
+    void MmcuoSyncUpdate(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 aMicroBeats);
+    void MmcuoMetaDataEntryFound(const TInt aMetaDataEntryId,const TTimeIntervalMicroSeconds& aPosition);
+    void MmcuoMipMessageReceived(const RArray<TMipMessageEntry>& aMessage);
+    void MmcuoPolyphonyChanged(TInt aNewPolyphony);
+    void MmcuoInstrumentChanged(TInt aChannel,TInt aBankId,TInt aInstrumentId);
+
+private: // Data
+    /**
+     * Used to control MIDI events.
+     */
+    CMMAMIDIPlayer* iPlayer;
+
+    /**
+    * Own. Utility for waiting for channel volume events
+    */
+    CChannelVolumeEventWait* iVolumeEventWait;
+
+};
+
+
+#endif // CMMAMIDICONTROL_H