Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 从MIDI中提取音符起始_Audio_Midi - Fatal编程技术网

Audio 从MIDI中提取音符起始

Audio 从MIDI中提取音符起始,audio,midi,Audio,Midi,我需要从一个合成音MIDI文件中提取音乐特征(音符细节->音高、持续时间、节奏、响度、音符开始时间)(高音和低音有2个乐谱-低音也可能有和弦)。我正在使用jmusicapi从MIDI文件中提取这些细节。我的方法是把每一个分数,分成几个部分,然后是短语,最后是笔记和提取细节 在我的方法中,它首先读取所有高音音符,然后读取低音音符-但是没有捕获和弦(即,只记录了和弦的一个音符),我无法确定从哪一点开始是低音音符。 因此,我尝试的是获得音符的起始时间(即演奏的音符的起始时间)——因为乐曲开始时高音和低

我需要从一个合成音MIDI文件中提取音乐特征(音符细节->音高、持续时间、节奏、响度、音符开始时间)(高音和低音有2个乐谱-低音也可能有和弦)。我正在使用jmusicapi从MIDI文件中提取这些细节。我的方法是把每一个分数,分成几个部分,然后是短语,最后是笔记和提取细节

在我的方法中,它首先读取所有高音音符,然后读取低音音符-但是没有捕获和弦(即,只记录了和弦的一个音符),我无法确定从哪一点开始是低音音符。 因此,我尝试的是获得音符的起始时间(即演奏的音符的起始时间)——因为乐曲开始时高音和低音的起始时间应该相同——但我无法使用jMusic API提取音符的起始时间。每个音符显示0.0

有没有办法识别音符的声音(高音或低音)?还有和弦的所有音符?如何在MIDI中存储每个音符的语音或音符起始?对于每个MIDI文件,这是不同的吗


非常感谢您的任何见解。提前感谢

您可能想看看这个问题:

其中讨论了从midi文件中提取音符的可能方法

考虑一个MIDI文件可以在多个音轨上分割(“类型1”MIDI文件)

一旦识别出音符,识别和弦仍然是一件棘手的事情。假设你有3个音符:C、E、G“同时”发生(即在测量中被确定为在同一点上是声音)。什么时候才算是C大调和弦

  • 在同一频道播放
  • 由同一乐器演奏(即使在不同的频道)
  • 在同一频道播放,即使它们出现在不同的曲目上

MIDI文件格式非常简单(可能太简单了!!),我建议您在这里查看它的描述:

我对您的术语有疑问#1:“高音2分…MIDI文件”。什么是“分数”?你是说像钢琴乐谱一样的高音和低音两个“五线谱”吗?但MIDI没有“乐谱”或“音阶”,它有“通道”(每个通道是不同的乐器),每个通道可能是复调的(一次演奏多个音符)。解释?是的,我指的是高音和低音。我不知道MIDI没有分数。谢谢你消除了我的误解。但是,你怎么知道一个特定的音符属于高音还是低音呢?这些频道是预定义的还是取决于注释?一个通道能代表几个音符吗?如果是的话,它们可以用来表示和弦吗?我真正需要的是从MIDI中提取这些音乐特征,这样我就可以对另一组音乐特征进行比较,从而达到钢琴演奏评估的目的。谢谢你的关心,康拉德。你还没有解释“分数”是什么;因为你使用这个词的方式似乎和我知道的“乐谱”这个词不一样。“你怎么知道一个特定的音符属于高音还是低音”:你的意思是,一个音符属于高音还是低音?在一般情况下,您不能“知道”,因为MIDI不携带此信息。如果你想把MIDI音符放在高音和低音音阶上,你必须自己决定他们使用哪种乐器;这可能是一个非常高级的问题。通道不是“预定义的”,它们也不“依赖于注释”。通道允许您在单个MIDI流中为多个不同乐器指定音符。例如,您可以将MIDI通道1指定为“钢琴”,将MIDI通道2指定为“长笛”,将MIDI通道3指定为“低音”,将MIDI通道10指定为“鼓”,然后将钢琴、长笛、低音和鼓音符放在同一MIDI流中。感谢您对Remo的了解。我正在浏览你的链接-需要一点时间才能搞定。我这样做只是为了钢琴,所以单一乐器相同的通道。那么,如果两个音符同时演奏(高音和低音),这两个音符是在同一个频道吗?那么对于和弦来说,和弦中的所有音符是否都在同一个声道/音轨中?这对所有MIDI文件都是一样的,还是每个MIDI文件都不同,这取决于它写入MIDI的方式?还有音轨和频道的区别是什么?同时,我将阅读MIDI规范。提前感谢MIDI文件没有“高音”或“低音”音阶的概念。注60是中间C(乐谱中低音和高音之间的一个),你相应地放置其他音符。音符不必在同一个通道上,也不必在同一个音轨上,这取决于MIDI文件是如何创建的。听起来比实际情况更复杂。如果不想直接处理位和字节,可以使用midi到文本实用程序,对midi文件的文本表示进行分析。你可以在这里找到这样的工具:(在页面中查找“文本到midi”)Hi-Remo-你能建议从midi提取音符起始点吗?您的建议-这可以从Java声音API访问吗?还是我必须从头开始编写代码?我需要先找到一个开始的方法。对于评论的延迟和打扰,我深表歉意。提前谢谢。