CN106098038B - 一种自动钢琴演奏系统中多音轨midi文件的演奏方法 - Google Patents
一种自动钢琴演奏系统中多音轨midi文件的演奏方法 Download PDFInfo
- Publication number
- CN106098038B CN106098038B CN201610627686.6A CN201610627686A CN106098038B CN 106098038 B CN106098038 B CN 106098038B CN 201610627686 A CN201610627686 A CN 201610627686A CN 106098038 B CN106098038 B CN 106098038B
- Authority
- CN
- China
- Prior art keywords
- data
- chain
- midi
- note
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10H—ELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
- G10H1/00—Details of electrophonic musical instruments
- G10H1/0033—Recording/reproducing or transmission of music for electrophonic musical instruments
- G10H1/0041—Recording/reproducing or transmission of music for electrophonic musical instruments in coded form
- G10H1/0058—Transmission between separate instruments or between individual components of a musical system
- G10H1/0066—Transmission between separate instruments or between individual components of a musical system using a MIDI interface
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10F—AUTOMATIC MUSICAL INSTRUMENTS
- G10F1/00—Automatic musical instruments
- G10F1/02—Pianofortes with keyboard
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10H—ELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
- G10H1/00—Details of electrophonic musical instruments
- G10H1/32—Constructional details
- G10H1/34—Switch arrangements, e.g. keyboards or mechanical switches specially adapted for electrophonic musical instruments
- G10H1/344—Structural association with individual keys
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Acoustics & Sound (AREA)
- Multimedia (AREA)
- Electrophonic Musical Instruments (AREA)
Abstract
本发明公开了一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法。本发明中的控制主板将从MIDI接口或者USB端口接收到的MIDI数据,通过适用于自动钢琴弹奏的多音轨MIDI文件翻译技术译码,并包装成链表格式的音符数据,通过CAN总线技术传输到驱动板,驱动板接收链表格式的音符数据转换为PWM波形经GPIO口传输到电流放大电路,从而控制琴键下方的电磁螺线圈驱动琴键。本发明综合多音轨MIDI翻译技术、基于CAN总线技术的板间通信协议和PWM控制技术,在尽量保证乐曲质量的基础上,有效提高了自动钢琴演奏系统的适用性和可靠性。
Description
技术领域
本发明涉及一种多音轨MIDI文件的演奏方法,尤其是一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法。
背景技术
自动钢琴起源于19世纪欧洲,发明至今都深受音乐爱好者甚至音乐艺术家的青睐,从早期的纸卷自动钢琴到现如今的电磁原理自动钢琴,人类追求钢琴自动化的脚步从未停歇。二十世纪七十年代末,为解决电声乐器之间通信的问题,国际乐器制造者协会通过并公布了一种通用的电子音乐格式——MIDI格式。这一技术的发明,不仅使得乐器之间不再存在通讯障碍,更重要的是也为电磁原理自动钢琴的出现提供了可能。电磁原理自动钢琴由传统机械自动钢琴和自动演奏系统两部分组成。目前已存在的自动钢琴演奏技术,都是以单音轨MIDI音乐文件作为源文件,弹奏只含钢琴音符的乐曲,但随着现今乐曲的成分越来越多样化,为了提高自动钢琴的实用性,本发明提供了一种适应性更强的多音轨MIDI翻译技术,以及一种适用于自动钢琴演奏的链表音符数据存储格式,便于驱动板快速提取音符数据并进行弹奏。这种多音轨MIDI翻译技术算法易理解,同时能很好地适用现今乐曲发展的趋势,让更多的人愿意接触自动演奏钢琴。
设计自动钢琴演奏方法另一难点就是力度的控制。呈现一首优质的音乐,至少需要精确地表达出MIDI音乐中规定的127级力度。和合成器发声不同,自动钢琴是采用电磁线圈驱动活塞的方式控制琴键进行弹奏,那么控制力度就成了控制电磁线圈的电流通量。为了解决这个问题,本发明采用了在工业控制领域很受用的PWM控制技术。PWM技术是一种用占空比和周期来控制脉冲电流中高电平的占比的控制技术,而应用于自动钢琴中,细微差别的占空比和周期都能产生不同的力度演奏琴键,这种技术极大地满足了MIDI音乐127级力度级的控制要求,为乐曲的质量提供了保证。
发明内容
本发明针对当前自动演奏系统的MIDI源文件的局限性,提供了一种多音轨MIDI文件翻译方法,并结合钢琴演奏的需求,定义了一种信息更精简、音符更便于演奏的数据格式存储MIDI文件提取的音符数据。由设计的通信协议将音符数据从控制主板发送至驱动板,完成驱动的设计。
多音轨翻译技术的核心包含MIDI事件delta_time的转换和音符数据的再存储。首先,每个MIDI消息的delta_time因弹奏的需要,需要转换为公共时间(即与音轨第一个MIDI消息时刻的时间差),以提高操作音符数据的灵活性。其次,本发明定义了一种链表音符数据存储格式,共包含16条通道链一一对应16条MIDI通道,每个链节点分别存储了一个MIDI事件的音符信息,包含音符操作、音符号、消息时刻、持续时间、按下力度、释放力度。还有一条系统消息链,包含了控制号、控制参数、消息时刻。这种链表音符数据存储格式以链表形式将音符数据再存储,更好地适应自动钢琴的演奏。
板间通信技术的设计是为了能够确保在控制主板和驱动板之间音符数据的完整传输。根据链表音符数据存储格式的需要,本发明提出了一种基于CAN总线技术的通信技术,包含两种数据帧格式分别用来传输通道链数据和系统消息链数据:①通道链数据帧包含了消息类型,通道号,音符号,开音时刻,数据区长度,数据区。②系统消息链数据帧包含了消息类型,控制号,数据区长度,数据区。
本发明PWM控制技术的设计,因考虑到MIDI音乐的127级力度和钢琴的88个琴键,采用面向对象思想,设计了88个琴键数据对象,每个琴键对象控制一个琴键,每个琴键对象都包含相应琴键号,PWM参数(占空比、周期),琴键状态以及GPIO端口号。驱动板通过中断控制琴键对象输出PWM脉冲波形的时长,通过函数修改琴键对象中PWM参数值达到不同力度控制琴键的目的。
本发明技术方案如下:
步骤(1).接收并翻译MIDI文件。控制主板设置有MIDI接口和USB端口,使用者可以将MIDI文件储存在U盘等存储设备中,通过USB端口将MIDI数据文件传输给控制主板。控制主板接收到MIDI文件之后,逐音轨提取出所有的MIDI消息(MIDI message),并将每个消息的间隔时间delta_time转换为公共时间(与音轨块第一个MIDI消息时刻的时间差),再将所有音符数据按链表音符数据存储格式再存储,按照每个消息公共时间的先后插入对应音轨的通道链或者系统消息链中。
步骤(2).简化通道链,减少链节点数量。由于MIDI标准格式提供的音符事件只存在开音和关音两种操作,而驱动板控制音符数据更适用音符开操作和持续时间参数。因此,为了减少音符数据的冗余,同时提高音符数据的可操作性,音轨块翻译结束之后,遍历通道链,删去所有的关音操作节点,记录关音时刻t关,并向前回溯,找到对应的开音操作的开音时刻t开,将时间差记入持续时间T,即持续时间T=t关-t开(秒)。
步骤(3).通过CAN接口传输数据至驱动板。第一步,控制主板将系统消息链按消息类型②传输至驱动板,系统消息链包含音符速度、拍子号、通道号、音调符号等。第二步,将16条通道链所有的音符数据按消息类型①传输至驱动板。最后,驱动板将传来的音符数据提取还原为包含音符数据的通道链和系统消息链。钢琴演奏按照开音时刻对所有通道数据链进行排序。直到所有的音符和系统消息数据接收排序完毕后,进入下一步。
步骤(4).驱动板输出PWM波形演奏音符。先从系统消息链中提取出音乐参数,例如音符速度、四分音符时间等。并根据音乐参数设置一个公共时间T作为参照,利用函数设置PWM参数,利用中断控制琴键对象输出PWM波形,依次对16条通道链的音符数据进行弹奏。
与背景技术相比,本发明有益效果:本发明综合多音轨MIDI翻译技术、基于CAN总线技术的板间通信协议和PWM控制技术,在尽量保证乐曲质量的基础上,有效提高了自动钢琴演奏系统的适用性和可靠性。具体表现为:
(1).实用性。采用多音轨MIDI文件翻译技术,解决了当前大部分自动钢琴弹奏源文件仅限于单音轨文件的问题。当需要弹奏多音轨乐曲时,多音轨MIDI文件翻译方法可以将所有音轨的音符信息记录下来,提供驱动板弹奏钢琴音轨音符或者弹奏完整曲子,而已往的自动钢琴演奏方法只能弹奏单一钢琴音轨的乐曲。在乐曲成分越来越多样化的今天,多音轨MIDI演奏方法可能会更加受到大众的欢迎。
(2).可靠性。采用CAN总线技术与自主设计的板间通信协议进行控制主板与驱动板之间的通信,很大程度上提高了数据传输的可靠性,可以较为完整的保存乐曲的所有音符,提高自动钢琴演奏的音效。确保了乐曲的质量不会因为演奏系统的操作而受到影响。
(3).精确性。采用PWM控制技术控制电磁螺线圈以至少127级力度演奏乐曲,不仅简化了控制琴键力度的难度,而且极大地还原了乐曲本身的音乐质量,提高了整个自动钢琴演奏方法成果的质量。
附图说明
图1.自动演奏系统流程图;
图2.自动演奏系统结构示意图;
图3.通道链与系统消息链节点示意图;
图4.数据帧结构示意图。
具体实施方式
以下结合附图对本发明进一步说明。
如图1所示,本次发明的自动钢琴演奏系统分以下几个步骤:
步骤一,接收并翻译MIDI文件:接收到由USB端口输入的多音轨MIDI文件,按照MIDI文件中音轨排列的先后,逐字节分析音轨块(包含音轨块头MTrk,系统消息,MIDI消息,音轨结束标志ff 2f 00),将由MIDI标准格式存储的音符数据,转换为更适合自动钢琴演奏的链表节点数据,即每条通道对应音轨中的音符数据构成一条通道消息链,直到分析完MIDI文件所含的所有音轨。
步骤二,简化通道链,目的在于减少音符数据的冗余,方便驱动板驱动琴键。由于标准MIDI格式的音符事件只存在开音和关音两种操作,而驱动板控制音符数据更适用音符开操作和持续时间参数。因此,为了减少音符数据的冗余,同时提高音符数据的可操作性,引进音轨块简化算法。音轨块简化算法为倒序遍历通道链,删去关音操作的音符数据节点,记录关音时刻t关,并向前回溯,找到对应音符的开音操作的消息时刻t开,即持续时间T=t关-t开(秒),保留此音符开音操作的数据节点,其中消息时刻为t开,持续时间为T。
步骤三,利用CAN总线技术传输数据至驱动板。控制主板先将系统消息链按消息类型②传输至驱动板,包含音符速度,通道前缀,拍子记号、音调等参数。再将16条通道链所有的音符数据按消息类型①传输至驱动板,驱动板提取传来的音符数据帧还原为包含音符数据的通道链。按照开音时刻对所有通道数据链进行排序,驱动板每接受完一条完整的通道链返回ACK信号,直到所有的音符和系统消息数据接收排序完毕。
步骤四,输出PWM波形演奏音符,驱动板设置一个公共时间值T_public作为参照,于乐曲第一个音符开始弹奏时开始计时。利用中断控制琴键对象的状态位,控制PWM波形的输出;利用函数设置PWM参数值,改变演奏琴键的力度。例如音符C#从T=10时刻开音,持续15个时间单位。此算法即在T_public=10时,将此音符状态位使能,并将此音符事件加入到任务链中,直到T_public=25时系统产生中断,修改琴键对象的状态位,释放琴键,并将此事件从任务链移除,直到整首乐曲弹奏完毕。
如图2所示,本次发明的自动演奏钢琴的系统结构由两部分组成:控制主板和驱动板。控制主板设置有USB端口、CAN接口、微处理器以及为控制主板供电的电源接口。驱动板设置有CAN接口、微处理器以及GPIO引脚。控制主板运算能力强、资源丰富,且已拓展,可以根据设计者的需求,添加功能,比如蓝牙功能。驱动板资源丰富,配置大量的GPIO引脚,提供琴键对象输出PWM脉冲波形至电流放大电路驱动电磁铁弹奏琴键。CAN接口保证了控制主板和驱动板信息的交互。
如图3所示,抽象展示了两种链表节点:通道消息链节点和系统消息链节点。通道消息链节点为音符数据,为了便于驱动板读取音符数据,设置了音符操作、音符号、消息时刻、持续时间、按下力度、释放力度六大参数,并且按照消息时刻升序排列链表。系统消息链设置了控制号、控制参数、消息时刻三个参数。
如图4所示,抽象展示了两种通信数据帧:通道消息数据帧和系统消息数据帧。通道消息数据帧包含的数据为通道链数据,即为音符数据,因此这个数据帧较为复杂,包括消息类型,通道号,音符号,开音时刻,数据区长度,数据区,其中数据区主要包含力度数值。系统消息数据帧包含系统消息链的数据,包括消息类型,控制号,数据区长度,数据区。其中数据区在不同系统消息中包括不同的数据,例如拍子号、音调号等。
Claims (5)
1.一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法,其特征在于该方法包括以下步骤:
步骤(1).接收并翻译MIDI文件:MIDI数据文件通过USB端口传输给控制主板;控制主板接收到MIDI文件之后,逐音轨提取出所有的MIDI消息,并将每个消息的间隔时间delta_time转换为公共时间,再将所有音符数据按链表音符数据存储格式再存储,按照每个消息公共时间的先后插入对应音轨的通道链或者系统消息链中;
所述的链表音符数据存储格式,共包含16条通道链,16条通道链对应16条MIDI通道,每个链节点分别存储了一个MIDI事件的音符信息,还有1条系统消息链;
步骤(2).简化通道链,减少链节点数量:音轨块翻译结束之后,遍历通道链,删去所有的关音操作节点,记录关音时刻t关,并向前回溯,找到对应的开音操作的开音时刻t开,将时间差记入持续时间T,即持续时间T=t关-t开;
步骤(3).通过CAN接口传输数据至驱动板:
第一步、控制主板将系统消息链按第二种数据帧格式传输至驱动板,系统消息链包含音符速度、拍子号、通道号、音调符号;
第二步、将16条通道链所有的音符数据按第一种数据帧格式传输至驱动板;
第三步、驱动板将传来的音符数据提取还原为包含音符数据的通道链和系统消息链;
第四步、钢琴演奏按照开音时刻对所有通道链进行排序,直到所有的音符和系统消息数据接收排序完毕;
所述的第一种数据帧格式包含了第一消息类型、通道号、音符号、开音时刻、第一数据区长度和第一数据区;
所述的第二种数据帧格式包含了第二消息类型、控制号、第二数据区长度和第二数据区;
步骤(4).驱动板输出PWM波形演奏音符:先从系统消息链中提取出音乐参数,并根据音乐参数设置一个公共时间作为参照,利用函数设置PWM参数,改变演奏琴键的力度,利用中断控制琴键对象输出PWM波形,依次对16条通道链的音符数据进行弹奏。
2.根据权利要求1所述的一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法,其特征在于:所述的通道链中的每个链节点包含音符操作、音符号、消息时刻、持续时间、按下力度和释放力度。
3.根据权利要求1所述的一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法,其特征在于:所述的系统消息链中的每个链节点包含了控制号、控制参数和消息时刻。
4.根据权利要求1所述的一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法,其特征在于:所述的第一数据区包含力度数值。
5.根据权利要求1所述的一种自动钢琴演奏系统中多音轨MIDI文件的演奏方法,其特征在于:所述的第二数据区包含拍子号、音调号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610627686.6A CN106098038B (zh) | 2016-08-03 | 2016-08-03 | 一种自动钢琴演奏系统中多音轨midi文件的演奏方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610627686.6A CN106098038B (zh) | 2016-08-03 | 2016-08-03 | 一种自动钢琴演奏系统中多音轨midi文件的演奏方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106098038A CN106098038A (zh) | 2016-11-09 |
CN106098038B true CN106098038B (zh) | 2019-07-26 |
Family
ID=57454890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610627686.6A Active CN106098038B (zh) | 2016-08-03 | 2016-08-03 | 一种自动钢琴演奏系统中多音轨midi文件的演奏方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106098038B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106910490B (zh) * | 2017-04-30 | 2020-03-20 | 杭州电子科技大学 | 一种自动钢琴控制装置及方法 |
CN109119053B (zh) * | 2018-08-08 | 2021-07-02 | 瓦纳卡(北京)科技有限公司 | 一种信号传输方法、装置、电子设备以及计算机可读存储介质 |
CN109366495A (zh) * | 2018-10-30 | 2019-02-22 | 希格斯动力科技(珠海)有限公司 | 弹奏机器人的手指舵机控制方法及装置 |
CN113066458B (zh) * | 2021-03-17 | 2024-07-09 | 平安科技(深圳)有限公司 | 基于类lisp链数据的旋律生成方法、装置、设备及存储介质 |
CN115297108B (zh) * | 2022-08-11 | 2023-08-25 | 青岛美迪康数字工程有限公司 | 基于钢琴音节的诊疗质控文件传输方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1409295A (zh) * | 2001-09-18 | 2003-04-09 | 武汉科恒工控工程有限责任公司 | 自动钢琴演奏系统 |
CN1460989A (zh) * | 2002-05-14 | 2003-12-10 | 卡西欧计算机株式会社 | 自动演奏装置及自动演奏处理程序 |
CN101042861A (zh) * | 2006-03-22 | 2007-09-26 | 雅马哈株式会社 | 用于乐器的自动演奏系统和其中用于自学的计算机程序 |
CN103531188A (zh) * | 2012-07-03 | 2014-01-22 | 上海斐讯数据通信技术有限公司 | 一种midi音乐发生器和演奏midi音乐的系统及方法 |
JP2016114717A (ja) * | 2014-12-12 | 2016-06-23 | 国立大学法人福井大学 | 打楽器の自動演奏装置及び自動演奏方法 |
-
2016
- 2016-08-03 CN CN201610627686.6A patent/CN106098038B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1409295A (zh) * | 2001-09-18 | 2003-04-09 | 武汉科恒工控工程有限责任公司 | 自动钢琴演奏系统 |
CN1460989A (zh) * | 2002-05-14 | 2003-12-10 | 卡西欧计算机株式会社 | 自动演奏装置及自动演奏处理程序 |
CN101042861A (zh) * | 2006-03-22 | 2007-09-26 | 雅马哈株式会社 | 用于乐器的自动演奏系统和其中用于自学的计算机程序 |
CN103531188A (zh) * | 2012-07-03 | 2014-01-22 | 上海斐讯数据通信技术有限公司 | 一种midi音乐发生器和演奏midi音乐的系统及方法 |
JP2016114717A (ja) * | 2014-12-12 | 2016-06-23 | 国立大学法人福井大学 | 打楽器の自動演奏装置及び自動演奏方法 |
Non-Patent Citations (1)
Title |
---|
浅谈钢琴自动演奏系统;迟耀丹 等;《现代制造技术与装备》;20151115;153-154 * |
Also Published As
Publication number | Publication date |
---|---|
CN106098038A (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106098038B (zh) | 一种自动钢琴演奏系统中多音轨midi文件的演奏方法 | |
CN103597543B (zh) | 语义音轨混合器 | |
KR101292698B1 (ko) | 메타데이터 부여 방법 및 장치 | |
CN102800307B (zh) | 乐音生成装置 | |
CN105243920A (zh) | 键盘类乐器弹奏指导系统及教学方法 | |
CZ303795A3 (en) | Method of controlling music accompaniment by a computer | |
CN106548767A (zh) | 一种演奏控制方法、装置及演奏乐器 | |
CN102163448A (zh) | 录音装置 | |
CN108899004A (zh) | 五线谱音符与midi文件音符同步和评分的方法及装置 | |
CN101896963B (zh) | 用于在音频播放器中提供多区器具支持的方法和系统 | |
US11817070B2 (en) | Arbitrary signal insertion method and arbitrary signal insertion system | |
US4176578A (en) | System for encoding of bass and treble expression effects while recording from the keyboard of an electronic player piano | |
CN101149957B (zh) | 一种音字同步播放的方法及播放器 | |
RU2006124711A (ru) | Способ синхронизации, по меньшей мере, одного периферийного мультимедийного приспособления портативного устройства связи со звуковым файлом и соответствующее портативное устройство связи | |
CN109366495A (zh) | 弹奏机器人的手指舵机控制方法及装置 | |
JPS6252390B2 (zh) | ||
US8759657B2 (en) | Systems and methods for providing variable root note support in an audio player | |
US4132142A (en) | Method and apparatus for reproducing a musical presentation | |
CN103594105A (zh) | 一种使用cd光碟在自动演奏钢琴上进行演奏的方法 | |
CN113112971B (zh) | 一种midi残缺音播放方法 | |
Chen et al. | A novel extraction method for melodic features from midi files based on probabilistic graphical models | |
CN116486766A (zh) | 一种基于自动演奏系统的智能钢琴自动伴奏方法 | |
CN106652983A (zh) | 一种字幕制作方法及系统 | |
KR100472525B1 (ko) | 의미적 연결구조를 이용한 통합 콘텐츠 데이터의 저장 및재생방법 | |
JPS6341153B2 (zh) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |