10 : mOutput(
"MIDISong Output",this)
17 : mOutput(
"MIDISong Output",this)
39 static int nbytesPerChnMsg[7] = { 3,3,3,3,2,3,3 };
41 int nTracks = s.Tracks();
42 for(
int i=0; i < nTracks; i++)
47 for(;it != track->
End(); it++)
50 int type = ((ev[0]&0xF0)>>4)-8;
52 if(((ev[0]&0xF0)==0x90) || ((ev[0]&0xF0)==0x80))
54 onset = ((ev[0]&0xF0)==0x90) ? (ev[2] > 0) :
false;
57 midiTrack.GetChannels().AddElem((
int)(ev[0]&0x0F));
60 note.GetTime().SetEnd(
TData(-1.0));
61 note.SetKey((
int)ev[1]);
62 note.SetVelocity((
int)ev[2]);
63 midiTrack.GetTrackMelody().GetNoteArray().AddElem(note);
64 midiTrack.GetTrackMelody().GetNumberOfNotes()++;
68 for(
int n=0; n < midiTrack.GetTrackMelody().GetNumberOfNotes(); n++)
70 if((midiTrack.GetTrackMelody().GetNoteArray()[n].GetKey() == (
int)(ev[1])) &&
71 (midiTrack.GetTrackMelody().GetNoteArray()[n].GetTime().GetEnd()==
TData(-1.0)))
82 e.SetName(GetEventName((ev[0]&0xF0)));
84 int len = nbytesPerChnMsg[type];
85 for(
int k=0; k < len; k++)
87 e.GetMessage().AddElem(ev[k]);
89 midiTrack.GetEventInfo().AddElem(e);
92 if(midiTrack.GetTrackMelody().GetNumberOfNotes() > 0)
94 out.GetTracks().AddElem(midiTrack);
95 out.GetNumberOfTracks()++;
107 std::string MIDIFileReader::GetEventName(
TMIDIByte b)
112 return "PolyAftertouch";
115 return "ControlChange";
118 return "ProgramChange";
121 return "ChnAftertouch";