127 lines
2.7 KiB
C++
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
|
|
|