波形写入装置、方法、电子乐器以及存储介质与流程

文档序号:11178883阅读:449来源:国知局
波形写入装置、方法、电子乐器以及存储介质与流程

相关申请参照

本申请基于并主张2016年3月23日提出的日本专利特愿2016-058773的优先权,将该基础申请的内容全部并入本申请。

本发明涉及波形写入装置、方法、使用了该装置的电子乐器以及存储介质。



背景技术:

在通过波形写入方式产生乐音波形的音源装置中,为了能够利用更多的更长时间的波形数据,有时采用将不使用的波形数据预先保存在例如rom(一级存储装置)中、仅将要使用的波形数据向音源装置能够直接存取的作为波形存储器发挥功能的ram(二级存储装置)转送并使其发音的系统。即,可以说是一种将高价的ram具有的存储容量以上的存储容量的波形数据预先保存在廉价的rom中,仅在需要的情况下移动并用于发音的在成本上有效的方法。

在为这种系统的情况下,在从rom向ram上写入新的音色波形时ram上的空闲的空间不足的情况下,在被写入了别的音色的波形的ram上的存储区域中进行覆写。

作为用于进行这种控制的现有技术,已知有如下的技术(例如专利文献1记载的技术)。rom中按每个音色保存有1个以上的波形数据。音源lsi(大规模集成电路)参照所指定的曲的曲数据,在这些波形数据中确定乐音的发音所需的数据,将确定为需要的波形数据从rom读出后向ram转送并使其保存。由此,提供能够在为了生成要发音的乐音的峰值而将波形数据保存于ram的情况下进一步抑制其数据量的乐音产生装置。

专利文献1:日本特开2007-271827号公报

另外,一般来说,即使是1个音色中具有多个波形数据的情况,1个波形数据断开地配置在ram上的情况在音源lsi的读出构造上也是不允许的,必然需要连续地配置。即,在选择新的音色并配置在ram上时需要准备各波形数据连续配置的量的空闲空间。

但是,现有技术中,由于反复进行波形的写入或覆写,ram上的波形的使用区域和未使用区域的配置变得无秩序,作为由此发生的问题,有即使丢弃写入到ram上的不需要的音色波形而在容量上确保被认为充分的空闲空间,若没有连续性则波形也不能写入的情况。例如即使400kb(千字节)的空闲空间有10处,也不能装载500kb的波形。因此,产生进一步牺牲ram上的音色波形而进行所期望的音色的波形的写入的需要。若这样则不光存在ram的使用效率变得非常差的情况,还产生即使使ram上存在相同的音色的波形也难以预测是否写入某种音色这样的操作难度。在例如a、b、c这样的音色处于ram上的情况下,想要将d这样的音色从rom新写入到ram的情况下,难以预测在某种情况下原样写入、在其他的情况需要将a覆写、进而在其他的情况下需要将a、b覆写等。

一般的计算机上等也同样具有一级存储装置、二级存储装置,因此会发生相同的问题,但为了解决该问题,还有将各文件正使用的存储区域集中到一处的所谓的碎片整理或垃圾回收这样的处理,在像乐器这样不始终要求实时性的计算机的世界,也有时由用户有意识地进行上述处理。

但是,这些处理是非常需要时间的处理,因此有在电子乐器中进行了音色选择那样的时候不能执行的课题。另外,在不演奏时由用户执行也给用户带来了多余的精神负担,有作为乐器不是优选的这样的课题。



技术实现要素:

因此,本发明的优点是,在二级存储装置上不存在波形的音色被选择而将新的音色波形数据从一级存储装置写入到二级存储装置时能够可靠地写入新的波形,从而避免在具有比想要写入的波形的容量大得多的空闲空间的同时却不能写入这样的非效率的状态。

技术方案的一例为一种波形写入装置,包含处理器,上述处理器进行以下的处理:

区段组信息取得处理,按具有存储在一级存储装置中的多个波形数据的音色波形数据中的上述多个波形数据的每个波形数据,分别取得与上述多个波形数据分别建立对应地存储在上述一级存储装置中的多个区段组信息;

组波形数据取得处理,取得与通过上述区段组信息取得处理取得的上述区段组信息相对应的组波形数据,其中,所取得的上述组波形数据是(1)共用上述区段组信息的2个以上的波形数据、以及(2)不共用上述区段组信息的1个波形数据中的至少一方;以及

写入处理,将通过上述组波形数据取得处理取得的上述组波形数据作为1个组,向二级存储装置中的多个区段中的某一区段写入,该多个区段分别是尺寸被预先确定的存储区域。

技术方案的另一例为一种波形写入方法,包括:

区段组信息取得步骤,按具有存储在一级存储装置中的多个波形数据的音色波形数据中的上述多个波形数据的每个波形数据,分别取得与上述多个波形数据分别建立对应地存储在上述一级存储装置中的多个区段组信息;

组波形数据取得步骤,取得与通过上述区段组信息取得步骤取得的上述区段组信息相对应的组波形数据,其中,所取得的上述组波形数据是(1)共用上述区段组信息的2个以上的波形数据、以及(2)不共用上述区段组信息的1个波形数据中的至少一方;以及

写入步骤,将通过上述组波形数据取得步骤取得的上述组波形数据作为1个组,向二级存储装置中的多个区段中的某一区段写入,该多个区段分别是尺寸被预先确定的存储区域。

技术方案的另外一例为一种电子乐器,具备:

权利要求1中记载的波形写入装置;

上述一级存储装置;

上述二级存储装置;以及

根据写入到上述二级存储装置中的上述波形数据生成乐音的音源。

技术方案的另外又一例为一种存储介质,是非暂时性地存储有波形写入装置的计算机可执行的程序的、计算机可读取的存储介质,上述程序使计算机执行以下的处理:

区段组信息取得处理,按具有存储在一级存储装置中的多个波形数据的音色波形数据中的上述多个波形数据的每个波形数据,分别取得与上述多个波形数据分别建立对应地存储在上述一级存储装置中的多个区段组信息;

组波形数据取得处理,取得与通过上述区段组信息取得处理取得的上述区段组信息相对应的组波形数据,其中,所取得的上述组波形数据是(1)共用上述区段组信息的2个以上的波形数据、以及(2)不共用上述区段组信息的1个波形数据中的至少一方;以及

写入处理,将通过上述组波形数据取得处理取得的上述组波形数据作为1个组,向二级存储装置中的多个区段中的某一区段写入,该多个区段分别是尺寸被预先确定的存储区域。

附图说明

在结合以下的附图来考虑以下的详细的记述时,能够得到本申请的更深刻的理解。

图1是本发明的电子键盘乐器的实施方式的外观图。

图2是表示电子键盘乐器的实施方式的硬件构成例的图。

图3是说明本实施方式中的波形数据区段的概念的图。

图4a及图4b是表示闪存音色信息表和音色选择优先级表的数据结构例的图。

图5a至图5c是说明每个音色的波形数据的从大容量闪存向波形存储器的转送动作的图。

图6是波形分割(split)的说明图。

图7是表示存储在rom中的构造体的常数数据的例子的图。

图8是表示存储在ram中的变量数据的例子的图。

图9是表示控制处理的整体处理的例子的主程序(mainroutine)的流程图。

图10是表示初始化处理的详细例的流程图。

图11是表示音色切换处理的详细例的流程图。

图12a及图12b是表示ram波形数据调查程序(routine)以及波形区域确保程序的详细例的流程图。

图13是表示空闲区段数调查程序的详细例的流程图。

图14是表示波形区域开放程序的详细例的流程图。

图15是表示波形写入指示程序的详细例的流程图。

图16是表示波形写入处理的详细例的流程图。

图17是表示波形转送程序的详细例的流程图。

图18是表示按键处理的详细例的流程图。

图19是表示分割波形检索程序的详细例的流程图。

图20是表示区段内波形检索程序的详细例的流程图。

具体实施方式

以下,参照附图详细说明用于实施本发明的方式(以下记载为“本实施方式”)。本实施方式以如下的乐音产生装置作为对象,该乐音产生装置是,适用于例如电子键盘乐器的、为了再现音色根据音高(键区域)或音量(力度(velocity):敲键的速度)等演奏信息变化的情况而将每个音高或每个音量的波形数据(以下将其称为“分割波形”)从大容量的一级存储装置(例如闪存)向二级存储装置(例如基于ram的波形存储器)写入的乐音产生装置。本实施方式实现了在这样的乐音产生装置中在二级存储装置上不存在波形的音色被选择而将新的音色波形数据从一级存储装置向二级存储装置写入时、能够可靠地写入新的波形并且能够避免在具有比想要写入的波形的容量大得多的空闲空间的同时却不能写入这样的非效率的状态的电子乐器。

图1是本发明的电子键盘乐器的实施方式的外观图。本实施方式作为电子键盘乐器100被实施。电子键盘乐器100具备:作为演奏操作键的由多个键构成的键盘101、由作为音色选择操作键的用于进行音色选择的音色选择按钮102以及进行音色以外的各种功能选择的功能选择按钮103构成的开关面板、附加弯音或震音(tremolo)、颤音(vibrato)等各种转调(modulation,演奏效果)的弯音/转调轮104、显示音色或音色以外的各种设定信息的lcd(liquidcrystaldisplay:液晶显示器)105等。并且,虽没有特别图示,但电子键盘乐器100在里面部、侧面部或背面部等具备对通过演奏生成的乐音进行放音的扬声器。

音色选择按钮102如图1所示是用于选择钢琴(图中“piano”)、电子钢琴(图中“e.piano”)、风琴(图中“organ”)、吉他(图中“guitar)等各种音色的类别的按钮群。用户通过按下该音色选择按钮102能够选择例如16音色中的任意音色。

图2是表示图1的电子键盘乐器100的实施方式的硬件构成例的图。图2中,电子键盘乐器100具备cpu(中央运算处理装置)201、rom(只读存储器)202、ram(随机存取存储器)203、大容量闪存(flash)存储器204、连接波形存储器206的音源lsi(大规模集成电路)205、连接图1的键盘101和由图1的音色选择按钮102以及功能选择按钮103构成的开关面板的键扫描器207、连接图1的弯音/转调轮104的a/d变换器210、连接图1的lcd105的lcd控制器209、以及受理midi(musicalinstrumentdigitalinterface)输入的midii/f(接口)213分别被连接到系统总线214的构成。并且,从音源lsi205输出的数字乐音波形数据通过d/a变换器208被变换为模拟乐音波形信号,通过放大器211放大后,从没有特别图示的扬声器或输出端子输出。

cpu201通过边将ram203作为工作存储器使用边执行存储在rom202中的控制程序,来执行图1的电子键盘乐器100的控制动作。并且,rom202存储上述控制程序以及各种固定数据。

大容量闪存存储器204(一级存储装置)是构成多个音色的波形数据等大容量数据的保存区域,通过连续的存取而被依次存取。另一方面,音源lsi205上连接由展开波形数据的ram构成的波形存储器206(二级存储装置),所发音的乐音的波形数据必然需要配置在该波形存储器206上。cpu201将与通过用户操作图1的音色选择按钮102而指定的音色相对应的1组以上的波形数据从大容量闪存存储器204连续地读出,并经由音源lsi205将其转送到波形存储器206,从而能够更换音色数据。

lcd控制器209是控制lcd105的ic(集成电路)。键扫描器207是扫描键盘101、音色选择按钮102或功能选择按钮103等开关面板的状态并通知cpu201的ic。a/d变换器208是检测弯音/转调轮104的操作位置的集成电路。

首先说明具有以上的构成的电子键盘乐器100的实施例中的动作样式的概要。

首先,说明用户界面。在本实施方式的电子键盘乐器100中,通过用户按下图1的音色选择按钮102,能够选择例如16音色中的任意音色来演奏。

接着,说明波形数据的写入转送动作。图3是说明本实施方式中的波形数据区段的概念的图。在波形存储器(ram)上不被进行区段管理的以往的电子键盘乐器中,如作为数据配置301而示出的那样,若反复进行波形数据的写入,则使用区域和空闲区域变成无秩序的配置,即使合计具有充足的空闲区域,也可能发生只是因为没有连续性而不能确保写入空间的情况。

对此,本实施方式中具有作为302而示出的数据配置。在该数据配置中,在波形存储器206的存储区域中以一定的间隔设置不能跨越的边界线。本实施方式中,将该相邻的边界线与边界线之间的区域称为区段。该1区段的数据尺寸全部相同,且被设定为不低于构成各音色的1个以上的波形数据中尺寸最大的波形数据。本实施方式中,以该区段为单位而执行从大容量闪存存储器204向波形存储器206的波形数据的写入。本实施方式中,1个音色具有1个或多个波形数据。在1个音色的1个以上的波形数据的写入中,以1个或多个区段为单位,确保波形存储器206的存储区域(区段确保处理),执行写入。在该情况下,所确保的多个区段不需要连续配置。并且,1个区段中能够写入多个相同音色的波形数据,但以不同的音色的波形数据不混合写入的方式执行控制。

大容量闪存存储器204上记录有例如全16音色的波形数据组,通过将其中构成用户指定的音色的1个以上的波形数据向音源lsi205的波形存储器206写入,从而能够发音。该音色信息通过存储在图2的rom202中的闪存音色信息表来管理。图4a是表示闪存音色信息表的数据结构例的图。在作为图4a的表例示的闪存音色信息表的作为第2行以后的各行而表示的各音色的记录(entries)中,存储有如图4a的表的第1行所示、表示音色编号的“编号”项目值、“音色名”项目值、表示从大容量闪存存储器204的波形存储区域的开头起的存储地址的偏移(16进制数)的“波形地址偏移”项目值、表示该音色中包含的波形数据组的合计的波形尺寸(16进制数)的“波形尺寸”项目值、和这些波形数据组使用的“使用区段数”项目值。

上述16音色分别为,每1音色最大由例如64种波形数据构成,并被连续地保存在大容量闪存存储器204中。音色内的各波形数据中的、被向波形存储器206内的1个区段内转送的1个以上的波形数据被分组为1个组。被向波形存储器206内的1个区段内转送的波形数据在大容量闪存存储器204上也必然连续。1个音色的各波形数据的信息,通过存储在图2的rom202中的音色波形信息表来管理。图4b是表示对每1音色最大64种波形数据进行管理的音色波形信息表的数据结构例的图。在作为图4b的表例示的音色波形信息表的作为第2行以后的各行表示的各波形数据的记录中,存储有如图4b的表的第1行所示那样、从0到63的“波形编号”项目值。并且该记录存储有“最低力度”项目值、“最高力度”项目值、“最低琴键(key)编号”项目值、以及“最高琴键编号”项目值,作为用于判断根据演奏时所演奏的琴键或力度(强度)将哪个波形读出并使其发音的信息(分割区块参数)。并且在该记录中存储有表示该波形数据从转送目的地的波形存储器206的区段的哪个地址被存储的“区段开头起的地址”项目值、和表示该波形数据的尺寸的“波形尺寸”项目值。另外,对值的右端赋予的记号“h”表示该值是16进制数。进而在该记录中存储有表示包含该波形数据的组的“区段组”项目值。

本实施方式中,在构成由用户指定的音色的波形数据组没有被存储在波形存储器206上的情况下,执行接下来的控制处理。首先,以区段为单位,在波形存储器206上搜索并确保(区段确保处理)从大容量闪存存储器204新写入到波形存储器206的构成音色的1个以上的波形数据组所需的数量的区段的空闲区域。所需的区段数通过参照存储在rom202中的图4a所例示的闪存音色信息表中的、与所指定的音色对应的记录的“使用区段数”项目值来决定。在波形存储器206上没有所需的数量的空闲区段的情况下,依次开放并确保与按从早到晚的顺序使用的音色相对应的区段,直到确保了所需的区段数为止。

接着,存储在大容量闪存存储器204中的与被指定的音色相对应的波形数据组被依次转送到波形存储器206上所确保的空闲区段。此时,与指定的音色相对应的rom202中存储的图4b所例示的音色波形信息表中,“区段组”项目值按(从0开始)从小到大的顺序且具有相同值的波形数据组被转送到波形存储器206上的(编号从小到大顺序的)1个空闲区段。图5a~图5c是说明每个音色的波形数据的从大容量闪存存储器204向波形存储器206的转送动作的图。在例如图5a所示的构成guitar音色的大容量闪存存储器204上的第0个到第10个波形数据组被转送到图5b的波形存储器206的情况下,“区段组”项目值=0的第0个到第2个的连续的3组波形数据组被转送到图5b的波形存储器206上的空闲区段=seg0,“区段组”项目值=1的第3个到第5个的连续的3组波形数据组被转送到波形存储器206上的空闲区段=seg4,“区段组”项目值=2的第6个到第8个的连续的3组波形数据组被转送到波形存储器206上的空闲区段=seg6,“区段组”项目值=3的第9个和第10个的连续的2组波形数据组被转送到波形存储器206上的空闲区段=seg63。另一方面例如,在例如图5c所示的构成saxophone音色的大容量闪存存储器204上的第0个到第8个波形数据组被转送到图5b的波形存储器206的情况下,“区段组”项目值=0的第0个到第2个的连续的3组波形数据组被转送到图5b的波形存储器206上的空闲区段=seg2,“区段组”项目值=1的第3个到第5个的连续的3组波形数据组被转送到波形存储器206上的空闲区段=seg3,“区段组”项目值=2的第6个和第7个的连续的2组波形数据组被转送到波形存储器206上的空闲区段=seg5,“区段组”项目值=3的第8个的1组波形数据组被转送到波形存储器206上的空闲区段=seg7。与转送目的地的区段建立对应地、在例如ram203(图2)中存储与被转送到该区段的波形数据对应的“区段组”项目值。

各区段具有如上所述那样与尺寸最大的波形数据相匹配的例如100000h(“h”表示16进制数)字节=1mb(兆字节)的尺寸。从而,能够使1个波形数据必然被转送到1个区段内的存储区域。合计为例如1mb以下的具有相同的“区段组”项目值的连续的多个波形数据也能够转送到1个区段。由此,依赖于偶然性而不能写入尺寸远远小于空闲容量的波形数据的情况不会发生。

在构成由用户指定的音色的波形数据组被存储在波形存储器206上的情况下,这些波形数据组不需要从大容量闪存存储器204再次写入,因此能够原样用于发音处理。此时,虽然不发生写入,但履历上作为最新的音色被记录。

图6是发生了按键的情况下的发音处理时的波形分割的说明图。本实施方式中,如图6所例示的那样,演奏时的琴键编号和力度(演奏强度)最大以2维方式被分割到64区域中,各个被分割的区域(分割空间)中,分别被分配如上所述那样转送到波形存储器206的、每1个音色有1组以上且最大64组的波形数据。图2中,cpu201在经由键扫描器207检测出键盘101中的按键的发生时,在与当前演奏中的音色相对应的rom202(图2)内的图4b所例示的音色波形信息表的记录中,搜索按键发生时的琴键编号值包含在“最低琴键编号”项目值到“最高琴键编号”项目值的范围中、且按键发生时的力度包含在“最低力度”项目值到“最高力度”项目值的范围中的记录。此外,从与搜索出的该记录的“区段组”项目值相同的区段组的值建立了对应的波形存储器206上的区段内的、与该记录的“从区段开头开始的地址”项目值对应的地址起的、与该记录的“波形尺寸”项目值对应的波形尺寸大小的波形数据,以与按键发生时的琴键编号相对应的速度被读出后以与按键发生时的力度相对应的强度发音。

在构成由用户指定的音色的波形数据组没有被存储在波形存储器206上的情况下,cpu201将这些波形数据组从大容量闪存存储器204转送到波形存储器206,但该波形转送作为后台处理按每1组的波形数据而分割地执行。从而,按键发生时cpu201判别分割空间并向音源lsi205指示将与该空间对应的波形数据从波形存储器206读出时,是相应的波形数据从大容量闪存存储器204向波形存储器206的转送的过程中的情况下,由于波形数据还没有被聚齐到波形存储器206上,因此音源lsi205不进行发音。

rom202(图2)中存储的图4a的例子的闪存音色信息表以及图4b的例子的音色波形信息表,作为构造体的常数数据能够从cpu201(图2)执行的控制程序上存取。图7是表示存储在rom202中的构造体的常数数据的例子的图。

首先,图4a中例示的闪存音色信息表通过图7所示的构造体tone_inf[16]([]内的数字表示索引)、构成该构造体的作为成员常数的排列常数name[16]([]内的数字表示索引)、常数wave_total_size、以及常数num_seg构成。构造体tone_inf[16]例如作为tone_inf[t]通过ram203(图2)上的变量t来存取。变量t例如取0到15的值域,从而指定图4a的闪存音色信息表中的“编号”项目值为0到15的各音色的记录。成员常数name[16]保存与图4a的例子的“音色名”项目值相对应的直到16字符的音色显示名。例如通过ram203上的变量i,以tone_inf[t].name[i]的格式对该成员常数存取。变量i取例如0到15的值域,从而表示与变量t的值相对应的音色的音色显示名(第0~15个字符)。成员常数wave_total_size保存与图4a的“波形尺寸”项目值相对应的音色内的波形数据的合计尺寸。例如以tone_inf[t].wave_total_size的格式对该成员常数存取。这表示与变量t的值相对应的音色的波形数据的合计尺寸。成员常数num_seg保存与图4a的“使用区段数”项目值相对应的音色内的波形数据使用的区段数。例如以tone_inf[t].num_seg的格式对该成员常数存取。这表示与变量t的值相对应的音色的使用区段数。

接着,图4b中例示的音色波形信息表通过图7所示的上位构造体tone_inf[16]([]内的数字表示索引)、构成该构造体的成员构造体即中位构造体wave[64]([]内的数字表示索引)、构成该中位构造体的成员常数即常数vel_lo、vel_hi、key_lo、key_hi、flash_adrs、seg_adrs、size、seg_group、以及下位构造体tg_inf构成。关于上位构造体tone_inf[16]如以上所述的那样。中位构造体wave[64]例如作为wave[w],通过ram203(图2)上的变量w来存取。变量w取例如0到63的值域,从而指定图4b的音色波形信息表中的“波形编号”项目值为0到63的各波形数据的记录。成员常数vel_lo以及vel_hi分别对应于图4b的“最低力度”项目值以及“最高力度”项目值,保存波形数据发音的范围的本来的最低力度以及最高力度的各值。例如以tone_inf[t].wave[w].vel_lo或tone_inf[t].wave[w].vel_hi这样的格式对这些成员常数存取。这表示与变量t的值相对应的音色的、与变量w的值相对应的波形数据的、最低力度或最高力度。成员常数key_lo以及key_hi分别对应于图4b的“最低琴键编号”项目值以及“最高琴键编号”项目值,保存波形数据发音的范围的本来的最低琴键编号以及最高琴键编号的各值。例如以tone_inf[t].wave[w].key_lo或tone_inf[t].wave[w].key_hi这样的形式对这些成员常数存取。这表示与变量t的值对应的音色的、与变量w的值对应的波形数据的、最低琴键编号或最高琴键编号。成员常数flash_adrs在图4b中没有被明示,但保存波形数据的开头在大容量闪存存储器204上的地址。例如以tone_inf[t].wave[w].flash_adrs这样的格式对该成员常数存取。这表示与变量t的值相对应的音色的、与变量w的值相对应的波形数据的、开头在大容量闪存存储器204上的地址。成员常数seg_adrs对应于图4b的“区段开头开始的地址”项目值,保存波形数据应当写入到波形存储器206上的区段的开头起的地址偏移。例如以tone_inf[t].wave[w].seg_adrs这样的格式对该成员常数存取。这表示与变量t的值相对应的音色的、与变量w的值相对应的波形数据的、应当写入到波形存储器206上的区段的开头起的地址偏移。成员常数size对应于图4b的“波形尺寸”项目值,保存波形数据的尺寸。例如以tone_inf[t].wave[w].size这样的格式对该成员常数存取。这表示与变量t的值相对应的音色的、与变量w的值相对应的波形数据的尺寸。tone_inf[t].wave[w].size=0时,表示波形数据不存在。成员常数seg_group对应于图4b的“区段组”项目值,保存当波形数据被向波形存储器206上的1个区段转送时对该区段赋予的区段组的值。例如以tone_inf[t].wave[w].seg_group这样的格式向该成员常数存取。这表示与变量t的值相对应的音色的、与变量w的值相对应的波形数据的区段组值。tone_inf[t].wave[w].seg_group的值相同的波形数据被转送到波形存储器206上的相同的区段。成员构造体tg_inf将音源lsi205(图2)对被转送到波形存储器206上的1个区段的波形数据执行发音处理的情况下的各种参数,作为该构造体的成员常数(图4a及图4b中省略)来存储。这些参数例如是波形数据的读出的开始地址、表示反复位置的循环地址、表示结束位置的结束地址、音量、调谐信息等。

图8是表示在cpu201(图2)执行的控制处理中使用的ram203所存储的主要的变量的一览的图。变量timestamp保存按用户操作音色选择按钮102(图1)而发生的每个音色选择事件各增加1的履历编号。在区段被分配时,保存在后述的构造体成员变量seg_inf[s].timestamp中。变量cur_tone保存为了当前演奏而选择的音色编号。该值为“-1”的情况表示无相符、即没有进行当前演奏。变量transder_wave在当前后台处理中保存波形转送中的波形数据的波形编号。该值为“-1”的情况表示全部完成转送。

接着,通过构造体seg_inf[64]([]内的数字表示索引)和构成该构造体的成员变量tone、seg_group、以及timestamp保存波形存储器206中的每个区段的信息。构造体seg_inf[64]例如作为seg_inf[s],通过ram203(图2)上的变量s来存取。变量s取例如0到63的值域,由此指定波形存储器206上的0到63的64区段的每一个区段。成员变量tone保存该区段被分配的音色编号。该值为“-1”的情况表示该区段为空状态(未使用)。例如以seg_inf[s].tone这样的格式对该成员变量存取。这表示被分配到与变量s的值相对应的区段的音色编号。对执行向该区段的波形转送时的音色编号进行保存的ram203上的变量t值被复制到成员变量tone。成员变量seg_group保存被分配到该区段的音色的区段组值。例如以seg_inf[s].seg_group这样的形式对该成员变量存取。这表示被分配到与变量s的值相对应的区段的音色的区段组的值。与转送到该区段的波形数据相对应的、rom202中存储的图4b的音色波形信息表中的“区段组”项目值即图7的tone_inf[t].wave[w].seg_group的值被复制到成员变量seg_group中。是区段组信息取得处理。成员变量timestamp保存使用该区段的履历编号。例如以seg_inf[s].timestamp这样的格式对该成员变量存取。这表示使用与变量s的值相对应的区段的履历编号。按通过用户操作音色选择按钮102(图1)而发生的每个音色选择事件,复制在该定时每次增加1的变量timestamp的值。以相同的定时被分配的区段具有相同的timestamp值。

接着,与在波形存储器206中的各区段内保存的1组以上的波形数据有关的信息,通过上位构造体seg_inf[64]([]内的数字表示索引)、构成该构造体的成员构造体即中位构造体wave_inf[64]([]内的数字表示索引)、构成该中位构造体的成员变量wave、wave_num、seg_adrs以及size来保存。关于上位构造体seg_inf[64],如上所述那样。中位构造体wave_inf[64]例如作为wave_inf[i],通过ram203(图2)上的变量i来存取。变量i取例如0到63的值域,从而指定1个区段内的0到63的各波形数据。成员变量wave保存该区段中的该波形数据的有无,该值为0时表示没有波形数据,该值为1时表示有波形数据(完成转送)。例如以seg_inf[s].wave_inf[i].wave这样的格式对该成员变量存取。这表示与变量s的值相对应的区段的、与变量i的值相对应的波形数据的有无。成员变量wave的值,在被指示了向该区段转送该波形数据时被设为值0,在通过之后的后台转送完成向该区段的该波形数据的转送时被设为值1。成员变量wave_num保存该区段中的该波形数据的音色中的波形编号,若该值为“-1”,则表示没有波形数据的分配。例如以seg_inf[s].wave_inf[i].wave_num这样的格式对该成员变量存取。这表示与变量s的值相对应的区段的、与变量i的值相对应的波形数据的音色中的波形编号。成员变量seg_adrs保存该区段中的该波形数据的地址偏移。例如以seg_inf[s].wave_inf[i].seg_adrs这样的格式向该成员变量存取。与被转送到该区段的波形数据相对应的、rom202中存储的图4b的音色波形信息表中的“区段开头起的地址”项目值即图7的tone_inf[t].wave[w].seg_adrs的值被复制到成员变量seg_adrs中。成员变量size保存该区段中的该波形数据的尺寸。例如以seg_inf[s].wave_inf[i].size这样的形式对该成员变量存取。与被转送到该区段的波形数据相对应、rom202中存储的图4b的音色波形信息表中的“波形尺寸”项目值即图7的tone_inf[t].wave[w].size的值被复制成员变量size中。

以下,说明为了实现上述的动作而由cpu201执行的控制处理的详细例。

图9是表示cpu201执行的控制处理的整体处理的例子的主程序的流程图。该处理例是cpu201执行存储在rom202中的控制程序的处理例。

cpu201在首先将ram203的内容初始化后(步骤s901),进入到步骤s902到s911的一系列的处理所示的固定循环处理。

固定循环处理中,cpu201首先执行用户界面处理(图中表示为“用户i/f”)(步骤s902)。这里,cpu201经由图2的键扫描器207取得图1的音色选择按钮102的状态。

接着,cpu201根据步骤s902的处理的结果,判断是否因用户操作音色选择按钮102而发生了音色选择事件(指定处理,步骤s903)。

然后,cpu201在发生了音色选择事件的情况下(步骤s903的判断为“是”的情况下)执行音色切换处理(步骤s904)。若步骤s903的判断为“否”,则cpu201跳过步骤s904的处理。

接着,cpu201执行波形转送处理(步骤s905)。这里,cpu201执行图2的从大容量闪存存储器204向波形存储器206的基于后台处理的波形转送。

接着,cpu201执行键盘读入处理(步骤s906)。这里,cpu201经由图2的键扫描器207取得图1的键盘101的按键状态。

接着,cpu201根据步骤s906的处理的结果,判断是否因用户对键盘101上的任意的键进行按键而发生了按键事件(步骤s907)。

然后,cpu201在发生了按键事件的情况下(步骤s907的判断为“是”的情况下)执行按键处理(步骤s908)。若步骤s907的判断为“否”,则cpu201跳过步骤s908的处理。

接着,cpu201根据步骤s906的处理的结果,判断是否因用户对键盘101上的任意的按键中的键进行了离键操作而发生了离键事件(步骤s909)。

然后,cpu201在发生了离键事件的情况下(步骤s909的判断为“是”的情况下)执行离键处理(步骤s910)。若步骤s909的判断为“否”,则cpu201跳过步骤s910的处理。

之后,cpu201执行音源固定服务处理(步骤s911)。这里,执行与按压了例如图1的功能选择按钮103的情况相对应的处理、与操作了图1的弯音/转调轮104的情况相对应的处理等的、对于电子键盘乐器100的一般的处理。

之后,cpu201返回到步骤s90即固定循环处理的开头。

图10是表示图9的步骤s901的初始化处理的详细例的流程图。

首先,cpu201使ram203上的图8所示的变量的值全部为“0”(步骤s1001)。

接着,cpu201在用于保存为了当前演奏而选择的音色编号的ram203上的变量cur_tone(参照图8)中,保存表示无相符的值“-1”(步骤s1002)。

接着,cpu201在用于保存在当前后台处理中正在波形转送中的波形数据的波形编号的ram203上的变量transfer_wave中,保存表示全部转送完成的值“-1”(步骤s1003)。

接着,cpu201对于用于计数区段的ram203上的变量s,在步骤s1004中初始设定为值“0”后,边在步骤s1011中每次增加1,边反复执行步骤s1005到步骤s1009的处理,直到在步骤s1010中判断为达到值“63”为止。

在该反复处理中,cpu201首先在表示被分配到与变量s的值相对应的区段中的音色编号的变量seg_inf[s].tone中,保存表示该区段为空状态(未使用)的值“-1”(步骤s1005)。

接着,cpu201关于用于计数区段内的波形数据的次序的ram203上的变量i,在步骤s1006中初始设定为值“0”后,边在步骤s1009中每次增加1,边反复执行步骤s1007的处理直到在步骤s1008中判断为达到值“63”为止。即,cpu201在该步骤s1007中,在保存与变量s的值相对应的区段内的第i个(变量i表示的值)波形数据的音色中的波形编号的变量seg_inf[s].wave_inf[i].wave_num中,保存表示没有波形数据的分配的值“-1”。

在以上的反复处理之后,若步骤s1010的判断为“是”,则cpu201结束图10的流程图所示的图9的步骤s901的初始化处理。

图11是表示图9的音色选择事件发生时(步骤s903的判断为“是”时)的步骤s904的音色切换处理的详细例的流程图。在该处理的执行时,ram203上的音色编号变量t的值被交付。音色编号变量t中,在图10的步骤s1001的执行时如上述那样保存初始值“0”,在图9的步骤s904的执行时,保存基于用户对图1的音色选择按钮102的操作而在图9的步骤s902的用户界面处理中获取的由用户选择的音色的音色编号。

在图11的音色切换处理的流程图中,cpu201首先判断用于保存为了当前演奏而选择的音色编号的变量cur_tone的值是否与保存在ram203的变量t中的、由用户新指定的音色编号的值相等(步骤s1101)。

若步骤s1101的判断为“是”,则由于已作为选择音色选择完成或当前正在从大容量闪存存储器204向波形存储器206转送相符的音色的波形数据,因此将图11的流程图所示的图9的步骤s904的音色切换处理原样结束。

若步骤s1101的判断为“否”,则cpu201将保存履历编号的变量timestamp的值增加1(步骤s1102)。

接着,cpu201在保存为了当前演奏而选择的音色编号的变量cur_tone中,保存在ram203的变量t中保存的由用户新指定的音色编号的值(步骤s1103)。

接着,cpu201执行ram波形数据调查程序的处理(判别处理,步骤s1104)。cpu201将在ram203上的变量t中保存的新指定的音色编号作为自变量而交付到该程序。cpu201根据该程序的处理的结果,在ram203上的变量r中得到表示与所指定的音色编号相对应的音色的波形数据是否存在于波形存储器206上的返回值(如果值是0为不存在,如果值是1为存在)(步骤s1104)。关于该处理的详细情况,在后面叙述。

cpu201判断变量r的值是否为1(步骤s1105)。

若步骤s1105的判断为“是”,则不需要将与所指定的音色编号相对应的音色的波形数据新转送到波形存储器206,cpu201将图11的流程图所示的图9的步骤s904的音色切换处理原样结束。

若步骤s1105的判断为“否”,则cpu201执行波形区域确保程序的处理(步骤s1106)。cpu201将在ram203上的变量t中保存的新指定的音色编号作为自变量而交付到该程序。cpu201根据该程序的处理的结果,在波形存储器206上确保从大容量闪存存储器204转送与所指定的音色编号相对应的音色的波形数据所需的数量的空闲区段。关于该处理的详细情况,在后面叙述。

之后,cpu201执行波形转送指示程序的处理(步骤s1107)。cpu201将在ram203上的变量t中保存的新指定的音色编号作为自变量而交付到该程序。cpu201在该程序的处理中,执行用于将与所指定的音色编号相对应的音色的波形数据通过图9的步骤s905的波形转送处理从大容量闪存存储器204向波形存储器206转送的准备处理。

图12a是表示图11的步骤s1104的ram波形数据调查程序的详细例的流程图。

首先,cpu201将用于对调查的区段进行计数的ram203上的变量s复位为0(步骤s1201)。

接着,cpu201判断保存有被分配到与变量s的值相对应的区段的音色编号的ram203上的变量seg_inf[s].tone(参照图8)的值、与保存有作为自变量而被交付的新指定的音色编号的值的ram203上的变量t的值是否相等(步骤s1202)。

若步骤s1202的判断为“否”,则cpu201边在步骤s1203中将变量s的值每次增加1,边对由变量s指定的各区段反复执行步骤s1202的判断处理,直到在步骤s1204中判断为变量s的值达到64为止(步骤s1203→s1204的判断为“否”→s1202→s1203的处理的反复)。

在从上述步骤s1202到s1204的处理的反复中,若步骤s1202的判断为“是”,则cpu201首先在表示使用了与变量s的值相对应的区段的履历编号的变量seg_inf[s].timestamp中,保存基于本次的音色选择事件而增加的ram203上的变量timestamp的值(参照图11的步骤s1102),更新该区段的履历编号(步骤s1205)。

接着,由于判断出在与变量s相对应的区段中保存有与所指定的音色编号对应的音色的波形数据,因此cpu201在ram203上的变量r中保存表示在波形存储器206上有与所指定的音色编号相对应的音色的波形数据的返回值1(步骤s1206)。之后,cpu201结束图12a的流程图所示的图11的步骤s1104的ram波形数据调查程序的处理。

在从步骤s1202到s1204的处理的反复中,若变量s对区段的指定到达末尾而步骤s1204的判断成为“是”,则判断出与所指定的音色编号相对应的音色的波形数据没有保存在任何区段,因此cpu201在ram203上的变量r中保存表示在波形存储器206上没有与所指定的音色编号相对应的音色的波形数据的返回值0(步骤s1207)。之后,cpu201结束图12a的流程图所示的图11的步骤s1104的ram波形数据调查程序的处理。

图12b是表示图11的步骤s1106的波形区域确保程序的详细例的流程图。该程序如上述所述那样、在判断出在波形存储器206上的任何区段中都没有与通过图11的步骤s1104的ram波形数据调查程序指所定的音色编号的音色的波形数据的情况下被执行。

cpu201首先将rom202上的常数值tone_inf[t].num_seg(参照图7)保存在ram203上的变量u中,rom202上的常数值tone_inf[t].num_seg中保存与ram203上的变量t的值相对应的音色的使用区段数,ram203中保存有作为自变量被交付的、所指定的音色编号(步骤s1210)。

接着cpu201执行空闲区段数调查程序。通过该程序取得波形存储器206上没有被使用的空闲区段的数量。cpu201根据该程序的处理的结果,在ram203上的变量r中得到空闲区段数的值(步骤s1211)。关于该处理的详细情况在后面叙述。

cpu201判断变量r中得到的空闲区段数是否为步骤s1210中在变量u中保存的与所指定的音色编号相对应的音色的使用区段数以上(步骤s1212)。

若步骤s1212的判断为“否”,则cpu201执行波形区域开放程序(步骤s1213)。在该程序中,将波形存储器206上具有最早的履历编号的音色的区段开放。关于该处理的详细情况在后面叙述。

之后,cpu201返回步骤s1211,再次执行空闲区段数调查程序,判断变量r中得到的空闲区段数是否为步骤s1210中在变量u中保存的使用区段数以上(步骤s1212)。

根据以上的步骤s1211到步骤s1213的反复处理的结果,若变量r中得到的空闲区段数为与所指定的音色编号相对应的音色的使用区段数以上、从而步骤s1212的判断成为“是”,则由于能够确保需要的空闲区段,因此cpu201结束图12b的流程图所示的图11的步骤s1106的波形区域确保程序。

图13是表示图12b的步骤s1211的空闲区段数调查程序的详细例的流程图。如上述所述,在该程序中,取得波形存储器206上的空闲区段的数量。

cpu201首先将用于计数区段的ram203上的变量s复位为0,并且将保存返回值即空闲区段数的ram203上的变量r的值复位为0(步骤s1301)。

接着,cpu201边在步骤s1304中将变量s的值每次增加1,边按通过变量s的值指定的每个区段反复执行步骤s1302和s1303的处理,直到在步骤s1305中判断为变量s的值达到64为止。

在上述的反复处理中,cpu201首先判断保存有被分配到与变量s的值相对应的区段的音色编号的变量seg_inf[s].tone的值是否等于表示该区段为空状态(未使用)的值“-1”(步骤s1302)。

若根据该区段为空状态而步骤s1302的判断成为“是”,则cpu201将保存返回值即空闲区段数的ram203上的变量r的值增加1(步骤s1303)。

若步骤s1302的判断为“否”,则cpu201跳过步骤s1303的处理。

在以上的反复处理后,若步骤s1305的判断成为“是”,则cpu201结束图13的流程图所示的图11的步骤s1211的空闲区段数调查程序的处理。其结果,在ram203上的变量r中得到波形存储器206上的空闲区段的数量。

图14是表示图12b的步骤s1213的波形区域开放程序的详细例的流程图。如上所述,在该程序中,波形存储器206上具有最早的履历编号的音色的区段被开放。

cpu201首先将用于计数区段的ram203上的变量s复位为0,并且在保存比较用的履历编号的ram203上的变量t中设置足够大的值例如ffffffffh(末尾的“h”表示其左侧是16进制数)(步骤s1401)。

接着,cpu201边在步骤s1405中将变量s的值每次增加1,边按通过变量s的值指定的每个区段来反复执行步骤s1402到s1404的一系列的处理,直到在步骤s1406中判断为变量s的值达到64为止。

在上述的反复处理中,cpu201首先判断保存有被分配到与变量s的值相对应的区段中的音色编号的变量seg_inf[s].tone的值是否等于表示该区段为空状态(未使用)的值“-1”(步骤s1402)。

若步骤s1402的判断为“是”,则cpu201向步骤s1405转移,转移到下一个区段的反复处理。

若步骤s1402的判断为“否”,则cpu201判断表示使用了与变量s的值相对应的区段的履历编号的变量seg_inf[s].timestamp的值是否小于保存比较用的履历编号的ram203上的变量t的值(步骤s1403)。

若步骤s1403的判断为“是”,则cpu201在保存比较用的履历编号的ram203上的变量t中保存表示使用了与变量s的值相对应的区段的履历编号的变量seg_inf[s].timestamp的值(步骤s1404)。其结果,在当前时刻根据音色指定而使用了与变量s的值相对应的区段的履历编号作为最早的履历编号被保存在变量t中。

若步骤s1403的判断为“否”,则cpu201跳过步骤s1404的处理,维持当前的变量t的值。

以上的反复处理的结果,若与全部的区段的履历编号的比较完成而步骤s1406的判断成为“是”,则在变量t中得到最小即最早的履历编号。

接着,cpu201在步骤s1407中将用于计数区段的变量s的值复位为0后,边在步骤s1410中将变量s的值每次增加1,边按由变量s的值指定的每个区段,执行将具有变量t中得到的最早的履历编号的区段开放的处理作为步骤s1408和s1409的反复处理,直到在步骤s1411中判断为变量s的值达到64为止。

在上述的反复处理中,cpu201首先判断表示使用了与变量s的值相对应的区段的履历编号的变量seg_inf[s].timestamp的值是否等于变量t中保存的最早的履历编号的值(步骤s1408)。

若步骤s1408的判断为“是”,则cpu201在保存有被分配到与变量s的值相对应的区段中的音色编号的变量seg_inf[s].tone中,保存表示该区段为空状态(未使用)的值“-1”(步骤s1409)。由此,该区段被开放。

若步骤s1408的判断为“否”,则cpu201跳过步骤s1409的处理,与变量s的值相对应的区段不开放。

以上的反复理的结果,若步骤s1411的判断为“是”,则cpu201结束图14的流程图所示的图12b的步骤s1213的波形区域开放程序。其结果,具有最早的履历编号的1个以上的区段被开放。

图15是表示图11的步骤s1107的波形转送指示程序的详细例的流程图。如上所述,在该程序中,执行用于将与所指定的音色编号相对应的音色的波形数据通过图9的步骤s905的波形转送处理从大容量闪存存储器204向波形存储器206转送的准备处理。该准备处理是如下处理,即:对构成与从大容量闪存存储器204转送了波形数据的波形存储器206上的空闲区段相对应的ram203上的seg_inf构造体的各成员变量(参照图8)设置需要的信息,并且将控制转送的ram203上的变量transfer_wave所表示的波形编号设置为初始值0。

cpu201首先将用于计数所转送的波形数据的区段组的ram203上的变量g的值、用于计数所转送的波形数据的在新指定的音色中的波形编号的ram203的变量w的值、和用于计数波形存储器206上的区段的ram203上的变量s的值分别复位为0(步骤s1501)。

接着,cpu201边在步骤s1511中将变量s的值每次增加1,边按通过变量s的值指定的每个区段来反复执行步骤s1502到s1510的一系列的处理,直到在步骤s1512中判断为变量s的值达到64为止。

在上述的反复处理中,cpu201首先判断保存有被分配到与变量s的值相对应的区段中的音色编号的变量seg_inf[s].tone的值是否等于表示该区段为空状态(未使用)的值“-1”(步骤s1502)。

若步骤s1502的判断为“否”,则该区段不是空闲区段,因此cpu201向步骤s1511转移,向下一个区段的反复处理转移。

若步骤s1502的判断为“是”,则cpu201在与对应于变量s的值的空闲区段对应地保存音色编号的ram203上的变量seg_inf[s].tone中,保存作为自变量而交付的ram203上的变量t中所保存的新指定的音色编号的值。并且,cpu201在保存与对应于变量s的值的空闲区段对应地使用了区段的履历编号的变量seg_inf[s].timestamp中,保存基于本次的音色选择事件而被增加的ram203上的变量timestamp的值(参照图11的步骤s1102),并更新该区段的履历编号。进而,cpu201在保存与对应于变量s的值的空闲区段对应的音色的区段组值的变量seg_inf[s].seg_group中,保存变量g所保存的当前进行转送的波形数据的区段组值(以上,为步骤s1503)。

之后,cpu201将对被转送到与变量s的值对应的当前的区段中的波形数据进行计数的ram203上的变量i的值复位为0(步骤s1504)。

接着,cpu201边在步骤s1506中将对被转送到与变量s的值对应的当前的区段中的波形数据进行计数的变量i的值、和用于对所转送的波形数据的新指定的音色中的波形编号进行计数的变量w的值分别每次增加1,边反复执行步骤s1505的处理,直到通过步骤s1507以及s1508判断为区段组已变化为止。即,在步骤s1505中,cpu201首先在与对应于变量s的值的当前区段中的第i个(=变量i的值)波形数据相对应的、表示波形数据是否完成转送的变量seg_inf[s].wave_inf[i].wave中,设置表示还没有转送波形的值0。接着,cpu201在与对应于变量s的值的当前区段中的第i个波形数据相对应的、表示所指定的音色中的波形编号的变量seg_inf[s].wave_inf[i].wave_num中,设置ram203上的变量w表示的当前转送中的波形数据的所指定的音色中的波形编号。接着,cpu201在与对应于变量s的值的当前区段中的第i个波形数据相对应的、保存该区段中的该波形数据的地址偏移的变量seg_inf[s].wave_inf[i].seg_adrs中,设置与被转送到该区段的音色编号t(=变量t的值)的音色中的第w个(=变量w的值)波形数据相对应的、rom202中的常数tone_inf[t].wave[w].seg_adrs(参照图7)的地址偏移值。进而,cpu201在保存与变量s的值相对应的当前区段中的第i个波形数据的尺寸的变量seg_inf[s].wave_inf[i].size中,设置与被转送到该区段的音色编号t(=变量t的值)的音色中的第w个(=变量w的值)波形数据相对应的、rom202中的常数tone_inf[t].wave[w].size(参照图7)的尺寸值(以上,为步骤s1505)。

在上述步骤s1505的设置处理之后,cpu201将对被转送到与变量s的值相对应的当前区段中的波形数据进行计数的变量i的值、和用于对所转送的波形数据的新指定的音色中的波形编号进行计数的变量w的值分别每次增加1(步骤s1506)。

之后,cpu201将与被转送到该区段中的音色编号t(=变量t的值)的音色中的新指定的第w个(=变量w的值)波形数据相对应的、rom202中的常数tone_inf[t].wave[w].seg_group的区段组值设置到ram203上的变量a中。并且,cpu201将与被转送到该区段的音色编号t(=变量t的值)的音色中的前一个的第w-1个(=变量w的值-1)波形数据相对应的、rom202中的常数tone_inf[t].wave[w-1].seg_group的区段组值设置到ram203上的变量b中(以上,为步骤s1507,区段组信息取得处理)。

然后,cpu201判断变量a所示的新指定的音色中的第w个波形数据的区段组的值是否等于变量b所示的前一个的第w-1个波形数据的区段组的值(步骤s1508)。

若步骤s1508的判断为“是”,则能够进一步将波形数据转送到相同的区段中,因此返回到步骤s1505的处理继续进行与新的波形数据相对应的设置处理。

若步骤s1508的判断为“否”,则cpu201将保存在变量g中的区段组的值增加1(步骤s1509)。

之后,cpu201判断变量g的值是否达到与音色编号t(=变量t的值)相对应的常数tone_inf[t].num_seg的使用区段数的值(步骤s1510)。

若步骤s1510的判断为“否”,则cpu201向步骤s1511的处理转移,继续进行对下一个空闲区段的转送处理。

若步骤s1510的判断为“是”,则与所指定的音色编号t(=变量t的值)相对应的全部使用区段数的波形数据的转送处理结束,因此cpu201在表示当前转送中的波形编号的ram203上的变量transfer_wave中设置为初始值0(步骤s1513)。之后,cpu201结束图15的流程图所示的图11的步骤s1107的波形转送指示程序的处理。

图16是表示图9的步骤s905的波形转送处理的详细例的流程图。如上所述,这里cpu201执行从图2的大容量闪存存储器204向波形存储器206的基于后台处理的波形转送。作为结果,共用在一级存储装置即大容量闪存存储器204中存储的区段组的组波形数据作为1个组,被转送到二级存储装置即波形存储器206的区段。这里,所谓组波形数据是,(1)共用区段组信息的2个以上的波形数据、以及(2)不共用区段组信息的1个波形数据中的至少一方。然后,将上述组波形数据作为1个组,向二级存储装置中的多个区段中的某一区段写入,该多个区段分别是尺寸被预先确定的存储区域。

cpu201首先判断ram203上的变量transfer_wave的值是否是表示全部转送完成的值“-1”(步骤s1601)。

若步骤s1601的判断为“是”,则不需要执行波形转送处理,因此cpu201将图16的流程图所示的图9的步骤s905的波形转送处理原样结束。

若步骤s1601的判断为“否”,则cpu201将变量transfer_wave表示的在所指定的音色中接下来应当转送的波形编号的值保存到表示ram203上的当前正在转送的音色中的波形编号的变量w内(步骤s1602)。

接着,cpu201将对区段进行计数的ram203上的变量s的值在步骤s1603中复位为0后,边在步骤s1605中每次增加1,边执行基于步骤s1604的判断的搜索处理。在步骤s1604中,cpu201判断表示被分配了与变量s相对应的区段的音色编号的变量seg_inf[s].tone的值是否等于ram203上的变量cur_tone中所保存的为了当前演奏而选择的音色编号(参照图11的步骤s1103),并且被分配了变量seg_inf[s].seg_group中设置的与变量s相对应的区段的区段组的值是否等于rom202上的常数tone_inf[cur_tone].wave[w].seg_group中保存的变量cur_tone对应的音色的变量w表示的当前正在转送的音色中的波形编号所对应的波形数据的区段组的值。

通过预先执行上述的波形转送指示程序内的步骤s1503的处理,从而在步骤s1604和步骤s1605的反复处理中步骤s1604的判断必然成为“是”。若步骤s1604的判断成为“是”,则cpu201在将对变量s的值表示的区段内的波形数据的次序进行计数的ram203上的变量i的值在步骤s1606中复位为0后,边在步骤s1608中每次增加1,边执行基于步骤s1607的判断的搜索处理。步骤s1607中,cpu201判断变量seg_inf[s].wave_inf[i].wave_num中所保存的、变量s的值表示的区段内的第i个(=变量i的值)波形数据在所指定的音色中的波形编号,是否等于变量w表示的当前正在转送的波形数据在所指定的音色中的波形编号。

通过预先执行上述的波形转送指示程序内的步骤s1505的处理,在步骤s1607和步骤s1608的反复处理中步骤s1607的判断必然成为“是”。若步骤s1607的判断成为“是”,则cpu201执行将大容量闪存存储器204中的变量cur_tone的值表示的音色中的变量w的值所表示的波形编号的波形数据作为波形存储器206中的变量s的值所表示的区段内的第i个(=变量i表示的值)波形数据而转送的波形转送程序(步骤s1609)。此时,cpu201将ram203上的变量fa、sa、l以及s分别设置为自变量。cpu201在变量fa中设置通过变量cur_tone和变量w参照的rom202上的常数tone_inf[cur_tone].wave[w].seg_adrs的值,作为被转送的波形数据的转送源的大容量闪存存储器204上的地址。并且,cpu201在变量sa中设置通过变量s和变量i参照的ram203上的变量seg_inf[s].wave_inf[i].seg_adrs的值,作为波形数据被转送的转送目的地的波形存储器206中的地址偏移。进而,cpu201在变量l中设置通过变量s和变量i参照的ram203上的变量seg_inf[s].wave_inf[i].size的值,作为被转送的波形数据的尺寸。然后,cpu201在变量s中设置变量s的值。关于波形转送程序的详细情况在后面叙述。

在步骤s1609的波形转送程序的处理之后,cpu201在与对应于变量s的值的当前区段中的第i个(=变量i的值)波形数据相对应的、表示是否完成波形数据转送的变量seg_inf[s].wave_inf[i].wave中设置表示波形已被转送的值1(步骤s1610)。

进而,cpu201将表示音色中接下来应当转送的波形编号的值的变量transfer_wave的值增加1(步骤s1611)。

之后,cpu201判断与变量cur_tone表示的音色中的变量w表示的波形编号的波形数据相对应的常数tone_inf[cur_tone].wave[w].seg_group的区段组的值是否达到了与变量cur_tone表示的音色相对应的常数tone_inf[cur_tone].num_seg中所保存的使用区段数(步骤s1612)。

若步骤s1612的判断为“否”,则cpu201将变量transfer_wave的值维持为在步骤s1611中增加后的值,并结束图16的流程图所示的图9的步骤s905的波形转送处理。其结果,接下来在执行步骤s905的波形转送处理的定时,执行对变量transfer_wave的新的值的波形编号的波形数据的转送。

另一方面,若步骤s1612的判断为“是”,则新指定的音色的波形数据的转送全部结束,因此cpu201在变量transfer_wave中保存表示全部转送结束的值“-1”。之后,cpu201结束图16的流程图所示的图9的步骤s905的波形转送处理。

图17是表示图16的步骤s1609的波形转送程序的详细例的流程图。

首先,cpu201在对大容量闪存存储器204的读出地址进行指定的ram203上的变量rp(读指针)中设置在图16的步骤s1609的开始时作为ram203上的变量fa而被交付的转送的波形数据的转送源的大容量闪存存储器204上的地址(步骤s1701)。

接着,cpu201在对向波形存储器206的写入地址进行指定的ram203上的变量wp(写指针)中,设置基于图16的步骤s1609的开始时作为ram203上的变量s以及sa而被分别交付的区段编号以及区段内地址、通过下式计算的内容(步骤s1702)。

wp=100000h×s+sa

在该式中,1区段的尺寸如上所述是例如100000h字节,因此变量s表示的区段编号的区段的开头的字节地址在波形存储器206上为100000h×s。进而,本次的波形数据被转送的地址为,相对于该地址偏移了作为变量sa而交付的区段内地址后的地址。

之后,cpu201将指定所转送的字节数据数的ram203上的变量c的值在步骤s1703中复位为0后,边在步骤s1706中每次增加1个采样,边反复执行步骤s1704和s1705的处理,直到在步骤s1707中判断为达到作为ram203上的变量l而交付的数据尺寸为止。

首先,cpu201根据大容量闪存存储器204上的将变量rp的值和变量c的值相加得到的地址,读出波形数据的采样(字节值)并设置到ram203上的变量a中(步骤s1704)。

然后,cpu201在波形存储器206上的将变量wp的值和变量c的值相加得到的地址中,写入变量a所保存的数据(步骤s1705)。

以上的反复处理的结果,若步骤s1707的判断为“是”,则cpu201结束图17的流程图所示的图16的步骤s1609的波形转送程序的处理。

图18是表示图9的步骤s908的按键处理的详细例的流程图。

首先,cpu201判断在ram203上的变量cur_tone中是否保存有表示没有选择音色的无效值“-1”(步骤1801)。

若步骤s1801的判断为“是”,则cpu201结束图18的流程图所示的图9的步骤s908的按键处理,不执行发音处理。

若步骤s1801的判断为“否”,则cpu201判断ram203上的变量transfer_wave的值是否为表示完成了波形转送的值“-1”(步骤s1802)。

若步骤s1802的判断为“否”,则cpu201结束图18的流程图所示的图9的步骤s908的按键处理,不执行发音处理。即,cpu201在波形转送结束而变量transfer_wave的值成为“-1”之前,不执行发音处理。

若步骤s1802的判断为“是”,则cpu201执行分割波形检索程序(步骤s1803)。该情况下,cpu201将图9的步骤s902中取得的琴键编号和力度分别作为自变量并保存到ram203上的变量k以及v中。通过该程序的处理,判别例如图6的分割空间内的一个,在ram203上的变量tw中得到当前的音色内的波形编号作为返回值。另外,作为变量tw的返回值而设置“-1”的情况是无相符的分割空间的情况。

接着,cpu201判断变量tw的返回值是否为“-1”(步骤s1804)。

若步骤s1804的判断为“是”,则cpu201结束图18的流程图所示的图9的步骤s908的按键处理,不执行发音处理。

若步骤s1804的判断为“否”,则cpu201执行区段内波形检索程序(步骤s1805)。此时,cpu201交付保存在变量tw中的音色内的波形编号作为自变量。通过该程序的处理,在ram203上的变量s得到区段编号,作为返回值。该变量s的返回值为64的情况是不存在相符的波形数据的情况。并且,在ram203上的变量sw中得到区段内的波形编号,作为返回值。

在步骤s1805的区段内波形检索程序的处理之后,cpu201判断变量s的返回值是否为64(步骤s1806)。

若步骤s1806的判断为“是”,则cpu201结束图18的流程图所示的图9的步骤s908的按键处理,不执行发音处理。

若步骤s1806的判断为“否”,则cpu201在ram203上的变量a中设置由下式计算的地址,作为向音源lsi205通知的波形数据的地址(步骤s1807)。

a=s×10000h

+seg_inf[s].wave_inf[sw].seg_adrs

与图17的步骤s1702的情况同样,变量s所示的区段编号的区段的开头的字节地址在波形存储器206上为100000h×s。对该值加上了常数seg_inf[s].wave_inf[sw].seg_adrs中保存的变量s表示的区段的变量sw所示的波形编号的波形数据的区段内偏移地址的值后得到的值,为音源lsi205应当读出的波形存储器206中的开头地址。

之后,cpu201对音源lsi205执行发音程序(步骤s1808)。此时,cpu201将变量k所保存的琴键编号、变量v所保存的力度、和变量a所保存的地址值作为自变量向音源lsi205交付。并且,cpu201将由常数tone_inf[cur_tone].wave[sw].tg_inf表示的参数组(参照图7)作为自变量向音源lsi205交付,来作为其他波形信息。音源lsi205的处理由于是既存的处理,所以对其详细情况进行省略,但基于上述自变量,从波形存储器206读出波形数据而执行发音处理。

图19是表示图18的步骤s1803的分割波形检索程序的详细例的流程图。

cpu201将表示音色内的波形编号的ram203上的变量w的值在步骤s1901中复位为0后,边在步骤s1906中每次增加1,边反复执行步骤s1902到s1905的一系列的判断处理,直到在步骤s1907中判断为达到64为止。

在上述的反复处理中,cpu201首先判断作为变量v而交付的力度是否为通过变量cur_tone和变量w参照的rom202上的常数tone_inf[cur_tone].wave[w].vel_lo的最低力度值以上(步骤s1902)。

若步骤s1902的判断为“否”,则向步骤s1906的处理转移而转移到接下来的波形编号的处理。

若步骤s1902的判断为“是”,则接着由cpu201判断作为变量v而交付的力度是否为通过变量cur_tone和变量w参照的rom202上的常数tone_inf[cur_tone].wave[w].vel_hi的最高力度值以下(步骤s1903)。

若步骤s1903的判断为“否”,则向步骤s1906的处理转移而转移到接下来的波形编号的处理。

若步骤s1903的判断为“是”,则接着由cpu201判断作为变量k而交付的琴键编号是否为通过变量cur_tone和变量w参照的rom202上的常数tone_inf[cur_tone].wave[w].key_lo的最低琴键编号以上(步骤s1904)。

若步骤s1904的判断为“否”,则向步骤s1906的处理转移而转移到接下来的波形编号的处理。

若步骤s1904的判断为“是”,则接着由cpu201判断作为变量k而交付的琴键编号是否为通过变量cur_tone和变量w参照的rom202上的常数tone_inf[cur_tone].wave[w].key_hi的最高琴键编号以下(步骤s1905)。

若步骤s1905的判断为“否”,则向步骤s1906的处理转移而转移到接下来的波形编号的处理。

若步骤s1905的判断为“是”,则cpu201将变量w的值作为音色内波形编号的返回值而设置到变量tw。之后,cpu201结束图19的流程图所示的图18的步骤s1803的分割波形检索程序。

若步骤s1905的判断为“否”,则向步骤s1906的处理转移而转移到接下来的波形编号的处理。

步骤s1902到s1907的反复处理的结果,若步骤s1907的判断为“是”,则cpu201在变量tw中设置表示无相符的值“-1”。之后,cpu201结束图19的流程图所示的图18的步骤s1803的分割波形检索程序。

图20是表示图18的步骤s1805的区段内波形检索程序的详细例的流程图。

cpu201在将计数区段的ram203上的变量s的值在步骤s2001中复位为0后,边在步骤s2009中每次增加1,边反复执行步骤s2002到s2008的一系列的处理,直到在步骤s2010中判断为达到64为止。

上述的反复处理中,cpu201首先判断作为ram203上的变量seg_inf[s].tone(参照图8)的值而设定在与变量s的值相对应的区段中的音色编号是否等于作为ram203上的变量cur_tone(参照图8)的值而当前正在选择的音色编号(步骤s2002)。

若步骤s2002的判断为“否”,则cpu201向步骤s2009的处理转移而转移到对下一个区段的处理。

若步骤s2002的判断为“是”,则cpu201在将对区段内的波形编号进行保存的ram203上的变量sw的值在步骤s2003中复位为0后,边在步骤s2007中每次增加1,边反复执行步骤s2004到s2007的一系列的处理,直到在步骤s2008中判断为达到64为止。

在上述的反复处理中,cpu201首先将基于变量s以及变量sw而作为变量seg_inf[s].wave_inf[sw].wave_num的值被参照的与变量s的值相对应的区段内的第sw个(=变量sw的值)波形数据的音色内的波形编号保存在ram203上的变量w中(步骤s2004)。

接着,cpu201判断变量w的值是否等于作为自变量而交付的ram203上的变量tw所表示的音色内的波形编号(步骤s2005)。

若步骤s2005的判断为“否”,则判断变量tw的值是否为“-1”(步骤s2006)。

若步骤s2006的判断为“否”,则cpu201向步骤s2007转移而转移到对下一个区段内波形编号的波形数据的处理。

若步骤s2006的判断为“是”,则cpu201向步骤s2009转移而转移到对下一个区段的处理。

在上述的反复处理中,若步骤s2005的判断为“是”,则cpu201将此时的变量s的值和变量sw的值分别作为区段的返回值以及区段内波形编号的返回值而设置,并结束图20的流程图所示的图18的步骤s1805的区段内波形检索程序的处理。

在上述的反复处理中,若步骤s2010的判断为“是”,则cpu201将变量s的返回值设置为表示无相符的值,结束图20的流程图所示的图18的步骤s1805的区段内波形检索程序的处理。

通过以上说明过的实施方式,在波形存储器上不存在波形的音色被选择而将新的音色波形数据向波形存储器写入时,若将区段相同的使用数的音色开放,则能够可靠地写入新的波形。例如,在选择了使用3区段的音色波形时,只要对使用3区段以上的音色进行覆写即可。

由此能够避免虽然具有比希望写入的波形的容量大得多的空闲空间但却不能写入那样的非效率的状态,因此从需要进行如对演奏造成障碍那样的花费时间的垃圾回收等存储器整理中解放出来。

并且,若写入到波形存储器上的音色的组合是相同的,则用于写入所选择的音色的波形的条件、例如若覆写以该状态写入的某音色则能够写入等,能够与过去写入波形的顺序无关地预测,因此能够实现容易管理的电子乐器。

此外,本发明不限定于上述的实施方式,在实施阶段在不脱离其主旨的范围内能够进行各种变形。并且,由上述的实施方式执行的功能只要可能也可以适当组合来实施。在上述的实施方式中包含有各种阶段,通过公开的基于多个构成要件的适宜的组合能够提取各种发明。例如,即使从实施方式所示的全部构成要件中删除一些构成要件,若能够得到效果,则该删除了构成要件的构成也能够作为发明而提取。

额外的优势和变更对于本领域技术人员是容易发生的。因此,本发明在其更广泛的方面不仅限于具体细节和具体实施例所示的和所描述的。因此,这些实施方式及其变形都包含在发明的范围和主旨中,并且包含在权利要求的范围所记载的发明及与其等同的范围中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1