使用 NAudio 在 MIDI 文件中设置 MIDI 速度
Posted
技术标签:
【中文标题】使用 NAudio 在 MIDI 文件中设置 MIDI 速度【英文标题】:Setting MIDI Tempo in a MIDI file with NAudio 【发布时间】: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 有什么礼貌的方法吗?
【问题讨论】:
【参考方案1】:为此使用 TempoEvent:
var evt = new TempoEvent(midiTempo, 0)
【讨论】:
我不知道我是怎么想念它的,谢谢:)以上是关于使用 NAudio 在 MIDI 文件中设置 MIDI 速度的主要内容,如果未能解决你的问题,请参考以下文章
使用 NAudio 从一段 MIDI 文件中读取 MIDI 事件、消息