用c#写入MIDI文件

本文关键字:文件 MIDI 写入 | 更新日期: 2023-09-27 18:12:47

我一直在试图找到一种方法来写一个MIDI文件使用c# MIDI工具包。但是,我经常遇到时间同步的问题。生成的MIDI文件总是慢拍的。更准确地说,它有正确的节奏相对于自己,但当导入到一个音序器,它似乎不包含任何节奏信息(这是可以理解的,因为我从来没有指定它从我的程序)。没有关于如何执行此操作的文档。

我使用下面的代码将注释插入到音轨中。

public const int NOTE_LENGTH = 32;
private static void InsertNote(Track t, int pitch, int velocity, int position, int duration, int channel)
{
    ChannelMessageBuilder builder = new ChannelMessageBuilder();
    builder.Command = ChannelCommand.NoteOn;
    builder.Data1 = pitch;
    builder.Data2 = velocity;
    builder.MidiChannel = channel;
    builder.Build();
    t.Insert(position * NOTE_LENGTH, builder.Result);
    builder.Command = ChannelCommand.NoteOff;
    builder.Build();
    t.Insert((position + duration) * NOTE_LENGTH, builder.Result);
}

我确信音符本身是好的,因为结果输出是可听到的,但没有节奏信息。我如何将节奏信息输入到包含轨道的Sequence对象中?

用c#写入MIDI文件

偶然发现了一个强力尝试的答案:NOTE_LENGTH应该被3平均可分