// ****************************************************************************//// CMidiInQ.h//// This class manages MIDI input.//// Use a simple fixed size queue for storing MIDI data.//// Fill & drain pointers are maintained automatically whenever// an Add or Get function succeeds.//// Set editor tabs to 3 for your viewing pleasure.//// ----------------------------------------------------------------------------//// This file is part of Echo Digital Audio's generic driver library.// Copyright Echo Digital Audio Corporation (c) 1998 - 2005// All rights reserved// www.echoaudio.com//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//// ****************************************************************************// Prevent problems with multiple includes#ifndef _MIDIQUEUEOBJECT_#define _MIDIQUEUEOBJECT_#include "CMtcSync.h"typedef struct tMIDI_DATA{DWORD dwMidi;LONGLONG llTimestamp;}MIDI_DATA;typedef MIDI_DATA *PMIDI_DATA;//// Default to one MIDI input client//#ifndef MAX_MIDI_IN_CLIENTS#define MAX_MIDI_IN_CLIENTS 1#endif//// MIDI in queue size//// Total buffer size in bytes will be MIDI_IN_Q_SIZE * sizeof(MIDI_DATA)//// Buffer size must be a power of 2. This is the default size; to change it,// add #define MIDI_IN_Q_SIZE to your OsSupport??.h file//#ifndef MIDI_IN_Q_SIZE#define MIDI_IN_Q_SIZE 128#endif//// Class used for simple MIDI byte queue//class CMidiInQ{public://// Construction/destruction//CMidiInQ();~CMidiInQ();//// Init//ECHOSTATUS Init(CEchoGals *pEG);//// Get the oldest byte from the circular buffer//ECHOSTATUS GetMidi(ECHOGALS_MIDI_IN_CONTEXT *pContext,DWORD &dwMidiByte,LONGLONG &llTimestamp);//// Enable and disable MIDI input and MTC sync//ECHOSTATUS Arm(ECHOGALS_MIDI_IN_CONTEXT *pContext);ECHOSTATUS Disarm(ECHOGALS_MIDI_IN_CONTEXT *pContext);ECHOSTATUS ArmMtcSync();ECHOSTATUS DisarmMtcSync();//// Get and set MTC base rate//ECHOSTATUS GetMtcBaseRate(DWORD *pdwBaseRate);ECHOSTATUS SetMtcBaseRate(DWORD dwBaseRate);//// If MTC sync is turned on, process received MTC data// and update the sample rate//void ServiceMtcSync();//// See if there has been any recent MIDI input activity//BOOL IsActive();//// Reset the in/out ptrs//void Reset(ECHOGALS_MIDI_IN_CONTEXT *pContext);//// Service a MIDI input interrupt//ECHOSTATUS ServiceIrq();protected://// Add a MIDI byte to the circular buffer//inline ECHOSTATUS AddMidi(DWORD dwMidiByte,LONGLONG llTimestamp);//// Parse MIDI time code data//DWORD MtcProcessData( DWORD dwMidiData );//// Cleanup//void Cleanup();//// Midi buffer management//PMIDI_DATA m_pBuffer;DWORD m_dwFill;DWORD m_dwBufferSizeMask;DWORD m_dwNumClients;//// Most recent MIDI input time - used for activity detector//ULONGLONG m_ullLastActivityTime;//// MIDI time code//WORD m_wMtcState;CMtcSync *m_pMtcSync;//// Other objects//CEchoGals *m_pEG;}; // class CMidiInQtypedef CMidiInQ * PCMidiInQ;#endif// *** CMidiInQ.H ***