Files
Work/midiwrt/MUSCNV.HPP
2024-08-07 09:16:27 -04:00

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