【问题标题】:Setting MIDI Tempo in a MIDI file with NAudio使用 NAudio 在 MIDI 文件中设置 MIDI 速度
【发布时间】:2014-01-30 19:22:26
【问题描述】:

我正在使用 NAudio 玩一个真正的玩具项目,这是一个用于音乐的简单 DSL。我想在我从头开始创建的 MIDI 流中设置速度 - 实际上是从 DSL 开始 - 但我不知道如何发送速度(即每分钟节拍,即一分钟的四分之一数),或者更好,但我必须使用 hack。 默认的 MidiEvent 构造函数/方法不允许我将额外的数据发送到流中(速度被比特编码为 3 个字节,代表四分音符的毫秒持续时间),我没有找到一种方法来做到这一点,除了这个糟糕的 hack (顺便说一句,它就像一个魅力):

output = new MidiEventCollection(0, Tpq);

var evt = new MetaEvent(MetaEventType.SetTempo, 3, 0);
/* Oh no really please don't dont do that!!!!!
 * what does it mean? You are touching a privare variable
 * and what the neck is that BitConverter bloody mess?
 */
 var fi = evt.GetType().GetField("data", BindingFlags.Instance | BindingFlags.NonPublic);
 var midiTempo = 60000000 / Bpm;
 var split = BitConverter.GetBytes(midiTempo);
 fi.SetValue(evt, new byte[] {split[0],split[1],split[2]  });
output.AddEvent(evt , 0);

我想问一下,目前 NAudio 有什么礼貌的方法吗?

【问题讨论】:

    标签: c# midi naudio


    【解决方案1】:

    为此使用 TempoEvent:

    var evt = new TempoEvent(midiTempo, 0)
    

    【讨论】:

    • 我不知道我是怎么想念它的,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多