Parsing 从MIDI文件中获取注释数据

Parsing 从MIDI文件中获取注释数据,parsing,language-agnostic,midi,Parsing,Language Agnostic,Midi,有没有办法从MIDI文件中获取音符数据?也就是说,我想将MIDI文件分解为它的组成部分,使它们以唯一的单词(或任何其他数据类型)的形式出现。 最后我想做的是接收一个MIDI文件并在音符中找到模式。记下每个音符,找出它的频率(播放频率),并记下之后播放其他音符的可能性 在C/C++中这样做会很好,但任何语言都可以。手工解析MIDI文件都不好玩,相信我的话。)这种格式虽然有很好的文档记录,但很难处理,因为您总是处于原始字节级别。因为您对从MIDI文件本身提取一些有意义的信息感兴趣,所以我建议使用一个

有没有办法从MIDI文件中获取音符数据?也就是说,我想将MIDI文件分解为它的组成部分,使它们以唯一的单词(或任何其他数据类型)的形式出现。 最后我想做的是接收一个MIDI文件并在音符中找到模式。记下每个音符,找出它的频率(播放频率),并记下之后播放其他音符的可能性


在C/C++中这样做会很好,但任何语言都可以。

手工解析MIDI文件都不好玩,相信我的话。)这种格式虽然有很好的文档记录,但很难处理,因为您总是处于原始字节级别。因为您对从MIDI文件本身提取一些有意义的信息感兴趣,所以我建议使用一个框架,例如,用C++编写,并支持阅读MIDI文件。
Juce相当大,但是API很好,并且有很好的文档记录。例如,它是非常简单和易于使用的。

< P > Nik Reisman -抱歉,但我不同意你……在C语言中解析MIDI,C++是大约400行代码……没有什么困难,也没什么困难。 我建议您从以下链接开始:
关于midi以及如何阅读它,您需要了解的一切都在这里

在简短的描述中,解析器将如何工作:
1) 以字节模式打开midi
2) 阅读标题块,其中包含有关大小、曲目数量和重要文件格式的信息
-有3种格式:0、1、2(类型2确实“有价值”,只有很少的midi文件具有这种类型,因此如果有类型2,您不需要读取midi)
-如果没有写入:
“MThd”(0x4D546864)
,则以错误结束(这是一个错误的midi文件)
3) 读取曲目块
-如果没有写入:
“MTrk”(0x4D54726B)
以错误结束(这是一个错误的midi文件)
4) 阅读midi事件。。 -有很多事件,您可以使用if-else命令读取它们,也可以只读取您想要知道的事件,例如NOTE-ON、NOTE-OFF -有时在某些midi中,文件没有注释关闭。此事件随注释打开和速度0而更改

在网站上,一切都解释得很好。如果以字节模式打开midi文件,您将只有几个方法,所有内容都与If-else命令有关,此时您将捕获当前存储的内容。
理解可变长度很重要,但在网站上也有解释。这并不难。你可以用谷歌搜索许多网站,其中也解释了可变长度,并提供了一些图片和示例。所以我不认为在这里很难解释


如果你需要更多的建议,写信给我,我会试试看。但解析midi并不像看起来那么难。如果您有问题,请给我写信。

有许多现成的解决方案,从MIDI文件中获取输入,生成音乐可视化, 因此,在理论和实践中,MIDI解析器工作得很好

我正在HTML5中开发这样的音乐可视化工具,生成垂直上下音符,支持残障钢琴演奏者

DLP投影仪很棒,但看起来,我需要在钢琴键盘上安装一个大的液晶电视屏幕,以获得与演奏的音符相匹配的可视化效果

@布伦丹·卡瓦纳是领袖 另一个关键的开发者叫斯蒂芬·马林诺夫斯基

只需按照我的问题获得正确的web链接


可能是NIH综合征?我的意思是一个std::vector类并不难写在表面上,它只是一个可变长度的数组。。。std::log2()也不难编写。。。等等为什么不自己写呢?像手工解析文件这样的东西是最重要的,尤其是在处理“标准”格式时,更是如此,因为这些格式肯定应该在某个地方有一个可靠的实现。对不起,我可以给他发送2198312093框架和第三方解决方案,他可能会遇到比自己编写更大的问题。至少如果我使用第三方图书馆,我会遇到更大的问题,如果我自己写的话。无论如何,需要有人来编写代码。如果我是来自台湾的约瑟夫·诺瓦克(Joseph Nowak),那么这并不重要。一直以来,你都会遇到一些错误。如果您想真正了解某个库在做什么,您需要查看所附带的代码。所以在很多情况下,你自己写比较容易。