发明内容
[0004] 本发明针对当前自动演奏系统的MIDI源文件的局限性,提供了一种多音轨MIDI文件翻译方法,并结合钢琴演奏的需求,定义了一种信息更精简、音符更便于演奏的数据格式存储MIDI文件提取的音符数据。由设计的通信协议将音符数据从控制主板发送至驱动板,完成驱动的设计。
[0005] 多音轨翻译技术的核心包含MIDI事件delta_time的转换和音符数据的再存储。首先,每个MIDI消息的delta_time因弹奏的需要,需要转换为公共时间(即与音轨第一个MIDI消息时刻的时间差),以提高操作音符数据的灵活性。其次,本发明定义了一种链表音符数据存储格式,共包含16条通道链一一对应16条MIDI通道,每个链节点分别存储了一个MIDI事件的音符信息,包含音符操作、音符号、消息时刻、持续时间、按下力度、释放力度。还有一条系统消息链,包含了控制号、控制参数、消息时刻。这种链表音符数据存储格式以链表形式将音符数据再存储,更好地适应自动钢琴的演奏。
[0006] 板间通信技术的设计是为了能够确保在控制主板和驱动板之间音符数据的完整传输。根据链表音符数据存储格式的需要,本发明提出了一种基于CAN总线技术的通信技术,包含两种数据帧格式分别用来传输通道链数据和系统消息链数据:①通道链数据帧包含了消息类型,通道号,音符号,开音时刻,数据区长度,数据区。②系统消息链数据帧包含了消息类型,控制号,数据区长度,数据区。
[0007] 本发明PWM控制技术的设计,因考虑到MIDI音乐的127级力度和钢琴的88个琴键,采用面向对象思想,设计了88个琴键数据对象,每个琴键对象控制一个琴键,每个琴键对象都包含相应琴键号,PWM参数(占空比、周期),琴键状态以及GPIO端口号。驱动板通过中断控制琴键对象输出PWM脉冲波形的时长,通过函数修改琴键对象中PWM参数值达到不同力度控制琴键的目的。
[0008] 本发明技术方案如下:
[0009] 步骤(1).接收并翻译MIDI文件。控制主板设置有MIDI接口和USB端口,使用者可以将MIDI文件储存在U盘等存储设备中,通过USB端口将MIDI数据文件传输给控制主板。控制主板接收到MIDI文件之后,逐音轨提取出所有的MIDI消息(MIDI message),并将每个消息的间隔时间delta_time转换为公共时间(与音轨块第一个MIDI消息时刻的时间差),再将所有音符数据按链表音符数据存储格式再存储,按照每个消息公共时间的先后插入对应音轨的通道链或者系统消息链中。
[0010] 步骤(2).简化通道链,减少链节点数量。由于MIDI标准格式提供的音符事件只存在开音和关音两种操作,而驱动板控制音符数据更适用音符开操作和持续时间参数。因此,为了减少音符数据的冗余,同时提高音符数据的可操作性,音轨块翻译结束之后,遍历通道链,删去所有的关音操作节点,记录关音时刻t关,并向前回溯,找到对应的开音操作的开音时刻t开,将时间差记入持续时间T,即持续时间T=t关-t开(秒)。
[0011] 步骤(3).通过CAN接口传输数据至驱动板。第一步,控制主板将系统消息链按消息类型②传输至驱动板,系统消息链包含音符速度、拍子号、通道号、音调符号等。第二步,将16条通道链所有的音符数据按消息类型①传输至驱动板。最后,驱动板将传来的音符数据提取还原为包含音符数据的通道链和系统消息链。钢琴演奏按照开音时刻对所有通道数据链进行排序。直到所有的音符和系统消息数据接收排序完毕后,进入下一步。
[0012] 步骤(4).驱动板输出PWM波形演奏音符。先从系统消息链中提取出音乐参数,例如音符速度、四分音符时间等。并根据音乐参数设置一个公共时间T作为参照,利用函数设置PWM参数,利用中断控制琴键对象输出PWM波形,依次对16条通道链的音符数据进行弹奏。
[0013] 与背景技术相比,本发明有益效果:本发明综合多音轨MIDI翻译技术、基于CAN总线技术的板间通信协议和PWM控制技术,在尽量保证乐曲质量的基础上,有效提高了自动钢琴演奏系统的适用性和可靠性。具体表现为:
[0014] (1).实用性。采用多音轨MIDI文件翻译技术,解决了当前大部分自动钢琴弹奏源文件仅限于单音轨文件的问题。当需要弹奏多音轨乐曲时,多音轨MIDI文件翻译方法可以将所有音轨的音符信息记录下来,提供驱动板弹奏钢琴音轨音符或者弹奏完整曲子,而已往的自动钢琴演奏方法只能弹奏单一钢琴音轨的乐曲。在乐曲成分越来越多样化的今天,多音轨MIDI演奏方法可能会更加受到大众的欢迎。
[0015] (2).可靠性。采用CAN总线技术与自主设计的板间通信协议进行控制主板与驱动板之间的通信,很大程度上提高了数据传输的可靠性,可以较为完整的保存乐曲的所有音符,提高自动钢琴演奏的音效。确保了乐曲的质量不会因为演奏系统的操作而受到影响。
[0016] (3).精确性。采用PWM控制技术控制电磁螺线圈以至少127级力度演奏乐曲,不仅简化了控制琴键力度的难度,而且极大地还原了乐曲本身的音乐质量,提高了整个自动钢琴演奏方法成果的质量。