MIDI文件 好 好 演奏指令序列 小
声音文件 好 差 真实声音 大
模块文件 差 一般 真实声音及演奏序列 大
声音文件和MIDI文件的通用性很好,适用于各种平台,而且相互之间的转换也不难,有很多专门的音频文件格式转换工具可以使用。随着MP3等格式的兴起,模块文件已经很少使用了。同时,模块文件只是一个总称,根据具体的编码方式又有mod, s3m, xm, mtm, far, kar, it等多种不同的格式,要提取旋律必须针对不同的编码格式作相应的处理。
MIDI文件和模块文件记录了一系列演奏音乐的指令,只要了解了文件的格式,就可以方便的将所需要的旋律特征提取出来。从编程的角度来看,其处理过程并不复杂,只涉及到一些二进制数据的读取、判断和写出。同时,MIDI文件的尺寸相对于模块文件要小得多,处理的速度更快,占用系统的资源也更少,是最方便、最容易实现的。而对于声音文件来说,旋律特征的提取就要复杂的多了。必须进行特定的数字音频处理,通过时域方法、频域方法、同态方法、线性预测编码等方法进行音符的检测、切分,然后提取出相应的音高、音长等特征。整个过程的难度和复杂度要大大高于处理另外两种格式。
因此系统在实际中采用MIDI文件格式作为数据库音乐的存储格式。当然,我们可以将MIDI文件与其它格式的文件关联起来,通过对MIDI文件的检测可以确定哼唱歌曲的名称,进而找到同一首歌的其它格式文件。这样,在匹配检索返回的匹配列表中就可以供用户选择多种格式的音乐文件进行下载。
3.3 MIDI文件分析
MIDI是英语Music Instrument Digital Interface的缩写,意思是“数字化乐器接口’。一个MIDI文件基本上由一个头块和多个轨道块组成,其中头块用来描述文件的格式,轨道块用来记录音乐的演奏指令,可以为某种声音、某种乐谱、某种乐器或者你需要的任何东西分配一个轨道。
(1)头块 每个MIDI文件的头块格式是:4D 54 68 64 00 00 00 06 ff ff nn nn dd dd。其中前四个字节“4D 54 68 64”是ASCII码的“MThd",用来鉴别该文件是否是MIDI文件。随后的四个字节表示头块剩余部分的大小。因为现行的MIDI文件头块中,剩余部分的大小固定为6个字节。
(2)轨道块 头块之后剩下的部分是文件的轨道块,包含一个或多个轨道。每个轨道由轨道头和轨道数据组成。若增加一个轨道,只要简单的把数据追加在前一个轨道的后面就可以了。
与文件头的结构相似,轨道头的结构为:4D 54 72 6B xx xx xx xx。其中前四个字节"4D 54 72 6B”是ASCII码的“MTrk",用来鉴别每个轨道的开始。随后的四个字节“xxxx xx xx”表示轨道数据块部分的大小。
3.4 基于MIDI多音轨的主旋律的确定方法
MIDI文件最多可以包括16个轨道,一般每个轨道由一种乐器的音符组成,代表一种乐器产生的音乐。一首歌曲可能由多种乐器合奏产生,也可能由某种乐器独奏产生,但即使是独奏也一定会有其它乐器的伴奏。通常人们哼唱的曲调都来自音乐的主旋律轨道,所以要从MIDI文件中提取旋律特征,首先要确定音乐的主旋律轨道。去掉非主旋律轨道。这样不仅能够提高匹配检索的速度,还可以去掉其它旋律的干扰,提高匹配检索的准确度。
由于MIDI文件中并没有规定轨道的使用规则,所以哪种乐器使用哪个轨道完全是由MIDI音乐的创作者来决定,没有一定的规律可循。在当前国内外的文献资料中,处理多轨道MIDI文件一般有以下两种方法: 基于旋律的音乐检索系统设计与实现(6):http://www.youerw.com/tongxin/lunwen_2379.html