コード例 #1
0
 private static void DecodeToken(int token, TrackConsultant tracks)
 {
     if (token >= 0 && token < 3840)
     {
         var pitch          = token % 128;
         var inst_vol_index = token >> 7;
         var instrument     = Instruments[inst_vol_index];
         var volume         = Volumes[inst_vol_index];
         tracks[instrument].AddNoteEvent(pitch, volume, volume > 0);
         return;
     }
     else if (token >= 3840 && token < 3968)
     {
         var pitch = token % 128;
         tracks["drum"].AddNoteEvent(pitch, 80, true);
     }
     else if (token >= 3968 && token < 4096)
     {
         var delay = (token % 128) + 1;
         tracks.AddDeltaTime(delay);
         return;
     }
     else if (token == 4096)
     {
         return; //Start
     }
     else
     {
         return; //Invalid
     }
 }
コード例 #2
0
        public static MidiFile DecodeMuseEncoding(string[] tokens)
        {
            TrackConsultant tracks = new TrackConsultant();

            foreach (string token in tokens)
            {
                DecodeToken(int.Parse(token), tracks);
            }

            tracks.FinishDrums();
            return(tracks.GetMidiFile());
        }