次の例では、Next MIDI を用いて、MIDI ファイルのキーを +4 した後、再生しています。
using System;
using System.IO;
using System.Text;
using NextMidi.Data.Domain;
using NextMidi.DataElement;
using NextMidi.Filing.Midi;
using NextMidi.MidiPort.Output;
using NextMidi.Time;
/* ... */
namespace Sample
{
class Program
{
static void Main(string[] args)
{
// 引数チェック
if (args.Length != 2)
{
Console.WriteLine("1 port name and 1 file name required");
return;
}
// MIDI ファイルを読み込み
string fname = args[1];
if (!File.Exists(fname))
{
Console.WriteLine("File does not exist");
return;
}
var midiData = MidiReader.ReadFrom(fname, Encoding.GetEncoding("shift-jis"));
// 全ての MIDI ノートを 4 半音上げる
foreach (var track in midiData.Tracks)
{
foreach (var note in track.GetData<NoteEvent>())
{
note.Note += 4;
}
}
// テンポマップを作成
var domain = new MidiFileDomain(midiData);
// MIDI ポートを作成
var port = new MidiOutPort(args[0]);
try
{
port.Open();
}
catch
{
Console.WriteLine("no such port exists");
return;
}
// MIDI プレーヤーを作成
var player = new MidiPlayer(port);
// MIDI ファイルを再生
player.Play(domain);
}
}
}