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

106 lines
2.3 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_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();
WORD play(WORD blocking=TRUE);
WORD stop(void);
WORD isInPlay(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);
WORD readTrack(void);
WORD makeRealTime(void);
void operator=(const MidiData &someMidiData);
CallbackData::ReturnType timerEvent(CallbackData &someCallbackData);
CallbackData::ReturnType closeDevice(void);
Callback<MidiData> mTimerCallback;
PureVector<PureEvent> mMIDIEventVector;
Block<TempoChange> mTempoChange;
MIDIBlock mMIDIEvents;
MIDIOutputDevice mMIDIOutDevice;
FileIO mMidiFile;
SMPTEFormat mSMPTEFormat;
DWORD mPlayIndex;
};
inline
void MidiData::operator=(const MidiData &/*someMidiData*/)
{
return;
}
inline
WORD MidiData::readTrack(void)
{
return MidiTrack::readTrack();
}
inline
WORD MidiData::stop(void)
{
if(!isRunning())return TRUE;
return stopTimer();
}
inline
WORD MidiData::isInPlay(void)const
{
return isRunning();
}
#endif