#ifndef _MUSCONVERTER_HPP_ #define _MUSCONVERTER_HPP_ #include #include #include #include #include #include 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