#ifndef _MIDISEQ_TIMEINFO_HPP_ #define _MIDISEQ_TIMEINFO_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif class TimeInfo { public: enum {LengthTimeInfo=4}; TimeInfo(void); TimeInfo(const TimeInfo &someTimeInfo); TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote); virtual ~TimeInfo(); TimeInfo &operator=(const TimeInfo &someTimeInfo); WORD operator==(const TimeInfo &someTimeInfo)const; BYTE numerator(void)const; void numerator(BYTE numerator); BYTE denominator(void)const; void denominator(BYTE denominator); BYTE midiClocksPerMetronome(void)const; void midiClocksPerMetronome(BYTE midiClocksPerMetronome); BYTE thirtySecondNotesPerQtrNote(void)const; void thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote); String toString(void)const; private: enum{MidiClocksPerQtrNote=24}; BYTE mNumerator; BYTE mDenominator; BYTE mMidiClocksPerMetronome; BYTE mThirtySecondNotesPerQtrNote; }; inline TimeInfo::TimeInfo(void) : mNumerator(0), mDenominator(0), mMidiClocksPerMetronome(0), mThirtySecondNotesPerQtrNote(0) { } inline TimeInfo::TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote) : mNumerator(numerator), mDenominator(denominator), mMidiClocksPerMetronome(midiClocksPerMetronome), mThirtySecondNotesPerQtrNote(thirtySecondNotesPerQtrNote) { } inline TimeInfo::TimeInfo(const TimeInfo &someTimeInfo) { *this=someTimeInfo; } inline TimeInfo::~TimeInfo() { } inline TimeInfo &TimeInfo::operator=(const TimeInfo &someTimeInfo) { numerator(someTimeInfo.numerator()); denominator(someTimeInfo.denominator()); midiClocksPerMetronome(someTimeInfo.midiClocksPerMetronome()); thirtySecondNotesPerQtrNote(someTimeInfo.thirtySecondNotesPerQtrNote()); return *this; } inline WORD TimeInfo::operator==(const TimeInfo &someTimeInfo)const { return (numerator()==someTimeInfo.numerator()&& denominator()==someTimeInfo.denominator()&& midiClocksPerMetronome()==someTimeInfo.midiClocksPerMetronome()&& thirtySecondNotesPerQtrNote()==someTimeInfo.thirtySecondNotesPerQtrNote()); } inline BYTE TimeInfo::numerator(void)const { return mNumerator; } inline void TimeInfo::numerator(BYTE numerator) { mNumerator=numerator; } inline BYTE TimeInfo::denominator(void)const { return mDenominator; } inline void TimeInfo::denominator(BYTE denominator) { mDenominator=denominator; } inline BYTE TimeInfo::midiClocksPerMetronome(void)const { return mMidiClocksPerMetronome; } inline void TimeInfo::midiClocksPerMetronome(BYTE midiClocksPerMetronome) { mMidiClocksPerMetronome=midiClocksPerMetronome; } inline BYTE TimeInfo::thirtySecondNotesPerQtrNote(void)const { return mThirtySecondNotesPerQtrNote; } inline void TimeInfo::thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote) { mThirtySecondNotesPerQtrNote=thirtySecondNotesPerQtrNote; } inline String TimeInfo::toString(void)const { String string; String sep(", "); string+=String().fromInt(mNumerator)+String("/")+String().fromInt(mDenominator)+String(" time")+sep; string+=String("MIDIClocksPerMetronome=")+String().fromInt(mMidiClocksPerMetronome)+sep; string+=String("32nd notes per 1/4 note=")+String().fromInt(mThirtySecondNotesPerQtrNote); return string; } #endif