Files
Work/midiseq/safe/MIDIDATA.HPP
2024-08-07 09:16:27 -04:00

127 lines
2.7 KiB
C++

#ifndef _MIDISEQ_MIDIDATA_HPP_
#define _MIDISEQ_MIDIDATA_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
//#ifndef _COMMON_PUREVECTOR_HPP_
//#include <common/pvector.hpp>
//#endif
#ifndef _COMMON_ARRAY_HPP_
#include <common/array.hpp>
#endif
#ifndef _COMMON_CALLBACK_HPP_
#include <common/callback.hpp>
#endif
#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_
#include <midiseq/midiout.hpp>
#endif
#ifndef _MIDISEQ_MIDIHEADER_HPP_
#include <midiseq/midihdr.hpp>
#endif
#ifndef _MIDISEQ_MIDITRACK_HPP_
#include <midiseq/miditrck.hpp>
#endif
#ifndef _MIDISEQ_PUREEVENT_HPP_
#include <midiseq/pureevnt.hpp>
#endif
#ifndef _MIDISEQ_TIMEBLOCK_HPP_
#include <midiseq/timeblck.hpp>
#endif
#ifndef _MIDISEQ_TIMEINFO_HPP_
#include <midiseq/timeinfo.hpp>
#endif
#ifndef _MIDISEQ_TEMPOCHANGE_HPP_
#include <midiseq/tempo.hpp>
#endif
#ifndef _MIDISEQ_SMPTEFORMAT_HPP_
#include <midiseq/smpte.hpp>
#endif
#ifndef _MIDISEQ_MIDIBLOCK_HPP_
#include <midiseq/midiblck.hpp>
#endif
#ifndef _MIDISEQ_EVENTTIMER_HPP_
#include <midiseq/evnttmr.hpp>
#endif
class String;
class MidiData : public MidiHeader, public MidiTrack, public EventTimer
{
public:
MidiData(const String &midiPathFileName);
virtual ~MidiData();
bool play(WORD blocking=TRUE);
bool stop(void);
bool isInPlay(void)const;
bool makeRealTime(void);
PureEvent &getEventAt(int index);
DWORD getEventCount(void)const;
protected:
void setTempo(DWORD microsecsPerQtrNote);
void midiChannelMessage(PureEvent &channelEvent);
void smpteFormat(const SMPTEFormat &someSMPTEFormat);
void timeSignature(const TimeInfo &someTimeInfo);
private:
enum {TimerDelay=10,ThreeSecs=3000,TwoSecs=2000,OneSec=1000};
WORD timerEvent(void);
bool readTrack(void);
void operator=(const MidiData &someMidiData);
CallbackData::ReturnType timerEvent(CallbackData &someCallbackData);
CallbackData::ReturnType closeDevice(void);
Callback<MidiData> mTimerCallback;
// PureVector<PureEvent> mMIDIEventVector;
Array<PureEvent> mMIDIEventVector;
Block<TempoChange> mTempoChange;
MIDIBlock mMIDIEvents;
MIDIOutputDevice mMIDIOutDevice;
FileIO mMidiFile;
SMPTEFormat mSMPTEFormat;
DWORD mPlayIndex;
};
inline
void MidiData::operator=(const MidiData &/*someMidiData*/)
{
return;
}
inline
bool MidiData::readTrack(void)
{
return MidiTrack::readTrack();
}
inline
PureEvent &MidiData::getEventAt(int index)
{
return mMIDIEventVector[index];
}
inline
DWORD MidiData::getEventCount(void)const
{
return mMIDIEventVector.size();
}
inline
bool MidiData::stop(void)
{
if(!isRunning())return true;
return stopTimer();
}
inline
bool MidiData::isInPlay(void)const
{
return isRunning();
}
#endif