Midi文件解码方法和系统的制作方法_2

文档序号:9305391阅读:来源:国知局
,来检测各个轨道的事件的持续时间长度或剩余时间。
[0050]在对MIDI文件进行排序开始时,记录各个轨道的文件位置。可以理解的,在对MIDI文件进行排序开始时,所有轨道都是没有事件发生的,所以各个轨道的时间信息参数的时间计数可以均为零,表示各个轨道均可以处理事件。然后对各个轨道进行轨道事件的获取。当获取到轨道的时间信息参数的持续时间长度不为零的事件后,记录文件位置,并开始时间信息参数的时间计数。然后继续下一个轨道的事件控制。首先检测下一个轨道的时间信息参数所表示的事件持续时间是否结束。若没有结束,则检测下下个轨道的时间信息参数所表示的事件持续事件是否结束,直至检测到某一轨道的时间信息参数所表示的事件持续时间结束。跳转到该轨道的文件位置,然后进行事件读取处理。并在文件读取的时,进行新文件写入。则得到的新文件是按照事件发生的时间顺序进行排列的。重复上述过程,直至对文件的排序完成。
[0051]优选的,在其他实施例中,本发明MIDI文件解码方法还可以包括:事件通讯设备将接收到的事件传入到文件写入系统时,按照时间顺序将接收到的事件排序到MIDI文件中。
[0052]可以理解的,对于自编自解的系统,在录制文件的过程中,可以按照时间顺序,将事件通讯设备接收到的事件排序到MIDI文件中。一个实施例中,时间通讯设备接收到事件后,可以按照接收各个事件的时间的先后顺序,将接收到的事件排序到MIDI文件中。
[0053]优选的,在其他实施例中,本发明MIDI文件解码方法还可以包括:插入新轨道数据时,按照时间顺序将新轨道数据插入MIDI文件中。
[0054]可以理解的,对于录制好的MIDI文件,若要加入新轨道数据,则可以按照时间顺序将新轨道数据插入MIDI文件中。具体的,可以参照步骤SllO和S120,按照时间顺序将新轨道数据插入MIDI文件中。
[0055]另外,将事件通讯设备接收到的事件或新轨道数据按照时间顺序排序到MIDI文件中后,可以通过步骤S200对MIDI文件进行解码。
[0056]S200,将排序后的MIDI文件进行解码。
[0057]对步骤SlOO中排序后的MIDI文件进行解码时,可以按照时间顺序读取各个事件。具体的,参见图3,一个实施例中,步骤S200可以包括以下步骤:
[0058]S210,检测MIDI文件的各个轨道的时间信息参数。
[0059]当检测MIDI文件的某个轨道的时间信息参数表示该轨道所处理的事件结束时,执行步骤S220。具体情况,可参照步骤SllO中的描述。
[0060]S220,在时间信息参数表示当前轨道处理完当前事件时,将下一个事件由当前轨道进行解码处理。
[0061]其中,可以逐一检测各个轨道的时间信息参数,当检测到某一轨道的时间信息参数表示该轨道所处理的事件结束时(例如时间信息参数的时间计数为零),则说明该轨道所处理的当前事件结束。则将文件的下一个事件交由该轨道进行解码处理。
[0062]同样,本实施例中,可以通过检测各个轨道的delta,来检测各个轨道的事件的持续时间长度或剩余时间。具体的,每个轨道均有一个包含时间信息参数的delta,表示该轨道正在处理的事件发生的持续时间。这个delta标志着该轨道是否已经可以处理下一个事件。例如,检测到一个轨道当前的delta为30,则表示该轨道的事件还在被处理,所以进行delta自减并继续查询下一个轨道的delta。直至获取到的某个轨道的delta为零时,则将文件的下一个事件交由delta为零的轨道进行解码处理。这样文件的各个事件按时间顺序由各个轨道进行解码处理,也不需要额外信息来标志事件的轨道信息。
[0063]上述MIDI文件解码方法,按照MIDI文件的各个轨道的时间信息参数对MIDI文件进行排序,并将排序后的MIDI文件进行解码,不需要跳着获取各个轨道的事件,也不需要预解各个轨道的所有事件,能够降低解码资源,节省MIDI文件的解码成本。
[0064]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。
[0065]基于同一发明构思,本发明实施例提供一种MIDI文件解码系统,由于此系统解决问题的原理与前述一种MIDI文件解码方法相似,因此,该系统的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
[0066]参见图4,一个实施例中,本发明MIDI文件解码系统包括排序模块100和解码模块200。
[0067]排序模块100,被配置以按照MIDI文件的各个轨道的时间信息参数对MIDI文件进行排序。
[0068]—般的,现有的MIDI文件编码方法是按照轨道为单元进行排序的,方便不同轨道的单独录制。但是实际的播放过程是各个轨道的声音加权叠加后合成的结果。而本发明MIDI文件解码系统,排序模块100按照MIDI文件的各个轨道的时间信息参数对MIDI文件进行排序,不需要跳转文件,也不会有Buf预存的限制。
[0069]参见图5,一个实施例中,排序模块100可以包括第一时间信息检测单元110和读取写入单元120。
[0070]第一时间信息检测单元110,被配置以检测MIDI文件的各个轨道的时间信息参数。
[0071]在MIDI文件的各个轨道中,均包含有一个时间信息参数,该时间信息参数表示对应的轨道中的事件的持续时间长度。因此,可以通过该时间信息参数对MIDI文件进行排序。
[0072]具体的,第一时间信息检测单元110可以检测各个轨道的时间信息参数,当检测到某一轨道的时间信息参数表示该轨道所处理的事件结束时,通知读取写入单元120。其中,某一轨道的时间信息参数的时间计数递减至零时,表示该轨道所处理的当前事件结束。各个轨道的时间信息参数所表示的该轨道所处理的事件的剩余时间会随着时间递减,直至为零。
[0073]读取写入单元120,被配置以在时间信息参数表示当前轨道所处理的事件结束时,跳转到当前轨道的文件位置,进行事件读取处理,并写入MIDI文件。
[0074]其中,可以逐一检测各个轨道的时间信息参数,当检测到某一轨道的时间信息参数表示该轨道所处理的事件结束时(例如时间信息参数的时间计数为零),则说明该轨道所处理的当前事件结束。跳转到该轨道的文件位置,然后进行时间读取处理,并写入新文件。
[0075]通过第一时间信息检测单元110和读取写入单元120的反复处理,可完成对MIDI文件的排序。
[0076]以下通过一详细实例,对排序模块100进行进一步说明。每个轨道中均有一个包含时间信息参数的delta,因此可以通过检测各个轨道的delta,来检测各个轨道的事件的持续时间长度或剩余时间。
[0077]在对MIDI文件进行排序开始时,记录各个轨道的文件位置。可以理解的,在对MIDI文件进行排序开始时,所有轨道都是没有事件发生的,所以各个轨道的时间信息参数的时间计数可以均为零,表示各个轨道均可以处理事件。然后对各个轨道进行轨道事件的获取。当获取到轨道时间信息参数的持续时间长度不为零的事件后,记录文件位置,并开始时间信息参数的时间计数。然后继续下一个轨道的事件控制。首先检测下一个轨道的时间信息参数所表示的事件持续时间是否结束。若没有结束,则检测下下个轨道的时间信息参数所表示的事件持续事件是否结束,直至检测到某一轨道的时间信息参数所表示的事件持续时间结束。跳转到该轨道的文件位置,然后进行事件读取处理。并在文件读取的时,进行新文件写入。则得到的新文件是按照事件发生的时间顺序进行排列的。重复
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1