63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
#ifndef _MUSCONVERTER_HPP_
|
|
#define _MUSCONVERTER_HPP_
|
|
#include <midiwrt/mididata.hpp>
|
|
#include <midiwrt/musfile.hpp>
|
|
#include <midiwrt/puredly.hpp>
|
|
#include <midiwrt/purenote.hpp>
|
|
#include <midiwrt/purecntl.hpp>
|
|
#include <midiwrt/miditime.hpp>
|
|
|
|
class MUSConverter : private MUSFile
|
|
{
|
|
public:
|
|
MUSConverter(String midiPathFileName,String musPathFileName);
|
|
~MUSConverter();
|
|
WORD convertFile(void);
|
|
void setTempo(USHORT midiTempo);
|
|
USHORT getTempo(void)const;
|
|
WORD isOkay(void)const;
|
|
WORD updateTrackInfo(void);
|
|
protected:
|
|
WORD virtual handleScoreStart(void);
|
|
WORD virtual handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber);
|
|
WORD virtual handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber);
|
|
WORD virtual handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber);
|
|
WORD virtual handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber);
|
|
WORD virtual handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber);
|
|
WORD virtual handleScoreEnd(PureDelay &pureDelay);
|
|
private:
|
|
void fixChannel(PureEvent &pureEvent,BYTE trackNumber);
|
|
WORD writeInfoTrack(void);
|
|
MidiData mMidiData;
|
|
MidiTrack mMidiTrack;
|
|
MidiHeader mMidiHeader;
|
|
MidiDeltaTime mDeltaTime;
|
|
WORD mNumTracks;
|
|
};
|
|
|
|
inline
|
|
WORD MUSConverter::isOkay(void)const
|
|
{
|
|
return (mMidiData.isOkay()&&MUSFile::isOkay());
|
|
}
|
|
|
|
inline
|
|
void MUSConverter::setTempo(WORD midiTempo)
|
|
{
|
|
mMidiHeader.deltaTempo(midiTempo);
|
|
}
|
|
|
|
inline
|
|
USHORT MUSConverter::getTempo(void)const
|
|
{
|
|
return mMidiHeader.deltaTempo();
|
|
}
|
|
|
|
inline
|
|
void MUSConverter::fixChannel(PureEvent &pureEvent,BYTE trackNumber)
|
|
{
|
|
if(15==trackNumber)pureEvent.channel(9);
|
|
if(9==trackNumber)pureEvent.channel(15);
|
|
}
|
|
#endif
|