和弦判定装置、和弦判定方法以及非暂时性的记录介质与流程

文档序号:14070686阅读:316来源:国知局

本发明涉及判定乐曲的和弦的和弦判定装置及和弦判定方法。



背景技术:

有想要从乐曲(乐曲数据)中提取和弦的要求。例如,标准midi(musicalinstrumentdigitalinterface)文件通常有旋律部分(melodypart)和伴奏部分(accompanimentpart)。在想要用例如电子键盘乐器弹奏这样的乐曲的情况下,旋律用右手比较容易弹奏,但有还想要用左手演奏伴奏那样的情况。但是,在标准midi文件中,如果有左手用的适当的乐曲部分的数据则比较好,但大部分情况下不包含这样的数据。但是,由于难得有电子键盘乐器,所以有还是希望用两手弹奏那样的情况。在这样的情况下,如果能够从乐曲的标准midi文件判定和弦并提示,则演奏者能够进行与该和弦对应的左手演奏等从而是方便的。

以往,已知判定乐曲的和弦的一些技术(例如在专利文献1~4中记载的技术)。

专利文献1:日本特开2000~259154号公报

专利文献2:日本特开2007~286637号公报

专利文献3:日本特开2015~40964号公报

专利文献4:日本特开2015~79196号公报

但是,上述的现有技术均没有充分考虑和弦的和弦音符的构成音以外的音,所以存在判定的精度有时下降的问题。

此外,存在有时没有对于判定和弦的和弦音符而言足够的发音而无法进行适当的判定的问题。

进而,由于没有考虑调性、特别是转调,所以存在有时无法进行适当的和弦判定的问题。



技术实现要素:

因此,本发明的目的在于,使得能够根据连转调也能适当地判定的调判定的结果进行更适当的和弦判定。

本发明的一个技术方案,是一种和弦判定方法,其特征在于,其特征在于,处理器使用存储在存储器中的有关乐曲的数据执行以下处理:基于将上述乐曲以第1长度划分出的第1区间的构成音来推测第1调,基于将上述乐曲以与上述第1长度不同的长度的第2长度划分出的、与上述第1区间至少部分地重叠的第2区间的构成音来推测第2调,将推测出的上述第1调及上述第2调进行比较,由此判定上述乐曲的上述第1区间的调或和弦。

此外,本发明的另一技术方案,是一种和弦判定装置,判定乐曲的和弦,其特征在于,具备存储器和处理器,上述处理器,使用存储在上述存储器中的数据,基于将上述乐曲划分为多个而得到的各区间的构成音来推测各区间的调,在推测出的上述各区间中有调的变化的情况下,基于上述调的变化,判定上述乐曲数据的上述多个区间的和弦。

此外,本发明的另一技术方案,是一种非暂时性的记录介质,其特征在于,记录有用来使计算机执行以下处理的程序:使用存储在存储器中的有关乐曲的数据,基于将上述乐曲划分为多个而得到的各区间的构成音来推测各区间的调,在推测出的上述各区间中有调的变化的情况下,基于上述调的变化,判定上述乐曲数据的上述多个区间的和弦。

附图说明

图1是表示和弦解析装置的一实施方式的硬件结构例的图。

图2a和图2b是表示midi音序数据的结构例和通过调判定而得到的调数据的图。

图3是表示通过和弦判定而得到的和弦行进数据的结构例的图。

图4是表示和弦解析装置的整体处理的例子的主流程图。

图5是表示和弦判定处理的详细例的流程图。

图6是表示调判定处理的详细例的流程图。

图7a和图7b是小节和节拍及调判定的说明图。

图8是表示调判定的动作结果例的图。

图9是表示调判定处理中的音调判定处理的详细例的流程图。

图10是音阶音符的说明图。

图11是表示音级功率(pitchclasspower)制作处理的例子的流程图。

图12是音级功率制作处理的说明图。

图13是表示调判定处理中的结果保存处理的详细例的流程图。

图14是表示和弦判定处理中的匹配(matching)与结果保存处理的详细例的流程图。

图15是和弦音(chordtone)的说明图。

图16a和图16b是最小开销(minimumcost)计算处理和路径确定处理的说明图。

图17是表示最小开销计算处理的详细例的流程图。

图18是表示开销计算处理的详细例的流程图。

图19是表示路径确定处理的详细例的流程图。

具体实施方式

以下,参照附图对用来实施本发明的形态详细地说明。图1是表示能够将和弦解析装置100的一实施方式作为软件处理来实现的计算机的硬件结构的一例的图。

图1所示的计算机具有cpu101、rom(readonlymemory:只读存储器)102、ram(randomaccessmemory:随机访问存储器)103、输入机构104、显示机构105、声音系统106及通信接口107,它们被总线108相互连接。图1所示的结构是能够实现和弦解析装置的计算机的一例,这样的计算机并不限定于该结构。

cpu101进行上述计算机整体的控制。rom102存储后述的图4、图5、图8~图10、图13、图14的流程图所示的和弦解析处理程序、多个乐曲的标准midi文件等。ram103在和弦解析处理程序的执行时被作为作业用存储器使用。cpu101从rom102将和弦解析处理程序读出到ram103中并执行。和弦解析处理程序例如也可以记录到没有特别图示的可移动记录介质中而分发,或者也可以使得能够由通信接口107从因特网或局域网等网络取得。

输入机构104检测用户借助键盘或鼠标等进行的输入操作,将检测结果向cpu101通知。输入操作例如是乐曲的选择操作、和弦解析的指示操作、乐曲的再现操作等。此外,也可以使得通过用户的输入机构104的操作将乐曲的标准midi文件从网络经由通信接口107下载到ram103中。

显示机构105将通过cpu101的控制而输出的和弦判定数据显示在液晶显示器装置等上。

声音系统106,当用户通过输入机构104指示了从rom102或网络取得的乐曲(乐曲数据)的标准midi文件的再现时,通过将上述标准midi文件的音序(sequence)依次读入并解释,以用户指定的乐器音生成乐音信号,从扬声器等发音。

图2a是表示从rom102读入到ram103中、或者从网络经由通信接口107下载到ram103中的标准midi文件中保存的midi音序数据的结构例的图。乐曲由多个部分(part)(=音轨(track))构成,指向各部分的开头的音符事件(noteevent)的指针信息(pointerinformation)作为midiev[0]、midiev[1]、midiev[2]、…而被保持。cpu101通过参照指针信息midiev[i](i=0,1,2,…),能够访问i部分的存储在ram103中的最初的音符事件。

该音符事件保持以下的构造体数据。itime保持发音开始时刻。igate保持选通时间(gatetime)(发音时长)。作为这些时刻的单位,例如使用时基(tick)。在此情况下,4分音符具有例如480时基的时长,在4分之4节拍的乐曲的情况下,1拍=480时基。bydata[0]保持状态(status)。bydata[1]保持发音的音符的音高。bydata[2]保持发音的音符的速率。bydata[3]保持其他为了控制音符的发音而需要的信息。next是指向下个音符事件的指针,prev是指向前1个音符事件的指针。cpu101通过参照next、prev,能够访问存储在ram103中的下个或前1个音符事件。

此外,cpu101控制声音系统106而再现乐曲所需要的、节奏及节拍等的元信息(meta-information)能够从指针信息metaev[0]、metaev[1]、metaev[2]、…进行参照。

图2b是表示通过后述的调判定处理而得到的调数据的结构例的图。调信息被从指针信息tonality[0]、tonality[1]、tonality[2]、…访问。tonality[i](i=0,1,2,…)是指向与小节号码i对应的调信息的指针。被从这些指针参照的调信息保持以下的构造体数据。itick保持与乐曲的旋律对应的调的开始的时刻。itick的时间单位是上述的时基。imeasno保持调开始的小节的号码。ikey保持调(tonality)的音调(key)。iscale保持调的类型,但在本实施方式中不使用。dopowervalue保持调判定时的功率(power)评价值。ilength保持调判定时的区间长,如后述那样,是表示以小节为单位的区间长的1、2或4。

图3是表示通过后述的和弦判定处理而得到的和弦行进数据的结构例的图。和弦行进数据能够按照构成乐曲的各小节的每个节拍而拥有例如第1候选、第2候选、第3候选、…的多个候选。当前,如果设从乐曲的开头起的节拍号码的连续号为第1要素号码icnt(icnt=0,1,2,…)、设各节拍中的候选号码为第2要素号码i(i=0,1,2,…),则各和弦行进数据能够通过指针信息chordprog[icnt][i]进行访问。根据该指针信息而被访问的和弦信息保持以下的构造体数据。itick保持与旋律对应的和弦的开始的时刻。itick的时间单位是上述的时基。imeasno保持调的小节的号码。itickinmeas保持小节内的和弦的开始的时刻。itickinmeas的时间单位也是上述的时基。在本实施方式中,由于按每个节拍判定和弦,所以itickinmeas的时间单位也为节拍(beat)单位,成为第1拍、第2拍、第3拍或第4拍中的某个。如在图2a的说明中叙述过的那样,1拍通常是480时基,所以itickinmeas为0、480、960、1440中的某个值。iroot保持和弦判定结果(root)。itype保持和弦判定结果(type)。dopowervaluen保持和弦判定时的功率评价值(powerevaluationvalue)。

图4是表示图1的cpu101执行的和弦解析装置的整体处理的例子的主流程图。例如,在图1的和弦解析装置100是智能手机等的通用的计算机的情况下,通过由用户点击和弦解析装置100的应用,cpu101开始在图4的流程图中例示的和弦解析处理程序。cpu101首先执行存储在寄存器及ram103中的变量的初始化等初始化处理(步骤s401)。然后,cpu101将从步骤s402到s408的一系列的处理反复执行。

cpu101首先判定是否通过由用户点击应用上的特定按钮而指示了应用的结束(步骤s402)。如果步骤s402的判定为是,则cpu101结束在图4的流程图中例示的和弦解析处理。

如果步骤s402的判定为否,则cpu101判定用户是否经由输入机构104指示了乐曲的选曲(步骤s403)。

如果步骤s403的判定为是,则cpu101从rom102或经由通信接口107从网络将具有图2a的数据格式的乐曲的标准midi文件的midi音序数据向ram103读入(步骤s404)。

然后,cpu101通过执行后述的和弦判定处理,对指示读入的乐曲的midi音序数据的整体执行判定和弦的处理(步骤s405)。然后,cpu101向步骤s401的处理返回。

如果步骤s403的判定为否,则cpu101判定用户是否经由输入机构104指示了乐曲的再现(步骤s406)。

如果步骤s406的判定为是,则cpu101一边解释被读入到ram103中的midi音序数据、一边向声音系统106输出发音指示,由此进行乐曲的再现(步骤s407)。然后,cpu101向步骤s401的处理返回。

如果步骤s406的判定为否,则cpu101向步骤s401的处理返回。

图5是表示图4的步骤s405的和弦判定处理的详细例的流程图。

首先,cpu101通过执行调判定处理,按乐曲的每个小节判定调(步骤s501)。结果,在ram103中,能得到具有图2b中例示的数据结构的调数据。

接着,cpu101按全部的小节的每个,反复执行以下的从步骤s503到s505的一系列处理(步骤s502)。

在该按全部的小节的每个的反复处理中,cpu101还按小节内的全部节拍的每个,反复执行以下的步骤s504和s505的处理。在该每拍的反复处理中,cpu101首先执行音级功率制作处理(步骤s504)。这里,cpu101将节拍的构成音作为音级功率(pitch-classpower)来判定。关于该处理的详细情况,在图10及图11的说明中后述。

接着,cpu101执行匹配与结果保存处理(步骤s505)。这里,cpu101基于在步骤s504中计算出的当前的节拍中的每个音级的功率信息累计值,判定该节拍的构成音,基于该构成音判定该节拍的和弦。关于该处理的详细情况在图14的说明中后述。然后,cpu101向步骤s503的处理返回。

对于小节内的全部节拍,当步骤s504和s505的处理的执行结束、生成了与该小节内的全部节拍对应的和弦行进数据,则cpu101向步骤s502的处理返回。

对于乐曲的全部小节,当从步骤s502到s505的一系列处理的执行结束、生成了与乐曲的全部小节内的全部节拍对应的和弦行进数据,则cpu101向步骤s506的处理转移。

在步骤s506中,cpu101对于乐曲的全部小节及小节内的全部节拍,从由图3例示的数据格式得到的多个候选所构成的和弦行进数据的全部组合之中,计算乐曲整体上开销(cost)最小的和弦的组合。关于该处理的详细情况,在图16a、图16b至图18的说明中后述。

结果,cpu101确定乐曲整体的和弦行进(chordprogression)的路径,由此最优和弦得以确定(步骤s507)。关于该处理的详细情况,在图16a、图16b及图19的说明中后述。虽然没有特别图示,该最优的和弦行进基于由用户进行的来自输入机构104的指示而被显示在显示机构105上。根据用户的指示,与基于图4的步骤s407的再现处理的、来自声音系统106的乐曲再现同步,显示机构105上显示的最优的和弦行进不断进展。然后,cpu101结束图5的流程图所示的图4的步骤s405的和弦判定处理。

接着,以下对图5的步骤s501的调判定处理的详细情况进行说明。图6是表示图5的步骤s501的调判定处理的详细例的流程图。此外,图7a是小节和节拍的说明图,图7b是调判定的说明图。

在被读入的乐曲是4节拍的乐曲的情况下,随着图7a的(a~2)所示那样的乐曲(song)的行进,如图7a的(a~3)所示,小节号码imeasno如0、1、2、…那样进展。并且,如图7a的(a~1)所示,在各小节内,节拍号码ibeatn如0、1、2、3那样反复。

在图6的流程图所例示的调判定处理中,对应于图7b的(b~1)的乐曲(song)及(b~2)的小节号码(imeasno)的行进,如图7b的(b~3)(b~4)(b~5)所示那样,cpu101一边从1小节长、2小节长、4小节长这样的具有1小节的倍数的单位的多个区间长中选择区间长,一边执行以下的处理。在以下的说明中,将1小节的区间长记载为iframetype=0,将2小节的区间长记载为iframetype=1,将4小节的区间长记载为iframetype=2。另外,区间长的选择并不限于1、2、4小节,例如也可以是2、4、8小节。cpu101一边按照以iframetype=0、1、2的各区间长而将乐曲划分的每个区间(图7b的(b~3)(b~4)(b~5)的各直线箭头表示的区间)(步骤s601)将区间的开始小节每次错开1小节(步骤s602),一边执行以下的处理。

cpu101执行按照由iframetype规定的各区间的每个来判定该区间的构成音、基于该构成音判定调的音调判定处理(步骤s603)(作为调判定机构进行动作)。关于该处理的详细情况,在图9至图12的说明中后述。

图8是表示调判定的动作结果例的图。在该结果例中,图8的(a)表示小节号码(imeasno)。此外,在图8的(b)中,与图8的(a)的各小节号码对应而记载的音名群表示按与各小节号码对应的每个小节、通过来自midi音序数据的音符事件而实际进行发音的乐音的各构成音的音名。

在图8的结果例中,例如,对于iframetype=0(1小节区间长),如图8的(c)所示,以图8的(a)的各小节号码(imeasno)的各1小节为单位,一边将判定区间每次错开1小节,一边如g、那样判定调。此时,例如,“3”这样的记载表示在的调判定时得到了功率评价值=3这样的评价值。关于该评价值在后面叙述,该值越大,表示调判定的可靠性越高。

接着,例如,对于iframetype=1(2小节区间长),按图8的(d)的上下上下…的顺序,以图8的(a)的各小节号码(imeasno)的连续的各2小节为单位,一边将判定区间每次错开1小节,一边如c、c、那样判定调。

进而,例如,对于iframetype=2(4小节区间长),从图8的(e)的左上朝向右下,以图8的(a)的各小节号码(imeasno)的连续的各4小节为单位,一边将判定区间每次错开1小节,一边如c、c、那样判定调。

在图6的步骤s603的音调判定处理的动作之后,通过以在步骤s601中如iframetype=0(1小节)、1(2小节)、2(4小节)那样依次指定的区间长反复进行的步骤s603的音调判定处理,cpu101按在到目前为止计算的区间长之间重叠的每个区间,执行对于该区间比较以各区间长判定的调彼此从而决定当前时点的最优的调的结果保存处理(步骤s604)(作为调决定机构进行动作)。关于该处理的详细情况在图13的说明中后述。

在图8的例子中,例如在图8的(a)的小节号码(imeasno)=0中,在到iframetype=1为止的音调判定处理(步骤s603)结束的时点,图8的(c)的iframetype=0的调判定为音调音名(日文:キー音名)功率评价值3,图8的(d)的iframetype=1的调判定为音调音名功率评价值4。因而,在后续于该音调判定处理的结果保存处理(步骤s604)中,作为功率评价值较大的调,该时点的最优的调被决定为音调音名功率评价值4。进而,在到iframetype=2为止的音调判定处理结束的时点,该时点的最优的调如上述那样为音调音名功率评价值4,图8的(e)的iframetype=2的调判定为音调音名c、功率评价值7。因而,在后续于该音调判定处理的结果保存处理中,最终时点的最优的调被决定为音调音名=c。结果,cpu101在ram103中生成图2b的数据格式的调信息。在该调信息中,在itick中保存imeasno=0的小节的开头的开始时刻。此外,在imeasno中作为小节号码而保存0。在ikey中保存与被决定为最优的调的音调音名c对应的音调值=0。在dopowervalue中保存最优的调被决定时的功率评价值7。并且,在ilength中保存当最优的调被决定时采用的iframetype的值2。

在图8的例子中,例如直到图8的(a)的小节号码(imeasno)=1~3,与上述的情况同样,按各小节的每个,最优的调被决定为音调音名=c,得到功率评价值7,以图2b中例示的数据格式生成调数据。接着,在小节号码(imeasno)=4中,从iframetype=1(2小节长)选择具有最高的功率评价值=6的音调音名=bb的调。以下,在小节号码(imeasno)=5、6中,也还是从的调。这表示当小节号码(imeasno)从3变化为4时发生了转调(日语:転調)。

这样,在本实施方式中,通过综合地判断多个区间长(iframetype)的调判定结果,例如在发生了转调的情况下,通过基于功率评价值采用1小节区间长或2小节区间长的短区间长的判定结果,能够检测到转调。此外,即使是仅通过1小节没有对于判定和弦而言足够的发音那样的情况,通过基于功率评价值采用2小节区间长或4小节区间长的更长区间长的判定结果,也能够进行适当的判定。进而,在本实施方式中,在如后述那样计算功率评价值时,还进行关于调的音阶音(scaletone)以外的音的考虑,所以能够维持判定的精度。

在图6的步骤s604的处理之后,cpu101向步骤s602的处理返回。cpu101对于一个iframetype的值,一边将区间的开始小节每次错开1小节,一边对乐曲的全部小节反复执行步骤s603的音调判定处理及步骤s604的结果保存处理。当对于全部小节的上述反复处理结束,向步骤s601的处理返回。并且,cpu101对iframetype=0、1、2的全部的值(小节区间长)反复执行从步骤s602到s604的一系列处理。当针对3种全部的iframetype的值的上述反复处理结束,结束由图6的流程图例示的图5的步骤s501的调判定处理。

图9是表示图6的调判定处理中的步骤s603的音调判定处理的详细例的流程图。cpu101首先执行音级功率制作处理(步骤s901)。这里,cpu101,在当前设定的具有1小节、2小节或4小节的区间长的区间内按音符开启(noteon)的乐曲的每个音符事件,将基于该音符事件的速率和该区间内的发音时长而决定的功率信息值累计到与该音符的音高对应的音级中,由此计算该区间中的每个音级的功率信息累计值。这里,所谓音级,是指对将1个八度音(octave)用12个半音进行12分割时的各半音赋予的整数值,例如1个八度音内的音名c对应于整数值0,c#或对应于1,d对应于2,d#或对应于3,e对应于4,f对应于5,f#或对应于6,g对应于7,g#或对应于8,a对应于9,a#或对应于10,b对应于11。在本实施方式中,将调按具有1小节、2小节或4小节的区间长的每个区间来判定。这里,表示调的音调音名及音阶音作为不依存于八度音的音名的组合来决定。因而,在本实施方式中,cpu101从存储在ram103中的具有图2a的数据格式的各音符事件的发音时刻itime及选通时间(发音时间)igate中检索在区间内发音的音符,将检索到的音符的音高(图2a的bydata[1])设为将该值除以12时的从0到11的某个余数,并变换为音级。并且,cpu101通过将基于该音符的速率和该区间内的发音时长而决定的功率信息值累计到与该音符的音高对应的音级中,计算该节拍中的每个音级的功率信息累计值。下面,设音级为ipc(0≤ipc≤11),设通过步骤s901的音级功率制作处理制作出的各音级ipc(0≤ipc≤11)的功率换算值为音级功率ipichclasspower[ipc]。关于该处理的详细情况在图10及图11的说明中后述。

接着,cpu101对于表示调的音调值的全部的ikey的值0~11,执行以下的步骤s903到s910的一系列处理(步骤s902)。首先,cpu101执行从步骤s903到s908的一系列处理。

具体而言,cpu101首先将一起存储在ram103中的作为变量的第1功率评价值ipower和第2功率评价值iotherpower的各值清0(步骤s903)。

接着,cpu101按具有从0到11的值的全部的音级ipc的每个,执行以下的从步骤s905到s907的处理(步骤s904)。

首先,cpu101判定在步骤904中被指定的当前的音级ipc是否包含在基于在步骤s902中被指定的当前的音调值ikey决定的调的音阶音中(步骤s905)。该判定是判定“scalenote[(12+ipc-ikey)%12]的值是否是1”的运算。图10是音阶音符(scalenote)的说明图。在图10中,(a)major、(b)hminor及(c)mminor的各行表示调的音调值是音级=0(音名=c)的情况下的、大调音阶(majorscale)、和声小调音阶(harmonicminorscale)及旋律小调音阶(melodicminorscale)的各音阶的构成音阶的音级及音名。在各行中,记载有值“1”的音级及音名是构成与该行对应的音阶的构成音。记载有值“0”的音级及音名是不构成与该行对应的音阶的音。在本实施方式中,为了处理的简单化及稳定性确保,不是将图10的(a)、(b)及(c)的各音阶的音阶音作为比较对象,而是将合并了这些音阶的图10的(d)的音阶(以下将其记作“合并音阶scale”)的音阶音作为比较对象。图10的(d)的合并音阶scale的音阶音或不构成音阶的音是对于图10的(a)、(b)及(c)的各音阶的音阶音或不构成音阶的音按每个音级(音名)运算逻辑和而得到的。即,按每个音级(音名),如果图10的(a)、(b)及(c)的各音阶的值是“1”,则合并音阶scale的值是“1”,如果图10的(a)、(b)及(c)的全部的音阶的值是“0”,则合并音阶scale的值是“0”。图1的rom102存储有当音调值是音级=0(音名=c)时的与图10的(d)的合并音阶scale对应的数组常数scale[i]。这里,i取图10的从0到11的音级的值,在数组要素值scale[i]中,保存有图10的(d)的合并音阶scale的行的音级i中的值1或0。cpu101在步骤s905中,首先运算“(12+ipc-ikey)%12”的值。在该运算中,计算在步骤s904中指定的音级ipc与在步骤s902中指定的音调值ikey之间的差值为哪个音级。在括弧内加上12是为了使“ipc-ikey”的值不为负值。此外,“%”表示求余的求余运算。cpu101将该运算结果作为数组要素自变量,判定从rom102读出的数组要素值scalenote[(12+ipc-ikey)%12]的值是否是1。由此,cpu101能够判定在步骤s904中指定的音级ipc是否包含在将图10的(d)所示的音调值为音级=0(音名=c)时的合并音阶scale变换为音调值为在步骤s902中指定的音调值ikey时的合并音阶scale时的音阶音中。

在步骤904中指定的当前的音级ipc包含在步骤s902中指定的当前的音调值ikey所对应的合并音阶scale的音阶音中的情况下(步骤s905的判定为是的情况下),cpu101将对应于该音级ipc而在步骤s901中计算出的音级功率ipichclasspower[ipc]累计到第1功率评价值ipower中(步骤s906)。在图9的步骤s906中,运算符号“+=”表示将其右边的值向其左边的值累计的运算。后述的步骤s907、图14的步骤s1406及步骤s1407的各“+=”记号也是同样的。

另一方面,在步骤904中指定的当前的音级ipc不包含在与在步骤s902中指定的当前的音调值ikey对应的合并音阶scale的音阶音中的情况下(步骤s905的判定为否的情况下),cpu101将对应于该音级ipc而在步骤s901中计算出的音级功率ipichclasspower[ipc]累计到第2功率评价值iotherpower中(步骤s907)。

当对具有从0到11的值的全部音级ipc结束了上述从步骤s905到s907的处理的执行(当步骤s904的判定为“结束”),则cpu101计算与在步骤s902中当前指定的音调值ikey对应的功率评价值dokeypower,作为用第1功率评价值ipower除以第2功率评价值iotherpower而得到的值(步骤s908)。在步骤s908的执行时点,第1功率评价值ipower示出与在步骤s902中当前指定的音调值ikey对应的合并音阶scale的音阶音以怎样的强度发音。此外,第2功率评价值iotherpower示出与音调值ikey对应的合并音阶scale的音阶音以外的音以怎样的强度鸣响。因而,作为“ipower÷iotherpower”而计算的功率评价值dokeypower成为表示在当前的区间鸣响的乐音(音符)和与当前的音调值ikey对应的合并音阶scale的音阶音有多相像的指标。

接着,cpu101将在步骤s908中计算出的与当前的音调值ikey对应的功率评价值dokeypower,和与到当前时点的紧前为止指定的音调值对应的功率评价值最高值domax进行比较(步骤s909)。并且,如果dokeypower是domax以上,则cpu101将功率评价值最高值domax和功率评价值最高音调值imaxkey分别置换为当前的功率评价值dokeypower和音调值ikey(步骤s910)。然后,cpu101向步骤s902的处理返回,转移到针对下个音调值ikey的处理。

图11是表示图9的步骤s901的音级功率制作处理的例子的流程图,图11是音级功率制作处理的说明图。首先,在通过图4的步骤s404读入到ram103中的具有图2a的数据格式例的midi音序数据中,cpu101按全部音轨的每个反复执行以下的从步骤s1102到s1111的一系列处理(步骤s1101)。以下,在步骤s1101中,cpu101将各音轨作为存储在ram103中的作为变量的音轨号码itrack的值依次指定。这里,cpu101在图2a的例子的midi音序数据中,通过参照与音轨号码itrack对应的指针信息midiev[itrack],向与音轨号码itrack对应的部分的存储在ram103中的最初的音符事件进行访问。

并且,cpu101从上述最初的音符事件起依次一边参照各音符事件内的图2a的next指针一边摸索前进,由此按照音轨号码itrack的部分内的全部音符事件的每个,将以下的从步骤s1103到s1111的一系列处理反复执行(步骤s1102)。这里,将指向当前的音符事件的指针记作“me”。并且,向当前的音符事件内的数据、例如图2a的发音开始时刻itime的参照记作“me->itime”等。

cpu101判定在具有由图6的步骤s601决定的1小节长、2小节长或4小节长的区间长、从由步骤s602指定的开始小节开始的区间(以下将其记作“当前的符合范围”)中,是否包含由步骤s1102指定的当前的音符事件(步骤s1103)。cpu101计算从乐曲开头开始计时的当前的符合范围的开头时刻,将该时刻设为作为变量的符合范围开始时刻itickfrom而存储到ram103中。如上述那样,作为节拍及小节的时间单位,都使用上述的时基,1拍通常是480时基,在4分之4拍的乐曲的情况下,1小节是4拍。因而,在例如4分之4拍的乐曲的情况下,在将乐曲的开头设为第0小节而将在图6的步骤s602中指定的区间的开始小节号码进行了计数的情况下,区间的开始小节的开始时刻为(480时基×4拍×区间的开始小节号码),其被计算为符合范围开始时刻itickfrom。同样,cpu101计算从乐曲开头开始计时的当前的符合范围的结束时刻,将该时刻设为作为变量的符合范围结束时刻itickto而存储在ram103中。符合范围结束时刻itickto是符合范围开始时刻itickfrom+(480时基×4拍×在步骤s601中指定的区间长)。并且,cpu101判定由从当前的音符事件的指针me参照的当前的音符事件的发音开始时刻itime和发音时长igate(都参照图2a)确定的当前的音符事件的发音区间相对于上述符合范围开始时刻itickfrom及符合范围结束时刻itickto是否处于图12的1201、1202或1203的某种关系。如果它们中的某种关系成立,则当前指定的音符事件的发音包含(涉及)在当前的符合范围中。在其成立的情况下,cpu101将步骤s1103的判定设为是。具体而言,根据图12的关系,如果符合范围结束时刻itickto比当前的音符事件的发音开始时刻me->itime靠后、并且符合范围开始时刻itickfrom比当前的音符事件的发音结束时刻即(发音开始时刻me->itime+发音时长me->igate)靠前,则cpu101将步骤s1103的判定设为是。

如果步骤s1103的判定为否,则cpu101判定为当前的音符事件不包含在当前的符合范围中,向步骤s1102的处理返回,转移到针对下个音符事件的处理。

如果步骤s1103的判定为是,则cpu101判定符合范围开始时刻itickfrom是否比当前的音符事件的发音开始时刻me->itime靠后(步骤s1104)。

如果步骤s1104的判定为是,则判定出图12的1201的状态,所以cpu101将符合范围开始时刻itickfrom设置到存储在ram103中的作为变量的当前的音符事件的当前的符合范围内的发音开始时刻itickstart中(步骤s1105)。

另一方面,如果步骤s1104的判定为否,则判定出图12的1202或1203的状态,所以cpu101将当前的音符事件的发音开始时刻me->itime设置到当前的音符事件的当前的符合范围内的发音开始时刻itickstart中(步骤s1106)。

在步骤s1105或s1106的处理之后,cpu101判定符合范围结束时刻itickto是否比当前的音符事件的发音结束时刻即(发音开始时刻me->itime+发音时长me->igate)靠后(步骤s1107)。

如果步骤s1107的判定为是,则判定出图12的1201或1202的状态,所以cpu101将当前的音符事件的发音结束时刻即(发音开始时刻me->itime+发音时长me->igate)设置到存储在ram103中的作为变量的当前的音符事件的当前的符合范围内的发音结束时刻itickend中(步骤s1108)。

另一方面,如果步骤s1107的判定为否,则判定出图12的1203的状态,所以cpu101将符合范围结束时刻itickto设置到当前的音符事件的当前的符合范围内的发音结束时刻itickend中(步骤s1109)。

在步骤s1108或s1109的处理之后,cpu101将从当前的音符事件的指针me参照的音高bydata[1](参照图2a)的值保存到存储在ram103中的作为变量的当前的音符事件的音高ipitch中(步骤s1110)。

并且,cpu101在作为用当前的音符事件的音高ipitch除以12时的余数(ipitch%12)而计算出的当前的音符事件所对应的音级中的存储在ram103中的数组要素值即音级功率ipichclasspower[ipitch%12]中,保存以下的计算值。cpu101计算上述音级功率ipichclasspower[ipitch%12],作为对由当前的音符事件的速率和部分信息确定的速率信息ipowerweight乘以当前的音符事件的当前的符合范围中的发音时长(itickend-itickstart)而得到值。这里,速率信息ipowerweight例如作为对从当前的音符事件的指针me参照的速率me->bydata[2](参照图2a)乘以对与当前的音轨号码itrack(参照步骤s1101)对应的部分预先规定并存储在rom102中的规定的部分系数而得到的值而被计算。这样,与当前的音符事件对应的音级功率ipichclasspower[ipitch%12]的值为,当前的符合范围内的当前的音符事件的发音时间越长、表示发音的强度的速率越大,对应于当前的音符事件所属于的部分,与当前的音符事件对应的音级(ipitch%12)的音在当前的符合范围中的构成比例越大。

在步骤s1111的处理之后,cpu101向步骤s1102的处理返回,向针对下个音符事件的处理转移。

当通过反复执行上述从步骤s1103到s1111的一系列处理、与当前的音轨号码itrack对应的全部音符事件me所对应的处理结束,则cpu101向步骤s1101的处理返回,向针对下个音轨号码itrack的处理转移。进而,当通过反复执行上述从步骤s1102到s1111的处理、与全部的音轨号码itrack对应的处理结束,则cpu101结束图11的流程图中例示的图9的步骤s901的音级功率制作处理。

图13是表示作为图5的调判定处理的详细例的图6的流程图的处理中的步骤s604的结果保存处理的详细例的流程图。这里,cpu101将通过图6的步骤s603的调判定处理而对当前的符合范围(具有由步骤s601决定的区间长、从在步骤s602中指定的开始小节开始的区间)计算出的功率评价值dokeypower,与对其他区间长得到的重叠区间的功率评价值进行比较,由此对该区间决定当前时点的最优的调。

cpu101首先按构成乐曲的全部小节的每个,反复执行从步骤s1302到s1304的一系列处理(步骤s1301)。以下,cpu101,在步骤s1301中,将乐曲的开头的小节的小节号码设为0,作为从此处依次计数的存储在ram103中的作为变量的小节号码i的值而依次指定各小节。

在该反复处理中,cpu101首先从在图6的步骤s602中指定的区间的开始小节号码起,判定在包含它且在图6的步骤s601中指定的区间长的当前的符合范围的小节号码的组中是否包含小节号码i(步骤s1301)。

如果步骤s1302的判定为否,则cpu101向步骤s1301的处理返回,向针对下个小节号码的处理转移。

如果步骤s1302的判定为是,则cpu101判定如下情况:通过图6的步骤s603的音调判定处理(图9的流程图的处理)而对当前的符合范围计算出的功率评价值dokeypower,是否是在存储于ram103的具有图2b的数据格式例的调数据中、作为从与小节号码i对应的指针信息tonality[i]参照的调信息而存储的功率评价值tonality[i].dopower以上(步骤s1303)。

如果步骤s1303的判定为否,则cpu101向步骤s1301的处理返回,向针对下个小节号码的处理转移。

如果步骤s1303的判定为是,则cpu101,在从与小节号码i对应的指针信息tonality[i]参照的调信息中,对于调的音调tonality[i].ikey,设置在图9的步骤s910中计算出的功率评价值最高音调值imaxkey。此外,cpu101对于调判定时的功率评价值tonality[i].dopowervalue,设置在图9的步骤s910中计算出的功率评价值最高值domax。进而,cpu101对于调判定时的区间长tonality[i].ilength,设置在图6的步骤s601中指定的当前的区间长(以上是步骤s1304)。在步骤s1304的处理之后,cpu101向步骤s1301的处理返回,向针对下个小节号码的处理转移。

另外,对于在ram103中生成的图2b的调数据而言,在图4的步骤s404的曲数据的读入时,根据被读入的midi音序数据的音符事件的存在范围的值,初始生成需要小节数的指针信息以及从它们参照的调信息。例如,如果是4分之4拍的乐曲,则如上述那样设为1拍=480时基,计算需要小节数n=(末尾的音符事件的图2a的(itime+igate)值÷480÷4拍)。结果,生成从tonality[0]到tonality[n-1]的指针信息、和从此处参照的图2b的调信息的构造体数据。并且,在从各指针信息tonality[i](0≤i≤n-1)参照的构造体数据中,对于tonality[i].ikey初始设定无效值。对于tonality[i].dopowervalue初始设定例如负值。对于tonality[i].itick,设置(480时基×4拍×i小节)的时基时刻值。此外,对于tonality[i].imeasno,设置小节号码i。另外,在本实施方式中,tonality[i].iscale未使用。

在上述图8的例子中,当在图6的步骤s601中指定的区间长=1小节长(iframetype=0)、在步骤s602中指定的区间的开始小节号码(图8的(a)的imeasno)=0时,作为步骤s603的音调判定处理的结果,如图8的(c)所示,作为功率评价值最高音调值作为功率评价值最高值domax而得到3。结果,在图6的步骤s604的结果保存处理中的图13的流程图中,当小节号码i=0时,步骤s1302的判定为是。于是,执行步骤s1303的判定处理,由于此时tonality[0].dopowervalue的值为负的初始值,所以功率评价值最高值domax=3更大,步骤s1303的判定为是。结果,在步骤s1304中,设置tonality[0].dopowervalue=domax=3,tonality[0].ilength=1(小节长)。

接着,在上述图8的例子中,当在图6的步骤s601中指定的区间长=2小节长(iframetype=1)、在步骤s602中指定的区间的开始小节号码(图8的(a)的imeasno)=0时,作为步骤s603中的音调判定处理的结果,如图8的(d)所示,作为作为功率评价值最高值domax而得到4。结果,在图6的步骤s604的结果保存处理中的图13的流程图中,当小节号码i=0时,步骤s1302的判定为是。于是,执行步骤s1303的判定处理,由于此时tonality[0].dopowervalue=3,所以功率评价值最高值domax=4更大,步骤s1303的判定为是。结果,在步骤s1304中,设置tonality[0].dopowervalue=domax=4,tonality[0].ilength=2(小节长)。

进而,在上述图8的例子中,当在图6的步骤s601中指定的区间长=4小节长(iframetype=2)、在步骤s602中指定的区间的开始小节号码(图8的(a)的imeasno)=0时,作为步骤s603中的音调判定处理的结果,如图8的(e)所示,作为功率评价值最高音调值imaxkey而得到音级=0(音名=c),作为功率评价值最高值domax而得到7。结果,在图6的步骤s604的结果保存处理中的图13的流程图中,当小节号码i=0时,步骤s1302的判定为是。于是,执行步骤s1303的判定处理,由于此时tonality[0].dopowervalue=4,所以功率评价值最高值domax=7更大,步骤s1303的判定为是。结果,在步骤s1304中,设置tonality[0].ikey=imaxkey=0(音名c),tonality[0].dopowervalue=domax=7,tonality[0].ilength=4(小节长)。

当对构成乐曲的全部的小节号码i完成以上的从步骤s1302到s1304的一系列处理的执行,则cpu101结束由图13的流程图表示的图6的步骤s604的结果保存处理。

根据以上的例子可知,在本实施方式中,通过综合地判断多个区间长(iframetype)的调判定结果,即使在例如发生了转调的情况下、或者在仅通过1小节没有对于判定和弦而言足够的发音的情况下,也能够进行适当的调判定。进而,在本实施方式中,在如后述那样计算功率评价值时,由于还进行关于和弦的和弦音的构成音以外的音的考虑,所以能够维持调判定的精度。进而,在本实施方式中,在图9的步骤s906和s907中,计算与调的音阶音有关的第1功率评价值ipower和与音阶音以外的音有关的第2功率评价值iotherpower,基于它们计算与调的音调值ikey对应的功率评价值dokeypower。因而,关于调的音调值ikey,能够进行考虑到该音阶音和音阶音以外的音这双方的功率评价,能够维持判定的精度。

接着,以下说明在通过上述详细叙述的图5的步骤s501的调判定处理、作为图2b的调数据而按每个小节适当地判定了调之后、按照全部小节的每个(步骤s502)以及各小节内的全部节拍的每个(步骤s503)反复执行的步骤s504的音级功率制作处理、和步骤s505的匹配与结果保存处理的详细情况。

首先,对图5的步骤s504的音级功率制作处理的详细情况进行说明。这里,cpu101按照在当前设定的节拍内进行音符开启(noteon)的乐曲的每个音符事件,将基于该音符事件的速率和该节拍内的发音时长而决定的功率信息值累计到与该音符的音高对应的音级中,由此计算当前的节拍中的每个音级的功率信息累计值。

图5的步骤s504的详细情况在上述图11的流程图中表示。在作为上述图9的步骤s901的详细处理的图11的说明中,“当前的符合范围”是当前指定的用于调判定的小节区间,相对于此,在作为图5的步骤s504的详细处理的以下的图11的说明中,“当前的符合范围”是在图5的步骤s502中指定的小节内的在步骤s503中指定的节拍所对应的范围。进而,图12的符合范围开始时刻itickfrom是当前的节拍的开始时刻。如上述那样,作为节拍及小节的时间单位,都使用上述的时基,1拍通常是480时基,在4分之4拍的乐曲的情况下,1小节是4拍。因而,例如在4分之4拍的乐曲的情况下,在将乐曲的开头设为第0小节而将在图5的步骤s502中指定的小节的小节号码进行了计数的情况下,该小节的开始时刻为(480时基×4拍×小节号码),进而,在将小节的开头的节拍设为0而将在图5的步骤s503中指定的节拍的节拍号码进行了计数的情况下,该节拍在小节内的开始时刻为(480时基×节拍号码)。因而,计算为符合范围开始时刻itickfrom=(480时基×4拍×小节号码)+(480时基×节拍号码)=480×(4拍×小节号码+节拍号码)。此外,图12的符合范围结束时刻itickto是当前的节拍的结束时刻。由于1拍是480时基,所以计算为符合范围结束时刻itickto=符合范围开始时刻itickfrom+480=480×(4拍×小节号码+节拍号码+1)。

cpu101通过在以上的置换后使图11的流程图的处理动作,在步骤s1111中,对于作为用当前的音符事件的音高ipitch除以12时的余数(ipitch%12)而计算的与当前的音符事件对应的音级的音级功率ipichclasspower[ipitch%12],保存以下的计算值。cpu101计算上述音级功率ipichclasspower[ipitch%12],作为对根据当前的音符事件的速率和部分信息确定的速率信息ipowerweight乘以当前的音符事件的当前的节拍的范围中的发音时长(itickend-itickstart)而得到的值。这样,对于与当前的音符事件对应的音级功率ipichclasspower[ipitch%12]的值而言,当前的节拍的范围内的当前的音符事件的发音时间越长、表示发音的强度的速率越大,对应于当前的音符事件所属于的部分,与当前的音符事件对应的音级(ipitch%12)的音在当前的节拍的范围中的构成比例越大。

图14是表示图5的步骤s505的匹配与结果保存处理的详细例的流程图。

接着,cpu101对于表示和弦的根音(root)的全部的iroot的值0到11,执行以下的从步骤s1402到s1413的一系列处理(步骤s1401)。进而,cpu101对于表示和弦的类别的全部的和弦类型itype的值,执行以下的从步骤s1403到s1413的一系列处理(步骤s1402)。

在从步骤s1403到s1413的反复处理中,cpu101首先将一并存储在ram103中的作为变量的第1功率评价值ipower和第2功率评价值iotherpower的各值清0(步骤s1403)。

接着,cpu101按具有0到11的值的全部的音级ipc的每个,执行以下的从步骤s1405到s1407的处理(步骤s1404)。

首先,cpu101判定在步骤1404中指定的当前的音级ipc是否包含在基于在步骤s1401及步骤s1402中指定的当前的和弦根音(chordroot)iroot以及和弦类型itype确定的和弦的构成音(和弦音(chordtone))中(步骤s1405)。该判定是判定“chordtone[itype][(12+ipc-iroot)%12]的值是否是1”的运算。图15是和弦音的说明图。在图15中,(a)major、(b)minor、(c)7th及(d)minor7th的各行示出和弦根音是音级=0(音名=c)的情况下的大调和弦、小调和弦、第七和弦及小调第七和弦的各和弦类型的构成音的音级及音名。在各行中,记载有值“1”的音级及音名是与该行对应的和弦的构成音。记载有值“0”的音级及音名以不是与该行对应的和弦的构成音的音作为比较对象。图1的rom102存储有当和弦根音是音级=0(音名=c)时的例如与图15的(a)、(b)、(c)及(d)的各和弦类型itype对应的数组常数chordtone[itype][i]。另外,实际上,itype的种类比图15所示的4种多。这里,i取图15的0到11的音级的值,在数组要素值chordtone[itype][i]中,保存有与第1数组要素自变量itype对应的作为图15的(a)、(b)、(c)或(d)例示的行的与第2数组要素自变量i对应的音级i的值1或0。在步骤s1405中,首先,cpu101作为第2数组要素自变量而运算“(12+ipc-iroot)%12”的值。在该运算中,计算在步骤s1404中指定的音级ipc与在步骤s1401中指定的和弦根音iroot之间的差值成为哪个音级。在括弧内加上12是为了使“ipc-iroot”的值不为负值。此外,“%”表示求余的求余运算。cpu101将该运算结果作为第2数组要素自变量,进而将在步骤s1402中指定的itype作为第1数组要素自变量,判定从rom102读出的数组要素值chordtone[itype][(12+ipc-iroot)%12]的值是否是1。由此,cpu101能够判定在步骤s1404中指定的音级ipc是否包含在将图15例示的和弦根音是音级=0(音名=c)时的和弦构成音变换为和弦根音是在步骤s1401中指定的iroot时的和弦构成音时的与itype对应的行的和弦构成音中。

在步骤1404中指定的当前的音级ipc包含在与在步骤s1401中指定的当前的和弦根音iroot以及在步骤s1402中指定的当前的和弦类型itype对应的和弦的构成音中的情况下(步骤s1405的判定为是的情况下),cpu101将对应于该音级ipc而在图5的步骤s504中计算出的音级功率ipichclasspower[ipc]累计到第1功率评价值ipower中(步骤s1406)。

另一方面,在步骤1404中指定的当前的音级ipc不包含在与在步骤s1401中指定的当前的和弦根音iroot以及在步骤s1402中指定的当前的和弦类型itype对应的和弦的构成音中的情况下(步骤s1405的判定为否的情况下),cpu101将对应于该音级ipc而在图5的步骤s504中计算出的音级功率ipichclasspower[ipc]累计到第2功率评价值iotherpower中(步骤s1407)。

cpu101当对于具有0到11的值的全部的音级ipc结束上述的从步骤s1405到s1407的处理的执行(当步骤s1404的判定结果表示“结束”),则执行以下的处理。在由步骤s1401及s1402中当前指定的和弦根音及和弦类型决定的和弦的构成音中,cpu101对于在图5的步骤s502中当前指定的小节,将用通过图5的步骤s501的调判定处理而决定的调的音阶音中包含的音数除以该调的音阶音的数量而得到的值,作为修正系数tnr来计算。即,cpu101执行由下述(1)式表示的运算(步骤s1408)。

tnr=(在和弦构成音中在调的音阶音中包含的音数)÷(调的音阶音数)…(1)

更具体地讲,cpu101以在图5的步骤s502中当前指定的小节的小节号码为自变量,根据存储在ram103中的图2b的数据格式的指针信息tonality[小节号码]参照图2b的调信息。由此,cpu101取得与上述小节对应的调的音调值作为tonality[小节号码].ikey。并且,cpu101将存储在rom102中的音调值是音级=0(音名=c)时的与图10的(d)的合并音阶scale对应的数组常数scale[i]的每个i的音阶音,按照上述取得的音调值tonality[小节号码].ikey进行变换。由此,cpu101得到与上述取得的音调值tonality[小节号码].ikey对应的合并音阶scale的音阶音的信息。通过将该音阶音与由在步骤s1401和s1402中当前指定的和弦根音及和弦类型确定的和弦的构成音进行比较,计算上述(1)式。

例如,调判定结果为c大调时的各和弦的修正值成为以下这样。

g7:1、bdim:1、bdim7:0.75、

ddim7=0.75、fdim7=0.75

接着,cpu101对在步骤s1406中计算出的第1功率评价值ipower乘以在步骤s1408中计算出的修正系数tnr,此外,对第2功率评价值iotherpower乘以规定的负的常数opr,通过用将两者的相乘结果相加得到的结果来替换第1功率评价值ipower,计算与由在步骤s1401和s1402中当前指定的和弦根音及和弦类型所确定的和弦相对应的新的功率评价值ipower(步骤s1409)。

经由上述(1)的修正系数tnr,在本实施方式中,能够使由图5的步骤s501中的调判定处理得到的每个小节的调判定的结果反映到该小节内的每拍的和弦判定中,实现精度高的和弦判定。

cpu101对于作为图3的和弦行进数据而得到的与当前的节拍号码icnt对应的全部和弦候选的数量i(i=0,1,2,…),反复执行以下的从步骤s1411到s1413的一系列处理(步骤s1410)。

在该反复处理中,cpu101首先取得与当前的节拍号码icnt对应的第i+1候选(如果i=0则为第1候选,如果i=1则为第2候选,如果i=2则为第3候选,…)的指针信息chordprog[icnt][i]参照的、和弦信息内的功率评价值chordprog[icnt][i].dopowervalue。这里,当前的节拍号码icnt是从乐曲的开头起的节拍的连续号码,在4分之4拍的乐曲的情况下,作为“icnt=(4拍×步骤s502的小节号码)+(步骤s503的节拍号码)”来计算。并且,cpu101判定在步骤s1409中计算出的功率评价值ipower是否比上述chordprog[icnt][i].dopowervalue的值大(以上是步骤s1411)。

在步骤s1411的判定为否的情况下,cpu101向步骤s1410的处理返回,向针对将i递增了的下个和弦候选的处理转移。

在步骤s1411的判定为是的情况下,cpu101将第i+1个以后的指针信息chordprog[icnt][i+1]、chordprog[icnt][i+2]、chordprog[icnt][i+3]、…参照的和弦信息,依次如参照此前一个一个地位次升高了的和弦信息那样,将参照关系移位。并且,cpu101在ram103上确保第i个指针信息chordprog[icnt][i]新参照的和弦信息的保存场所,在该保存场所中将关于新判定出的和弦的和弦信息以图3例示的数据格式保存。

在该和弦信息中,在itick中保存与当前的小节(在步骤s502中决定)内的当前的节拍(在步骤s503中决定)对应的开始的时刻。这是在图5的步骤s504的音级功率制作处理的说明中叙述过的符合范围开始时刻itickfrom=480×(4拍×当前的小节号码+小节内的当前的节拍号码)。在imeasno中保存将当前的小节的乐曲的开头的小节设为第0小节而计数的当前的小节号码。在itickinmeas中,保存与小节内的当前的节拍对应的开始的时基时刻。如在图2b的说明中叙述的那样,itickinmeas成为与第1拍对应的时基值0、与第2拍对应的时基值480、与第3拍对应的时基值960、或与第4拍对应的时基值1440的某个值。在iroot和itype中,分别保存在步骤s1401中指定的当前的和弦根音iroot值、和在步骤s1402中指定的当前的和弦类型itype。在dopowervalue中保存在步骤s1409中计算出的功率评价值。然后,cpu101向步骤s1410的处理返回,向针对下个和弦候选的处理转移。

当对于全部的和弦候选的数量i的处理完成(当步骤s1410的判定结果表示“结束”),则cpu101向步骤s1402的处理返回,向对于下个和弦类型itype的反复处理转移。

当对于全部的和弦类型itype的反复处理完成(当步骤s1402的判定结果表示“结束”),则cpu101向步骤s1401的处理返回,向关于下个和弦根音iroot的反复处理转移。

当对于全部的和弦根音iroot的反复处理完成(当步骤s1401的判定结果表示“结束”),则cpu101结束由图14的流程图例示的图5的步骤s505的匹配与结果保存处理。

接着,以下说明图5的步骤s506的最小开销计算处理和步骤s507的路径确定处理的详细情况。在对乐曲数据的和弦的判定中,有在实际的乐曲中使用的和弦以外的音的影响、或反之和弦的构成音始终不鸣响的状况,从而以往有无法进行适当的和弦判定的情况。例如,在仅“升fa(日语:シレファ)”的发音的情况下,具有该音作为构成音的和弦有g7、bdim、bdim7、ddim7、fdim7。此外,在“do、do#、re、mi”的发音的情况下,具有它们的一部分作为构成音的和弦有cadd9、cmadd9、c#mm7等。在有这些多个和弦的候选的情况下,仅根据该和弦存在的节拍时间(beattiming)的音级进行判定有困难,可以想到需要使用音乐知识或考虑时间轴上的变化要素等。

通常,“sus4”“mm7”等关于前后的和弦的连结有音乐的自然的规则。例如,“sus4”的和弦的下个和弦具有相同的和弦根音的情况较多。此外,“mm7”的和弦的前后的和弦具有相同的和弦根音、是小调和弦的情况较多。

因此,在本实施方式中,定义基于音乐的连结规则的2个和弦间的连结开销。并且,cpu101在图5的步骤s506中,对于乐曲的全部小节及小节内的全部节拍,从由以图3例示的数据格式得到的多个候选构成的和弦行进数据的全部组合之中,基于上述连结开销计算在乐曲整体中开销最小的和弦的组合。在最小开销的计算中,例如能够利用迪杰斯特拉法(dijkstra’salgorithm)等。

图16a和图16b是最小开销计算处理和路径确定处理的说明图。图16a是最小开销计算处理中的路径最优化处理的说明图。图16b是基于最小开销计算处理及路径确定处理的路径最优化结果的说明图。基于步骤s506的最小开销计算处理的路径最优化处理,假设按每个节拍时间、和弦的候选有m个(例如3个),则是从m个和弦数的拍数乘方的组合之中求出成为最小开销的路径的处理。以下,以m=3的情况为例进行说明。

如图16a和图16b所示,作为图3的和弦行进数据,按照各节拍时间n-2、n-1、n、n+1、…的每个,得到从第1候选到第3候选的各3个候选的和弦候选。设节拍时间n为当前的节拍时间,假设该当前的节拍时间由存储在ram103中的变量ichordidx指定。此外,假设当前的紧前的节拍时间n-1由存储在ram103中的变量iprevchordidx指定。进而,假设由ichordidx指定的当前的节拍时间n中的各候选号码(0、1或2)由存储在ram103中的变量icurchord指定。此外,假设由iprevchordidx指定的当前的紧前的节拍时间n-1中的各候选号码(0、1或2)由存储在ram103中的变量iprevchord指定。

在本实施方式的最小开销计算处理中,将到从乐曲的开头的节拍时间开始和弦的发音、一边按各节拍时间的每个选择和弦候选一边选择当前的节拍时间ichordidx中的当前的候选号码icurchord的当前的和弦候选而发音为止所花费的总开销,定义为存储在ram103中的作为数组变量的最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord]。该开销值,作为对当前的紧前的节拍时间iprevchordidx中的3个和弦候选的每一个与当前的和弦候选之间的各连结开销、分别加上在该3个和弦候选的每一个中计算出的各最优和弦总最小开销而得到的各值成为最小的值而被计算。此外,将取该最小值的当前的紧前的节拍时间iprevchordidx中的和弦候选定义为,存储在ram103中的作为数组变量的向当前的和弦候选的紧前最优和弦路径ioptimizechordrouteprev[ichordidx][icurchord]。cpu101在图5的步骤s506的最小开销计算处理中,从乐曲的开头的节拍时间起,按沿着乐曲的行进的每个节拍时间,依次执行上述的最小开销计算处理。

图17是表示图5的步骤s506的最小开销计算处理的详细例的流程图。cpu101关于ichordidx=1以后的全部的节拍时间,一边指定当前的节拍时间ichordidx,一边反复执行从步骤s1702到s1708的一系列处理(步骤s1701)。在ichordidx=0的情况下,由于不存在更靠前的节拍时间,所以不进行计算。

接着,cpu101在当前的紧前的节拍时间iprevchordidx中,保存从当前的节拍时间ichordidx的值中减去1的值(步骤s1702)。

接着,cpu101按照在步骤s1701中指定的当前的节拍时间ichordidx的每个,对于全部的和弦候选,一边指定当前的节拍时间的候选号码icurchord,一边反复执行从步骤s1704到s1709的一系列处理(步骤s1703)。

进而,cpu101按照在步骤s1703中指定的当前的节拍时间的候选号码icurchord的每个,对于全部的紧前的节拍时间的和弦候选,一边指定紧前的节拍时间的候选号码iprevchord,一边反复执行从步骤s1705到s1708的一系列处理(步骤s1704)。

在从步骤s1705到s1709的反复处理中,cpu101首先计算从在步骤s1704中指定的紧前的节拍时间的候选号码iprevchord的和弦候选、向在步骤s1703中指定的当前的节拍时间的候选号码icurchord的和弦候选转变时的连结开销,将计算结果向存储在ram103中的作为变量的开销docost保存(步骤s1705)。

接着,cpu101对开销docost加上对于在步骤s1703中指定的紧前的节拍时间的候选号码iprevchord的和弦候选保持的最优和弦总最小开销dooptimizechordtotalminimalcost[iprevchordidx][iprevchord]的值(步骤s1706)。另外,在当前的节拍时间ichordidx=1且当前的紧前的节拍时间iprevchordidx=0的情况下的最优和弦总最小开销dooptimizechordtotalminimalcost[0][iprevchord](iprevchord=0、1、2)的值是0。

接着,cpu101判定在步骤s1706中更新后的开销docost的值是否是到当前为止对于在步骤s1703中指定的当前的节拍时间的候选号码icurchord得到的存储在ram103中的作为变量的开销最小值domin以下(步骤s1707)。另外,对于开销最小值domin的值而言,当cpu101在步骤s1703中指定新的当前的节拍时间的候选号码icurchord时,被设定为较大的初始值。

如果步骤s1707的判定为否,则cpu101向步骤s1704的处理返回,将iprevchord递增,向针对紧前的节拍时间的下个候选号码iprevchord的处理转移。

如果步骤s1707的判定为是,则cpu101对到当前为止的开销最小值domin保存开销docost的值,对存储在ram103中的作为变量的开销最小紧前和弦iminprevchord保存在步骤s1704中指定的紧前的节拍时间的候选号码iprevchord。进而,cpu101对于与当前的节拍时间ichordidx及当前的节拍时间的候选号码icurchord的和弦候选对应的最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord],保存开销docost的值(以上是步骤s1708)。然后,cpu101向步骤s1704的处理返回,将iprevchord递增,向针对紧前的节拍时间的下个候选号码iprevchord的处理转移。

以上的从步骤s1705到s1708的一系列处理被按照在步骤s1704中依次指定的紧前的节拍时间的候选号码iprevchord的每个执行,当对于全部的紧前的节拍时间的候选号码iprevchord(=0、1、2)的处理完成,则cpu101执行下个处理。cpu101对于与当前的节拍时间ichordidx及当前的节拍时间的候选号码icurchord对应的紧前最优和弦路径ioptimizechordrouteprev[ichordidx][icurchord],保存开销最小紧前和弦iminprevchord的值。然后,cpu101向步骤s1703的处理返回,将icurchord递增,向针对当前的节拍时间的下个候选号码icurchord的处理转移。

以上的从步骤s1704到s1709的一系列处理被按照在步骤s1703中依次指定的当前的节拍时间的候选号码icurchord的每个执行,当对于全部的当前的节拍时间的候选号码icurchord(=0、1、2)的处理完成,则cpu101向步骤s1701的处理返回,将ichordidx递增,向针对下个节拍时间ichordidx的处理转移。

以上的从步骤s1702到s1709的一系列处理被按照在步骤s1701中依次指定的当前的节拍时间ichordidx的每个执行,当对于全部的当前的节拍时间ichordidx的处理完成,则cpu101结束在图17的流程图中表示的图5的步骤s506的最小开销计算处理。

图18是表示图17的步骤s1705的开销计算处理的详细例的流程图。cpu101首先将与当前的节拍时间ichordidx及当前的节拍时间的候选号码icurchord对应地存储在ram103中的和弦信息(参照图3)的指针信息chordprog[ichordidx][icurchord]的值保存到存储在ram103中的作为变量的当前指针cur(步骤s1801)。

cpu101同样地将与当前的紧前的节拍时间iprevchordidx及紧前的节拍时间的候选号码iprevchord对应地存储在ram103中的和弦信息的指针信息chordprog[iprevchordidx][iprevchord]的值保存到存储在ram103中的作为变量的紧前指针prev(步骤s1802)。

接着,cpu101将连结开销docost的值初始设定为0.5(步骤s1803)。

接着,cpu101在对当前的节拍时间ichordidx的候选号码icurchord的和弦信息的和弦根音cur.iroot(参照图3)加上12后,减去当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦信息的和弦根音prev.iroot,判定用该结果除以12时的余数是否是5(步骤s1804)。

在步骤s1804的判定为是的情况下,从当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦候选向当前的节拍时间ichordidx的候选号码icurchord的和弦候选的转变,是音程差为5度的特别自然的和弦转变。因而,在此情况下,cpu101将连结开销docost的值设定为作为最优值的最低值0.0(步骤s1805)。

在步骤s1804的判定为否的情况下,cpu101将步骤s1805的处理跳过,连结开销docost的值保持为0.5。

接着,cpu101判定是否当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦信息的和弦类型prev.itype(参照图3)是“sus4”、并且该和弦信息的和弦根音prev.iroot与当前的节拍时间ichordidx的候选号码icurchord的和弦信息的和弦根音cur.iroot相同(步骤s1806)。

在步骤s1806的判定为是的情况下,很合乎““sus4”的和弦的下个和弦具有相同的和弦根音的情况较多”这样的音乐规则,是特别自然的和弦转变。因而,在此情况下,cpu101将连结开销docost的值设定为作为最优值的最低值0.0(步骤s1807)。

在步骤s1806的判定为否的情况下,成为相当不自然的和弦转变,所以在此情况下,cpu101将连结开销docost的值设定为较差的值1.0(步骤s1808)。

接着,cpu101判定是否当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦信息的和弦类型prev.itype是“mm7”、并且当前的节拍时间ichordidx的候选号码icurchord的和弦信息的和弦类型cur.itype是“m7”、并且两者的和弦信息的和弦根音prev.iroot和cur.iroot相同(步骤s1809)。

在步骤s1809的判定为是的情况下,也是很合乎音乐规则的特别自然的和弦转变,所以在此情况下,cpu101也将连结开销docost的值设定为作为最优值的最低值0.0(步骤s1810)。

在步骤s1809的判定为否的情况下,成为相当不自然的和弦转变,所以在此情况下,cpu101将连结开销docost的值设定为较差的值1.0(步骤s1811)。

进而,cpu101判定是否当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦信息的和弦类型prev.itype是“maj”、并且当前的节拍时间ichordidx的候选号码icurchord的和弦信息的和弦类型cur.itype是“m”、并且两者的和弦信息的和弦根音prev.iroot与cur.iroot相同(步骤s1812)。

在步骤s1812的判定为是的情况下,成为不自然的和弦转变,所以cpu101对连结开销docost设定较差的值1.0(步骤s1813)。

在步骤s1812的判定为否的情况下,cpu101将步骤s1813的处理跳过。

最后,cpu101对于连结开销docost,乘以从1减去当前的节拍时间ichordidx的候选号码icurchord的和弦信息的功率评价值cur.dopowervalue的结果、和从1减去当前的紧前的节拍时间iprevchordidx的候选号码iprevchord的和弦信息的功率评价值prev.dopowervalue的结果,调整连结开销docost的值(步骤s1814)。然后,cpu101结束由图18的流程图表示的图17的步骤s1705的开销计算处理。

在图16b中,为了说明的简化,示出了设候选数为2、设节拍时间仅为0、1、2、3的情况下的、上述图17的最小开销计算处理的最小开销计算结果的例子。在图16b中,大的圆形标记表示判定出的和弦候选。此外,记载在将圆形标记间连结的直线箭头附近的数值表示从该直线箭头的起始点的圆形标记的和弦候选向终点的圆形标记的和弦候选的连结开销docost。假设在节拍时间=0的情况下,cmaj被判定为第1和弦候选,cm被判定为第2和弦候选。假设在节拍时间=1的情况下,am被判定为第1和弦候选,amm7被判定为第2和弦候选。假设在节拍时间=2的情况下,dm被判定为第1和弦候选,dsus4被判定为第2和弦候选。并且,假设在节拍时间=3的情况下,g7被判定为第1和弦候选,bdim被判定为第2和弦候选。

在图17的最小开销计算处理中,首先,在当前的节拍时间ichordidx=1且候选号码icurchord=0(第1候选)的情况下,作为当前的和弦候选而得到“am”。在此情况下,在当前的紧前的节拍时间iprevchordidx=0中,从候选号码iprevchord=0(第1候选)的紧前的和弦候选“cmaj”向当前的和弦候选“am”的连结开销docost,通过图18的流程图的算法而被计算为0.5。此外,从候选号码iprevchord=1(第2候选)的紧前的和弦候选“cm”向当前的和弦候选“am”的连结开销docost,也通过图18的流程图的算法而被计算为0.5。紧前的和弦候选“cmaj”及“cm”的各最优和弦总最小开销dooptimizechordtotalminimalcost[0][0/1]都是0。在图17的步骤s1707中,在连结开销docost和开销最小值domin是同值的情况下后面的和弦候选优先。因而,当前的和弦候选“am”的最优和弦总最小开销dooptimizechordtotalminimalcost[1][0],如“am”的圆形标记的内部所示那样被计算为0.5。此外,作为对于当前的和弦候选“am”的紧前最优和弦路径ioptimizechordrouteprev[1][0],如作为向“am”的圆形标记输入的粗线箭头所示那样,被设定紧前的和弦候选“cm”。

关于当前的节拍时间ichordidx=1且候选号码icurchord=1(第2候选)的情况下的和弦候选“amm7”也执行同样的计算。当前的和弦候选“amm7”的最优和弦总最小开销dooptimizechordtotalminimalcost[1][1]如“amm7”的圆形标记的内部所示那样被计算为0.5。此外,作为对于当前的和弦候选“amm7”的紧前最优和弦路径ioptimizechordrouteprev[1][1],如作为向“amm7”的圆形标记输入的粗线箭头所示那样被设定紧前的和弦候选“cm”。

接着,当前的节拍时间前进1个而成为ichordidx=2,在候选号码icurchord=0(第1候选)的情况下,作为当前的和弦候选而得到“dm”。在此情况下,在当前的紧前的节拍时间iprevchordidx=1中,从候选号码iprevchord=0(第1候选)的紧前的和弦候选“am”向当前的和弦候选“dm”的连结开销docost通过图18的流程图的算法被计算为0.0。此外,从候选号码iprevchord=1(第2候选)的紧前的和弦候选“amm7”向当前的和弦候选“dm”的连结开销docost通过图18的流程图的算法被计算为1.0。紧前的和弦候选“am”及“amm7”的各最优和弦总最小开销dooptimizechordtotalminimalcost[1][0/1]都是0.5。因而,从紧前的和弦候选“am”向当前的和弦候选“dm”的在图17的步骤s1706中修正后的开销docost的值为0.5+0.0=0.5。同样,从紧前的和弦候选“amm7”向当前的和弦候选“dm”的修正后的开销docost的值为0.5+1.0=1.5。因而,当前的和弦候选“dm”的最优和弦总最小开销dooptimizechordtotalminimalcost[2][0]如“dm”的圆形标记的内部所示那样被计算为0.5。此外,作为对于当前的和弦候选“dm”的紧前最优和弦路径ioptimizechordrouteprev[2][0],如作为向“dm”的圆形标记输入的粗线箭头所表示的那样被设定紧前的和弦候选“am”。

关于当前的节拍时间ichordidx=2且候选号码icurchord=1(第2候选)的情况下的和弦候选“dsus4”也执行同样的计算。当前的和弦候选“dsus4”的最优和弦总最小开销dooptimizechordtotalminimalcost[2][1]如“dsus4”的圆形标记的内部所示那样被计算为0.5。此外,作为对于当前的和弦候选“dsus4”的紧前最优和弦路径ioptimizechordrouteprev[2][1],如作为向“dsus4”的圆形标记输入的粗线箭头所表示的那样被设定紧前的和弦候选“am”。

接着,当前的节拍时间再前进1个而成为ichordidx=3,在候选号码icurchord=0(第1候选)的情况下,作为当前的和弦候选而得到“g7”。在此情况下,在当前的紧前的节拍时间iprevchordidx=2中,从候选号码iprevchord=0(第1候选)的紧前的和弦候选“dm”向当前的和弦候选“g7”的连结开销docost通过图18的流程图的算法被计算为0.0。此外,从候选号码iprevchord=1(第2候选)的紧前的和弦候选“dsus4”向当前的和弦候选“g7”的连结开销docost通过图18的流程图的算法被计算为1.0。紧前的和弦候选“dm”及“dsus4”的各最优和弦总最小开销dooptimizechordtotalminimalcost[2][0/1]都是0.5。因而,从紧前的和弦候选“dm”向当前的和弦候选“g7”的修正后的开销docost的值成为0.5+0.0=0.5。同样,从紧前的和弦候选“dsus4”向当前的和弦候选“g7”的修正后的开销docost的值成为0.5+1.0=1.5。因而,当前的和弦候选“g7”的最优和弦总最小开销dooptimizechordtotalminimalcost[3][0]如“g7”的圆形标记的内部所示那样被计算为0.5。此外,作为对于当前的和弦候选“g7”的紧前最优和弦路径ioptimizechordrouteprev[3][0],如作为向“g7”的圆形标记输入的粗线箭头所表示的那样被设定紧前的和弦候选“dm”。

关于当前的节拍时间ichordidx=3且候选号码icurchord=1(第2候选)的情况下的和弦候选“bdim”也执行同样的计算。当前的和弦候选“bdim”的最优和弦总最小开销dooptimizechordtotalminimalcost[3][1]如“bdim”的圆形标记的内部所示那样被计算为1.0。此外,作为对于当前的和弦候选“bdim”的紧前最优和弦路径ioptimizechordrouteprev[3][1],如作为向“bdim”的圆形标记输入的粗线箭头所表示的那样被设定紧前的和弦候选“dm”。

接着,对图5的步骤s507的路径确定处理进行说明。在路径确定处理中,cpu101从末尾的节拍时间反向朝向开头的节拍时间,探寻关于每个节拍时间ichordidx及每个候选号码icurchord的和弦候选而计算出的最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord]较小的值,并沿着紧前最优和弦路径ioptimizechordrouteprev[ichordidx][icurchord],按每个节拍时间选择和弦候选,将所选择的和弦候选置换为第1候选。

在图16b的例子中,首先,在末尾的节拍时间ichordidx=3中,选择最优和弦总最小开销的值是最小值0.5的候选号码icurchord=0的和弦候选“g7”,作为ichordidx=3的第1候选。接着,通过参照对ichordidx=3且成为第1候选的和弦候选“g7”设定的紧前最优和弦路径ioptimizechordrouteprev[3][0],在前1个节拍时间ichordidx=2中,选择候选号码icurchord=0的和弦候选“dm”,作为ichordidx=2的第1候选。接着,通过参照对ichordidx=2且成为第1候选的和弦候选“dm”设定的紧前最优和弦路径ioptimizechordrouteprev[2][0],在前1个的节拍时间ichordidx=1中,选择候选号码icurchord=0的和弦候选“am”,作为ichordidx=1的第1候选。最后,通过参照对ichordidx=1且成为第1候选的和弦候选“am”设定的紧前最优和弦路径ioptimizechordrouteprev[1][0],在前1个的开头的节拍时间ichordidx=0中,选择候选号码icurchord=1的和弦候选“cm”,作为ichordidx=0的第1候选。以上的路径确定处理的结果是,从乐曲的开头的节拍时间起依次将各节拍时间的第1候选的和弦候选“cm”、“am”、“dm”及“g7”选择为最优的和弦行进,向显示机构105等显示。

图19是表示图5的步骤s507的路径确定处理的详细例的流程图,实现上述的动作。cpu101首先对于全部的节拍时间,从末尾的节拍时间朝向开头的节拍时间,一边将当前的节拍时间ichordidx递增一边进行指定,按每个ichordidx,反复执行从步骤s1902到s1906的一系列处理(步骤s1901)。

在从步骤s1902到s1906的一系列反复处理中,cpu101首先判定是否有末端和弦,即是否指定了末尾的节拍时间(步骤s1902)。

接着,关于在步骤s1901中指定的末尾的节拍时间ichordidx,cpu101关于全部的和弦候选一边指定末尾的节拍时间的候选号码icurchord一边反复执行从步骤s1904到s1906的一系列处理(步骤s1903)。该处理如在图16b中说明的那样,是在末尾的节拍时间ichordidx中探索最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord]的值最小的候选号码icurchord的处理。

在从步骤s1904到s1906的一系列反复处理中,cpu101判定与在步骤s1901中指定的ichordidx和在步骤s1903中指定的icurchord对应的最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord]的值是否是存储在ram103中的作为变量的开销最小值domin以下(步骤s1904)。开销最小值domin的值在图19的流程图的处理的开始时被初始设定为较大的值。

如果步骤s1904的判定为否,则cpu101向步骤s1903的处理返回,将icurchord递增,向针对下个候选号码icurchord的处理转移。

如果步骤s1904的判定为是,则cpu101向开销最小值domin保存与在步骤s1901中指定的ichordidx和在步骤s1903中指定的icurchord对应的最优和弦总最小开销dooptimizechordtotalminimalcost[ichordidx][icurchord]的值(步骤s1905)。

并且,cpu101向存储在ram103中的作为变量的最优和弦候选号码ichordbest保存在步骤s1903中当前指定的icurchord的值(步骤s1906)。然后,cpu101向步骤s1903的处理返回,将icurchord递增,向针对下个候选号码icurchord的处理转移。

如以上这样,当从步骤s1904到s1906的一系列处理的执行对于被指定为icurchord的全部候选号码完成,则cpu101向步骤s1908的处理转移。在该状态下,在最优和弦候选号码ichordbest中,得到在末尾的节拍时间中最优和弦总最小开销为最小的和弦候选的候选号码。在步骤s1908中,cpu101将与当前的末尾的节拍时间ichordidx和最优和弦候选号码ichordbest对应的和弦信息的和弦根音chordprog[ichordidx][ichordbest].iroot的值向当前的末尾的节拍时间ichordidx的第1候选的和弦信息的和弦根音chordprog[ichordidx][0].iroot保存(步骤s1908)。

接着,cpu101将与当前的末尾的节拍时间ichordidx和最优和弦候选号码ichordbest对应的和弦信息的和弦类型chordprog[ichordidx][ichordbest].itype的值向当前的末尾的节拍时间ichordidx的第1候选的和弦信息的和弦类型chordprog[ichordidx][0].itype保存(步骤s1909)。

然后,cpu101将与当前的末尾的节拍时间ichordidx和最优和弦候选号码ichordbest对应的和弦候选的紧前最优和弦路径ioptimizechordrouteprev[ichordidx][ichordbest]的值向紧前的节拍时间的候选号码iprevchord保存(步骤s1910)。并且,cpu101向步骤s1901的处理返回,将ichordidx递增,向与前1个节拍时间ichordidx对应的处理转移。

当从末尾成为之前的节拍时间,则步骤s1902的判定成为否。结果,cpu101将在步骤s1910中保存在紧前的节拍时间的候选号码iprevchord中的紧前最优和弦路径向最优和弦候选号码ichordbest保存(步骤s1907)。

接着,cpu101通过执行上述的步骤s1908、s1909,将与当前的节拍时间ichordidx和最优和弦候选号码ichordbest对应的和弦信息的和弦根音chordprog[ichordidx][ichordbest].iroot和和弦类型chordprog[ichordidx][ichordbest].itype的各值向当前的节拍时间ichordidx的第1候选的和弦信息的和弦根音chordprog[ichordidx][0].iroot和和弦类型chordprog[ichordidx][0].itype保存。

然后,cpu101将与当前的末尾的节拍时间ichordidx和最优和弦候选号码ichordbest对应的和弦候选的紧前最优和弦路径ioptimizechordrouteprev[ichordidx][ichordbest]的值向紧前的节拍时间的候选号码iprevchord保存(步骤s1910)。并且,cpu101再次向步骤s1901的处理返回,将ichordidx递增,向与前1个的节拍时间ichordidx对应的处理转移。

通过按每个节拍时间ichordidx反复执行以上的处理,作为各节拍时间ichordidx的第1候选的和弦信息的和弦根音chordprog[ichordidx][0].iroot和和弦类型chordprog[ichordidx][0].itype,能够输出最优的和弦行进。

在以上说明的图5的步骤s506的最小开销计算处理中,由于使用和弦的连结规则,所以当得到多个候选时,能够得到更自然的和弦判定结果。

根据以上说明的实施方式,能够根据连转调都能适当地判定的调判定的结果进行更适当的和弦判定。

在以上说明的实施方式中,作为乐曲数据例而对根据midi音序数据的和弦判定进行了说明,但也可以根据音乐声响信号进行和弦判定。在此情况下,通过进行高速傅立叶变换等声响分析来求出音级功率。

此外,在上述实施方式中,将进行各种控制的控制部设为由cpu(通用处理器)执行存储在rom(存储器)中的程序的结构,但也可以将多个控制分别分割为专用的处理器而构成。在此情况下,各个专用处理器既可以由能够执行任意的程序的通用的处理器(电子电路)和存储有对各个控制特定化的控制程序的存储器构成,或者也可以由对各个控制特定化的专用的电子电路构成。

例如,以下表示在构成为由cpu(通用处理器)执行存储在rom(存储器)中的程序的结构的情况下cpu执行的处理或程序的一例。

(结构例1)

构成为,处理器使用存储在存储器中的有关乐曲的数据执行以下的处理:基于将上述乐曲以第1长度划分出的第1区间的构成音来推测第1调;基于将上述乐曲以与上述第1长度不同的长度的第2长度划分出的、与上述第1区间至少部分地重叠的第2区间的构成音来推测第2调;通过将上述推测出的上述第1调及上述第2调进行比较,判定上述乐曲的上述第1区间的调或和弦。

(结构例2)

在上述结构例中,还构成为,上述处理器执行以下的处理:通过将上述推测出的上述第1调及上述第2调进行比较来决定适当的调;基于上述适当的调来判定上述乐曲的上述第1区间的和弦。

(结构例3)

在上述结构例中,还构成为,上述处理器执行以下处理:按将上述乐曲的小节划分的每个节拍,判定上述节拍的构成音,基于上述构成音判定上述节拍的和弦。

(结构例4)

在上述结构例中,还构成为,上述处理器执行以下处理:在上述第1区间、上述第2区间或每个上述节拍的构成音的判定中,按照在上述第1区间、上述第2区间或上述节拍的期间内音符开启的上述乐曲的每个乐音,将基于上述乐音的速率和上述期间内的发音时长而决定的功率信息值向与上述乐音的音高对应的音级进行累计,由此计算上述第1区间、上述第2区间或上述节拍中的每个上述音级的功率信息累计值。

(结构例5)

在上述结构例中,还构成为,上述处理器执行以下处理:按照上述第1区间、上述第2区间或每个节拍,与上述第1调、上述第2调或和弦的候选对应地,在上述音级分别与上述第1调、上述第2调的候选的音阶音或和弦的候选的构成音一致的情况下将对上述音级计算出的上述功率信息累计值向第1功率评价值进行累计,在不一致的情况下将对上述音级计算出的上述功率信息累计值向第2功率评价值进行累计,将按照上述第1调、上述第2调或和弦的每个候选计算出的上述第1功率评价值及上述第2功率评价值进行比较,由此判定上述第1区间、上述第2区间或节拍的上述第1调、上述第2调或上述和弦。

(结构例6)

在上述结构例中,还构成为,上述第1区间的区间长是1小节的长度,上述第2区间的区间长是1小节的倍数;上述处理器执行以下处理:按在上述第1区间和上述第2区间中重叠的每个小节,将按每个上述小节判定出的上述第1调及上述第2调进行比较,由此决定与上述小节对应的上述适当的调。

(结构例7)

在上述结构例中,还构成为,上述处理器执行以下处理:一边将区间开始位置每次错开1小节,一边用上述第1区间的区间长或上述第2区间的区间长将乐曲划分而决定上述第1区间或上述第2区间。

(结构例8)

在上述结构例中,还构成为,上述处理器执行将上述判定出的和弦向显示机构显示的处理。

(结构例9)

一种和弦判定装置,判定乐曲的和弦,构成为,具备存储器和处理器;上述处理器,使用存储在上述存储器中的数据,基于将上述乐曲划分为多个的各区间的构成音来推测各区间的调;在上述推测出的各区间中有调的变化的情况下,基于上述调的变化,判定上述乐曲数据的上述多个区间的和弦。

(结构例10)

在上述结构例中,还构成为,上述处理器,基于将上述乐曲以第1长度划分出的第1区间的构成音来推测第1调;基于将上述乐曲以与上述第1长度不同的长度的第2长度划分出的、与上述第1区间至少部分地重叠的第2区间的构成音来推测第2调;通过将上述推测出的上述第1调及上述第2调进行比较,判定上述乐曲的上述第1区间的调;基于上述判定出的调,判定上述乐曲的上述第1区间的和弦。

此外,在由多个专用处理器构成的情况下,分割为几个专用处理器、将多个控制怎样向各专用处理器分配也可以任意地决定。以下,表示将各种控制分割给多个专用处理器而构成的情况下的一例。

(结构例11)

构成为,具备:调推测处理器(调推测机构),基于将乐曲以第1长度划分出的第1区间的构成音来推测第1调,基于将上述乐曲以与上述第1长度不同的长度的第2长度划分出的、与上述第1区间至少部分地重叠的第2区间的构成音来推测第2调;调决定处理器(调决定机构),通过将上述推测出的上述第1调及上述第2调进行比较,决定最优的调;和弦判定处理器(和弦判定机构),基于上述最优的调,判定上述乐曲的上述第1区间的和弦。

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