>ピアノロールの編集では、
>クリックされたポイントとノートの高さ、編集中のチャンネルナンバーがきますね。
>insert(new NoteEvent(absoluteTime,noteNumber,channelNumber))

私はSMFをそのまま持たせる為にこう考えていました
 この場合ノートONとOFFに別けて2度アクセスする事になります

dp:=データクラス.EditPointOpen(AbosluteOn);
try
 dp.insert(cvtSMFChannnel(noteNumber));
 dp.insert(cvtSMFNoteOn(noteNumber));
finally free; end;
dp:=データクラス.EditPointOpen(AbosluteOff);
try
dp.insert(cvtSMFNoteOff(noteNumber));
finally free; end;

この間のデルタタイムは関数内部で処理します

こう設計思想が違うとスリ合わせは難しいものになるように思います