HomeNext MIDI › トラックごとのイベント数を数える

トラックごとのイベント数を数える

次の例では、Next MIDI を用いて、MIDI ファイルの各トラックに含まれる MIDI イベント数、ノート数、プログラムチェンジの数、コントロールチェンジの数、メタイベント数、エクスクルーシブイベント数を表示します。

using System;
using System.IO;
using System.Text;
using NextMidi.Data.Track;
using NextMidi.DataElement;
using NextMidi.DataElement.MetaData;
using NextMidi.Filing.Midi;

/* ... */

static void Main(string[] args)
{
    // MIDI ファイルを指定する
    if (args.Length != 1)
    {
        Console.WriteLine("1 source file required");
        return;
    }
    string fname = args[0];
    if (!File.Exists(fname))
    {
        Console.WriteLine("File does not exist");
        return;
    }

    // MIDI ファイルを読み込む
    var midiData = MidiReader.ReadFrom(fname, Encoding.GetEncoding("shift-jis"));

    Console.WriteLine();
    Console.WriteLine("Track Evnt Note Prog Cont Meta Excl  Title");
    Console.WriteLine("----- ---- ---- ---- ---- ---- ----  ----------------");

    for (int i = 0; i < midiData.Tracks.Count; i++)
    {
        var track = midiData.Tracks[i];

        Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}  {7}",
        i.ToString().PadLeft(5),
        track.GetData<MidiEvent>().Count.ToString().PadLeft(4),
        track.GetData<NoteEvent>().Count.ToString().PadLeft(4),
        track.GetData<ProgramEvent>().Count.ToString().PadLeft(4),
        track.GetData<ControlEvent>().Count.ToString().PadLeft(4),
        track.GetData<MetaEvent>().Count.ToString().PadLeft(4),
        track.GetData<ExclusiveEvent>().Count.ToString().PadLeft(4),
        track.GetTitle(i == 0));
    }
}

Comments are closed.