使用Lua读取并解析.MID文件?

3

我正在尝试用Lua读取一个.MID文件,然后将其解析为一个包含所有音符的表格(例如 {"A", "B#", "Cb"等),但我无法正确读取该文件。我使用io.open和file:lines(),但是将这些相同的行写入另一个midi文件会导致不起作用的midi文件。

有没有更简单的方法在Lua中读取和解析.MID文件呢?

3个回答

4

标准MIDI文件格式是二进制的,而非文本。因此你不能指望将其视为“行”来读取。相反,你需要使用read函数来获取字节并检查它们。你最好找到一个C库用于MIDI文件,并将其绑定到Lua。


但是在使用io.open函数读取二进制文件时,“b”参数怎么办? - user809559
2
当然,使用它可能是个好主意,但这并不意味着你可以读取“行”。你仍然需要将文件视为二进制,并且基本上,“lines”函数正在寻找换行符,这在MIDI中意味着其他东西而不是“新行”。 - John Zwinck

4

.MID文件(可能是标准MIDI格式)是二进制的,而不是文本。使用file:lines()读取它们将不起作用。相反,您需要使用file:read("*a")将整个内容读入“字符串”中(Lua字符串可以容纳任意字节的数据)。您还需要确保以二进制模式打开文件(对于这种情况有所区别的平台)。


4

似乎有一个名为MIDI.lua的框架用于解析MIDI数据。不确定它处理MIDI文件的能力如何。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接