首页> 中国专利> 节奏检测装置及节奏检测用计算机程序

节奏检测装置及节奏检测用计算机程序

摘要

本发明提供节奏检测装置及节奏检测用计算机程序,可无差错地检测出平均拍子间隔和拍子位置。其中,一边演奏拍子检测波形的开头,一边使用敲击检测部(104),由用户敲击拍子位置,在由抖动计算部(107)判定为敲击的抖动为一定范围内时,从由节奏候选检测部(102)检测出的拍子间隔的候选,选择与上述敲击节奏数值上接近的拍子间隔,并且,将稳定时的敲击位置设为拍子检测的开头拍子位置,所以仅通过从用户接收几拍的敲击,便可准确地进行整个曲子的拍子检测。

著录项

  • 公开/公告号CN101123086A

    专利类型发明专利

  • 公开/公告日2008-02-13

    原文格式PDF

  • 申请/专利权人 株式会社河合乐器制作所;

    申请/专利号CN200710140337.2

  • 发明设计人 澄田錬;

    申请日2007-08-09

  • 分类号G10H1/00;

  • 代理机构北京三友知识产权代理有限公司;

  • 代理人黄纶伟

  • 地址 日本静冈县

  • 入库时间 2023-12-17 19:45:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-10-01

    未缴年费专利权终止 IPC(主分类):G10H1/00 授权公告日:20111221 终止日期:20130809 申请日:20070809

    专利权的终止

  • 2011-12-21

    授权

    授权

  • 2009-07-29

    实质审查的生效

    实质审查的生效

  • 2008-02-13

    公开

    公开

说明书

技术领域

本发明涉及节奏检测装置及节奏检测用计算机程序。

背景技术

作为从音乐CD等混合有多个乐器声音的音乐声音信号(音频信号)检测出拍子位置的节奏检测装置,本申请人已提出了日本特愿2006-1194专利申请。

在该申请的结构中,作为拍子位置的检测方法,以规定时间间隔(以下,称为帧)对输入波形进行FFT运算,根据所求出的强度谱求出各音阶音符的强度,计算出该各音阶音符的强度在每个帧的增量值,在全体音阶音符中对该增量值进行合计来求出每个帧的全部音符的变化程度,计算出该每个帧的全部音符的变化程度的自相关性来求出周期性,根据该自相关性的值为最大的帧间隔来求出平均拍子间隔(所谓的节奏)。

并且,在求出了平均拍子间隔后,在波形的开头部分的帧(例如,该平均拍子间隔的大约10倍长度的帧)中,逐个错开开始帧来累积在离开了拍子间隔的帧位置中的全部音符的变化程度,并且将该累积值为最大的开始帧设为开头拍子位置。

但是,在该方法中,有时会错误地将拍子间隔确定为曲子的一半或二倍节奏,或者在弱拍中存在重音的曲子中,拍子位置成为弱拍。

发明内容

本发明是鉴于上述问题而提出的,其目的在于提供可无差错地检测出平均拍子间隔(所谓的节奏)和拍子位置的节奏检测装置及节奏检测用计算机程序。

本发明的节奏检测装置的特征在于,其具有:

信号输入单元,其输入声音信号;

音阶音符强度检测单元,其根据所输入的声音信号,针对每个规定的帧,进行FFT运算,根据所求出的强度谱求出每个帧的各音阶音符的强度;

节奏候选检测单元,其对全部的音阶音符合计该每个规定的帧的各音阶音符强度的增量值,求出表示每个帧的全部音符的变化程度的强度增量值的合计,根据表示该每个帧的全部音符的变化程度的强度增量值的合计,求出平均的拍子间隔,检测出节奏的候选;

节拍输入单元,其从用户接收节拍的输入;

敲击检测单元,其检测用户的敲击输入;

记录单元,其记录敲击间隔、进行敲击的时间、和各敲击的拍子数值;

敲击节奏计算单元,其取得敲击间隔的移动平均,计算出节奏;

变动计算单元,其计算出最近的每个移动平均的敲击节奏的变动;

敲击节奏输出单元,在上述变动为一定范围内时,该敲击节奏输出单元输出敲击节奏、上述敲击的最后的时间、和此时的拍子数值;

节奏确定单元,其根据从上述敲击节奏输出单元输出的敲击节奏,从由该节奏候选检测单元检测出的拍子间隔的候选中,选择与上述敲击节奏数值上接近的拍子间隔;

第1拍位置输出单元,其根据由上述变动计算单元判定为敲击变动在一定范围内时的敲击的拍子数值,输出与其最近的第1拍的位置;

拍子位置确定单元,其相同地将由上述变动计算单元判定为敲击变动在一定范围内时的敲击的位置作为开头拍子位置,根据由节奏确定单元确定的节奏来确定上述开头拍子位置的之后和之前的各拍子位置;以及

小节检测单元,其根据从上述第1拍位置输出单元输出的第1拍的位置和从拍子位置确定单元输出的各拍子位置来检测出小节线位置。

根据上述结构,一边演奏拍子检测波形的开头附近,一边使用敲击检测单元(例如,个人电脑的键盘等),由用户对拍子位置进行敲击,在用户敲击的拍子间隔经过几拍后变稳定时(在判定为敲击的变动在一定范围内时),将该间隔采用为拍子间隔(从由节奏候选检测单元检测出的拍子间隔的候选中,选择与上述敲击节奏的数值接近的拍子间隔),并且,将稳定时的敲击位置设为拍子检测的开头拍子位置,所以仅通过从用户接收几拍的敲击,便可更准确地进行整个曲子的拍子检测。

即,让用户一边收听播放音一边对拍子位置进行敲击,由此提取出拍子间隔和拍子检测的开头拍子位置,从而提高节奏检测精度。

此时,在取得拍子间隔的平均的处理中,可以通过对近的一方进行加重的移动平均来实现计算处理。并且,关于由用户敲击的拍子间隔(节奏)是否稳定,优选为,如果从新的一拍开始的N次(例如4次)的节奏变动(从平均的偏移)为P%(例如5%)以内,则判定为稳定,在该稳定的状态连续持续M次(例如4次)时,确定节奏,结束用户的敲击。

发明的第六方面的结构为了使计算机执行发明第一方面记载的结构,规定了可由该计算机执行的程序本身。即,作为用于解决上述课题的结构,该程序可被读入到该计算机中来执行且通过利用计算机的结构来实现上述各单元。此时,所谓计算机是指,除了包含中央运算处理装置的结构的通用计算机的结构之外,还包括用于面向特定处理的专用设备等,只要是伴随有中央运算处理装置的结构的结构,则不特别进行限定。

当由该计算机读出用于实现上述各单元的程序时,达成与在发明第一方面中规定的各功能实现单元相同的功能实现单元。

发明第六方面的更具体的结构为,一种节奏检测用计算机程序,其特征在于,通过由计算机读取该节奏检测用计算机程序并执行,从而使该计算机作为如下的单元而发挥功能:

信号输入单元,其输入声音信号;

音阶音符强度检测单元,其根据所输入的声音信号,针对每个规定的帧,进行FFT运算,根据所求出的强度谱求出每个帧的各音阶音符的强度;

节奏候选检测单元,其对全部的音阶音符合计该每个规定的帧的各音阶音符强度的增量值,求出表示每个帧的全部音符的变化程度的强度增量值的合计,根据该表示该每个帧的全部音符的变化程度的强度增量值的合计,求出平均的拍子间隔,检测出节奏的候选;

节拍输入单元,其从用户接收节拍的输入;

敲击检测单元,其检测用户的敲击输入;

记录单元,其记录敲击间隔、进行敲击的时间、和各敲击的拍子数值;

敲击节奏计算单元,其取得敲击间隔的移动平均,计算出节奏;

变动计算单元,其计算出最近的每个移动平均的敲击节奏的变动;

敲击节奏输出单元,在上述变动为一定范围内时,该敲击节奏输出单元输出敲击节奏、上述敲击的最后的时间、和此时的拍子数值;

节奏确定单元,其根据从上述敲击节奏输出单元输出的敲击节奏,从由该节奏候选检测单元检测出的拍子间隔的候选中,选择与上述敲击节奏的数值接近的拍子间隔;

第1拍位置输出单元,其根据由上述变动计算单元判定为敲击变动在一定范围内时的敲击的拍子数值,输出与其最近的第1拍的位置;

拍子位置确定单元,其相同地将由上述变动计算单元判定为敲击变动在一定范围内时的敲击的位置作为开头拍子位置,根据由节奏确定单元确定的节奏来确定上述开头拍子位置的之后和之前的各拍子位置;以及

小节检测单元,其根据从上述第1拍位置输出单元输出的第1拍的位置和从拍子位置确定单元输出的各拍子位置来检测出小节线位置。

根据以上那样的程序的结构,使用已有的硬件资源来使用该程序,从而可使用已有的硬件来容易地实现作为新应用的本发明的各装置。

在该程序的形式中,利用通信等,可容易地使用、发布、销售该程序。并且,通过使用已有的硬件资源来使用该程序,从而可使用已有的硬件来容易地实现作为新应用的本发明的装置。

另外,发明第六方面记载的各功能实现单元中的一部分功能是通过组装到计算机内的功能(既可以是以硬件方式组装到计算机中的功能,也可以是通过组装到该计算机中的操作系统和其他应用程序等实现的功能)来实现的,在上述程序中也可以包含调用或链接到可由该计算机达成的功能的命令。

这是因为,通过例如由操作系统等达成的功能中的一部分来代替执行本发明第1方面规定的各功能实现单元的一部分,并不是用于实现该功能的程序或模块等直接存在,如果调用或者链接到实现这些功能的操作系统的功能的一部分,则实质上成为相同的结构。

根据本发明的第一方面~第六方面记载的节奏检测装置及节奏检测用计算机程序,可得到可无差错地检测出平均拍子间隔(所谓的节奏)和拍子位置的良好的效果。

附图说明

图1是示出应用本发明的优选实施方式的个人计算机结构的结构概要图。

图2是本发明的实施例的节奏检测装置的整体框图。

图3是示出曲子的拍子的输入画面结构的说明图。

图4是音阶音符强度检测部101的结构的框图。

图5是示出节奏候选检测部102的处理流程的流程图。

图6是示出某曲子的一部分的波形和各音阶音符的强度、各音阶音符的强度增量值的合计的图的图表。

图7是示出自相关性计算的概念的说明图。

图8是示出到图5的步骤S106中的节奏确定为止的处理流程的流程图。

图9是示出图8的步骤S212的基于移动平均的节奏计算处理的处理步骤的流程图。

图10同样是示出图8的步骤S216的节奏变动计算处理的处理步骤的流程图。

图11是示出在最初的拍子位置确定后确定此后的拍子位置的方法的说明图。

图12是示出根据s值变化的系数k的分布状态的图表。

图13是示出第2拍及第2拍以后的拍子位置的确定方法的说明图。

图14是示出拍子检测结果的确认画面的例子的画面显示图。

图15是使用本实施例2的节奏检测结构的和弦检测装置的整体框图。

图16是示出曲子的相同部分的和弦检测用音阶音符强度检测部300输出的各帧的音阶音符的强度的图表。

图17是示出基于基音检测部301的基音检测结果的显示例的图表。

图18是示出小节前半部分以及小节后半部分的各音阶音符的强度状态的各音阶音符强度示意图。

图19是示出和弦检测结果的确认画面的例子的画面显示图。

图20是示出第2小节分割确定部303中的各音阶音符强度的欧几里

得距离的计算方法的概要的说明图。

标号说明

10:系统总线;11:CPU;12:ROM;13:RAM;14:显示器;15:I/O接口;16:键盘;17:声音系统;18:CD-ROM驱动器;19:硬盘驱动器;20:CD-ROM;100:输入部;101:拍子检测用音阶音符强度检测部;101a:波形预处理部;101b:FFT运算部;101c:强度检测部;102:节奏候选检测部;103:节拍输入部;104:敲击检测部;105:记录部;106:敲击节奏计算部;107:变动计算部;108:敲击节奏输出部;109:第1拍位置输出部;110:节奏确定部;111:拍子位置确定部;112:小节检测部;200、201、202、203、204、205:缓冲器;300:和弦检测用音阶音符强度检测部;301:基音检测部;302:第1小节分割确定部;303:第2小节分割确定部;304:和弦名确定部。

具体实施方式

以下,参照附图来说明本发明的实施方式。

(实施例1)

图1示出应用本发明的优选实施方式的个人计算机的结构。在图1的结构中,在向后述的CD-ROM驱动器18放入CD-ROM 20而读取该CD-ROM 20来执行的情况下,在该CD-ROM 20中存储有可将该个人计算机利用为本发明的节奏检测装置的程序。因此,由上述CD-ROM驱动器18读取该CD-ROM 20来执行,从而在个人计算机上实现本发明的节奏检测装置。

关于图1所示的个人计算机的电路概要,经由系统总线10连接了CPU 11、ROM 12、RAM 13、通过图像控制部(未图示)连接的显示器14、I/O接口15、以及硬盘驱动器19,经由该系统总线10进行各设备的控制信号、数据的输入输出。

CPU11是根据由CD-ROM驱动器18从上述CD-ROM 20读入而存储在硬盘驱动器19或RAM 13中的上述程序,进行节奏检测装置整体的控制的中央运算处理装置。并且,由执行上述程序的该CPU11构成后述的音阶音符强度检测部101、节奏候选检测部102、敲击节奏计算部106、变动计算部107、敲击节奏输出部108、第1拍位置输出部109、节奏确定部110、拍子位置确定部111和小节检测部112。

ROM 12是存储有本个人计算机的BIOS等的存储区域。

RAM 13除了被使用为本程序的存储区域之外,还被使用为工作区、各种系数、参数、后述的训练标志和存储标志等的临时存储区域(例如,临时存储后述的各变量)等。

显示器14由根据CPU 11的指令来进行所需的图像处理的图像控制部(未图示)控制,显示出该图像处理结果。

I/O接口16上连接经由该I/O接口16连接到系统总线10上的键盘16、声音系统17以及CD-ROM驱动器18,在这些设备和上述连接到系统总线10上的设备之间,进行控制信号和数据的输入输出。

上述设备中的键盘16构成后述的敲击检测部104。

并且,CD-ROM驱动器18从存储有节奏检测用程序的CD-ROM20,读出该程序和数据等。该程序和数据等被存储在硬盘驱动器19中,并且,成为主程序的程序被存储在上述RAM 13中,并由CPU11来执行。

如上所述,硬盘驱动器19通过读入上述节奏检测用程序以及执行该程序,来存储该程序本身和所需的数据等。在该硬盘驱动器中存储的数据有与从声音系统17或CD-ROM驱动器18输入的数据相同的演奏/歌唱数据等。

通过使个人计算机(RAM 13以及硬盘驱动器19)读入本实施方式的节奏检测用程序,并(由CPU 11)执行,从而成为如图2所示的节奏检测装置的结构。

图2是作为本发明的实施例结构的节奏检测装置的整体框图。从图2可知,本节奏检测装置的结构具有:输入部100,其输入声音信号;音阶音符强度检测部101,其根据所输入的声音信号,以规定的时间间隔(帧)进行FFT运算,根据所求出的强度谱求出每个帧的各音阶音符的强度;节奏候选检测部102,其对所有的音阶音符合计该每个帧的各音阶音符强度的增量值,求出表示每个帧的全部音符的变化程度的强度增量值的合计,根据表示该每个帧的全部音符的变化程度的强度增量值的合计,检测出平均的拍子间隔和各拍子的位置;节拍输入部103,其从用户接收拍子的输入;敲击检测部104,其检测用户的敲击输入;记录部105,其记录敲击间隔、进行敲击的时间、和各敲击的拍子数值;敲击节奏计算部106,其取得敲击间隔的移动平均,计算出节奏;变动计算部107,其计算出最近的每个移动平均的敲击节奏的变动;敲击节奏输出部108,在上述变动为一定范围内时,该敲击节奏输出部108输出敲击节奏、上述敲击的最后的时间、和此时的拍子数值;节奏确定部110,其根据从该敲击节奏输出部108输出的敲击节奏,从由该节奏候选检测部102检测出的拍子间隔的候选中,选择与上述敲击节奏数值上接近的拍子间隔;第1拍位置输出部109,其根据由上述变动计算部107判定为敲击变动在一定范围内时的敲击的拍子数值,输出与其最近的第1拍的位置;拍子位置确定部111,其同样将由上述变动计算部107判定为敲击的变动在一定范围内时的敲击的位置作为开头拍子位置,根据由节奏确定部110确定的节奏来确定之后和之前的各拍子位置;以及小节检测部112,其根据从上述第1拍位置输出部109输出的第1拍的位置和从拍子位置确定部111输出的各拍子位置来检测出小节线位置。

当使个人计算机(RAM 13以及硬盘驱动器19)读入上述节奏检测用程序,并(使CPU 11)执行时,最初,通过节拍输入部103显示图3所示的画面,向用户请求输入想要检测节奏的曲子的拍子,从而输入节拍。在图3中,示出了选择4分之几拍子的状态。

并且,输入音乐声音信号的上述输入部100是用于输入进行节奏检测的对象的音乐声音信号的部分,也可以由声音系统17利用A/D转换器(未图示)将从麦克风等设备输入的模拟信号转换为数字信号,在由CD-ROM驱动器18读入的音乐CD等数字化的音乐数据的情况下,也可以直接作为文件取入(抽出,ripping),指定该文件来打开(此时,也可以临时存储在硬盘驱动器19中)。在这样输入的数字信号为立体声时,为简化此后的处理而转换为单声道。

该数字信号被输入到音阶音符强度检测部101。该音阶音符强度检测部由图4的各部构成。

其中,波形预处理部101a构成为将音乐声音信号中来自上述输入部100的声音信号下采样(Down sampling)为适合于今后处理的采样频率。

下采样率是根据用于拍子检测的乐器的音域来确定的。即,为了使铙钹、镲等的高音域的节奏乐器的演奏声音反映到拍子检测上,需要使下采样之后的采样频率为高频,但在主要从基音和大鼓、小鼓等的乐器声音和中音域的乐器声音中进行拍子检测时,无需使下采样之后的采样频率很高。

例如设检测出的最高音为A6(C4为中央的“Do”)时,由于A6的基本频率为大约1760Hz(A4=440Hz时),所以下采样之后的采样频率中奈奎斯特频率(Nyquist frequency)大于等于1760Hz,只要大于等于3520Hz即可。由此,当原本的采样频率为44.1kHz(音乐CD)的情况下,下采样率为1/12左右即可。此时,下采样之后的采样频率为3675Hz。

关于下采样处理,通常在通过了使作为下采样之后的采样频率的一半的频率的奈奎斯特频率(此例中为1837.5Hz)以上的分量截止的低通滤波器之后,通过跳读数据(本例中为放弃波形样本的12个中的11个)来执行。

这样进行下采样处理的目的在于,在其后的FFT运算中,通过降低同样为获得频率分解能所需的FFT点数,来减少FFT运算时间。

而且,如音乐CD那样已通过固定的采样频率对声源进行了采样的情况下,需要这种下采样,但在音乐声音信号的输入部100通过A/D变换器将从话筒等设备输入的模拟信号变换为数字信号的情况下,当然可以通过将A/D变换器的采样频率设定为下采样之后的采样频率,从而可以省略该波形预处理部。

当这样的波形预处理部101a的下采样结束之后,以规定的时间间隔(帧)来通过FFT运算部101b对波形预处理部的输出信号进行FFT(快速傅里叶变换)。

设FFT参数(FFT点数和FFT窗口的移位量)为适合于拍子检测的值。即,如果为了提高频率分解能而增大FFT点数,则会增大FFT窗口的尺寸,会用更长时间进行1次FFT,时间分解能会降低,对这种FFT特性必须加以考虑(即,优选在拍子检测时牺牲频率分解能来提高时间分解能)。虽然存在不使用与窗口尺寸相同长度的波形,而通过仅在窗口的一部分上设置波形数据,且对剩余部分嵌入0,从而即使增大了FFT点数也不会使时间分解能变差的方法,但为了正确检测低音侧的强度,需要某种程度的波形采样数。

考虑上述情况,本实施例中,设定为FFT点数是512、窗口的移位是32采样(窗口的重叠是15/16)、没有嵌入0。如果用这种设定来进行FFT运算,则时间分解能为大约8.7ms、频率分解能为大约7.2Hz。如果考虑在四分音符=300的节奏的乐曲中,32分音符的长度为25ms的情况,则可知时间分解能为大约8.7ms这个值是足够的。

这样按照每帧进行FFT运算,根据分别对其实数部和虚数部的平方的值的和的平方根来计算强度,将该结果发送给强度检测部101c。

在强度检测部101c中,根据在FFT运算部101b计算出的强度谱来计算各音阶音符强度。由于FFT只是对将采样频率除以FFT点数得到的值的整数倍的频率的强度进行计算,所以为了根据该强度谱来检测各音阶音符强度,需要进行如下处理。即,对于计算音阶音符的所有音符(C1至A6),将与该各音符的基本频率的上下50森特(cent)的范围内(100森特为半音符)的频率相当的强度谱内具有最大强度的频谱的强度作为该音阶音符的强度。

当对所有的音阶音符检测完强度时,将其保存在缓冲器200内,使波形的读取位置推进规定的时间间隔(1帧;之前的例子中为32个样本),重复FFT运算部101b和强度检测部101c的处理直到波形结尾处。

由此,在音乐声音信号中输入到输入部100的声音信号中的每隔规定时间的各音阶音符强度被保存在缓冲器200中。

接下来,说明图2的节奏候选检测部102的结构。该节奏候选检测部102执行图5所示的处理流程。

节奏候选检测部102以音阶音符强度检测部输出的每帧的各音阶音符强度的变化为基础检测平均的拍子(拍)间隔(即节奏)和拍子位置。为此,节奏候选检测部102首先计算各音阶音符强度的增量值的合计(用所有的音阶音符来合计与之前帧的强度增量值所得的值。强度比前一帧减少的情况下加0)(步骤S100)。

即,当设帧时间t内的第i个音阶音符强度为Li(t)时,第i个音阶音符强度的增量值Laddi(t)如下式1所示,使用该Laddi(t),可通过下式2计算帧时间t内的各音阶音符强度的增量值合计L(t)。此处,T为音阶音符的总数。

(式1)

(式2)

<mrow><mi>L</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>T</mi><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>L</mi><mi>addi</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow>

该合计L(t)值表示每帧的整帧上的音符变化程度。该值在声音开始响起时急剧增大,同时鸣响的声音越多则为越大的值。由于音乐多在拍子位置处开始响起声音,所以该值为较大值的位置很有可能在拍子位置上。

作为例子,在图6中,示出某个乐曲的一部分的波形和各音阶音符强度、各音阶音符强度的增量值的合计的图。上段表示波形,中央以浓淡表示每帧的各音阶音符强度(下为低音、上为高音。该图中为从C1到A6的范围),下段表示每帧的各音阶音符强度的增量值的合计。该图的各音阶音符强度是从音阶音符强度检测部输出的,所以频率分解能为约7.2Hz,成为无法用G#2以下的一部分音阶音符计算强度的不齐状态,但由于此时目的在于检测拍子,所以即使无法测定低音的一部分音阶音符强度也不会成为问题。

如该图下段所示,各音阶音符强度的增量值的合计成为定期地具有峰值的形状。该定期的峰值的位置为拍子位置。

为了求出拍子位置,需要在节奏候选检测部102中首先求出该定期的峰值间隔、即平均的峰值间隔。平均的峰值间隔可以根据该各音阶音符强度的增量值的合计的自相关性来计算出来(图5;步骤S102)。

如果设某帧时间t中的各音阶音符强度的增量值的合计为L(t),则该自相关性φ(τ)可由下式3计算出来。

(式3)

<mrow><mi>&phi;</mi><mrow><mo>(</mo><mi>&tau;</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>N</mi><mo>-</mo><mi>&tau;</mi><mo>-</mo><mn>1</mn></mrow></munderover><mi>L</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>&CenterDot;</mo><mi>L</mi><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mi>&tau;</mi><mo>)</mo></mrow></mrow><mrow><mi>N</mi><mo>-</mo><mi>&tau;</mi></mrow></mfrac></mrow>

此处,N为总帧数,τ为时间延迟。

图7示出自相关性计算的示意图。如该图所示,当时间延迟τ为L(t)的峰值周期的整数倍时,φ(τ)成为较大的值。因此,如果对某范围的τ计算φ(τ)的最大值,则可以求出乐曲的节奏。

求得自相关性的τ的范围可以根据设想的乐曲的节奏范围而发生改变。例如如果用节拍记号来计算四分音符=30到300的范围,则计算自相关性的范围为从0.2秒到2秒。由时间(秒)向帧的变换式如下式4所示。

(式4)

虽然可以将该范围的自相关性φ(τ)为最大的τ作为拍子间隔,但由于未必在所有乐曲中自相关性为最大时的τ都为拍子间隔,所以根据自相关性为极大值时的τ来求出拍子间隔的候选(图5:步骤S104),如后述那样,由节奏确定部110根据在最近的每个移动平均的敲击节奏的变动在一定范围内时从敲击节奏输出部108输出的敲击节奏、上述敲击的最后的时间、和此时的拍子数值,从这些多个候选中确定与敲击节奏的数值接近的节奏(图5:步骤S106)。

图8示出到该步骤S106中的节奏确定为止的处理流程。

首先,初始化在RAM 13中设定的变量(步骤S200)。作为该变量,有进行敲击的次数(TapCt),上次进行敲击时的时刻(PrevTime:在该变量中通过Now()来取得当前时刻,此处输入从起动个人计算机起的时间ms)、当前拍子(CurBeat:4节拍时,取得0、1、2、3的值,在通过图8的步骤S230的闪光来使拍子数字发光时,对该数字进行+1来进行显示)、以及变动检查合格的次数(PassCt)等。将这些所有变量设为零。

用户一边收听所再现的音乐,一边敲击键盘16的空格键,从而该键盘16构成为敲击检测部104,从而利用该敲击检测部104来检查是否存在敲击(步骤S202)。在敲击不存在时(步骤S202:否),继续该检查。

相反,在存在敲击时(步骤S202:是),检查所敲击的次数(TapCt)是否大于零次(步骤S204)。在敲击次数(TapCt)为零次以下时(步骤S204:否),进行变量更新处理[将敲击次数(TapCt)递增,将上次敲击时刻(PrevTime)设为当前时刻Now()](步骤S228),使与敲击相匹配地在之中写有拍子数字的四边形发光(步骤S230),返回到上述步骤S202,重复以上处理。

相反,在敲击次数(TapCt)比零次大时(步骤S204:是),将敲击间隔[DeltaTime.ADD(Now()-Prevtime)]和时刻[Time.Add(CurPlayTime)]记录到记录部105(步骤S206)。此处,Deltatime表示从上次敲击的时刻到本次敲击的时刻为止的经过时间的数组。并且,CurPlayTime表示当前再现位置、距波形开头的时间(在取得该值来最终确定节奏时,将与第1拍相当的时间返回到程序)。进而,Time表示保存了CurPlayTime的数组。

然后,将拍子递增(步骤S208:CurBeat++)。此处,CurBeat一直递增到由节拍输入部103输入的节拍(BeatNume:拍子的分子)-1为止。

接下来,检查敲击次数[Delta Time.GetSize()]是否成为N(例如4次)以上(步骤S210)。在敲击次数[Delta Time.GetSize()]小于N时(步骤S210:否),进行变量更新处理[敲击次数(TapCt)递增,将上次敲击时刻(PrevTime)设为当前时刻Now()](步骤S228),与敲击相匹配地使之中写有拍子数字的四边形发光(步骤S230),返回到上述步骤S202,重复以上处理。

相反,在判定为敲击次数[DeltaTime.GetSize()]为N以上时(步骤S210:是),由敲击节奏计算部106按后述的图9所示的处理步骤计算出N次敲击间隔的移动平均,计算出敲击节奏值[Tempo:由BPM(Beats PerMeasure,每一次测量的拍子数)来表示。4分音符=120等](步骤S212)。

将该敲击节奏显示在显示器14上(步骤S214)。

进而,由变动计算部107以后述图10所示的处理步骤计算出最近N次的敲击节奏的变动(步骤S216)。

然后,检查敲击节奏的变动是否为P%以下(步骤S218)。在该敲击节奏的变动不为P%以下时(步骤S218:否),将变动检查合格次数(PassCt)设为零(步骤S222)。

相反,在敲击节奏的变动为P%以下时(步骤S218:是),将变动检查合格次数(PassCt)递增(步骤S220)。

之后,检查变动检查合格次数(PassCt)是否为M次以上(步骤S224)。在该变动检查合格次数(PassCt)不为M次以上时(步骤S224:否),与上述相同,进行变量更新处理[将敲击次数(TapCt)递增,将上次敲击时刻(PrevTime)设为当前时刻Now()](步骤S228),与敲击相匹配地使之中写有拍子数字的四边形发光(步骤S230),返回到上述步骤S202,重复以上处理。

相反,在变动检查合格次数(PassCt)为M次以上时(步骤S224:是),由敲击节奏输出部108输出敲击节奏,由节奏确定部110根据该敲击节奏,从上述节奏候选检测部102检测出的拍子间隔的候选中,选择与上述敲击节奏的数值接近的拍子间隔(步骤S226)。

当由节奏确定部110从由节奏候选检测部102检测出的拍子间隔的候选中选择出了与上述敲击节奏数值上接近的拍子间隔时,由拍子位置确定部111将敲击位置作为开头拍子位置,根据节奏确定部110选择的拍子间隔,确定开头拍子位置之后以及之前的各拍子位置。

根据以上处理,在确定出最初的拍子位置后,通过后述的方法,逐个确定此后的拍子位置(图5:步骤S108)。

图9是示出上述步骤S212的基于移动平均的节奏计算处理的处理步骤的流程图。

首先,进行初始化,即将对DeltaTime(从上次敲击的时刻到本次敲击的时刻为止的经过时间的数组)进行了每个拍子的加权后的值相加而得到的值(TimeSum)、计算平均节奏时的相除值(Deno)、以及用于对拍子进行计数的变量(Beat)设为零(步骤S300)。

检查用于对拍子进行计数的变量(Beat)是否比N次少(步骤S302)。在不比N次少时(步骤S302:否),即达到N次以上时,将TimeSum值除以Deno,计算出平均时间间隔(Avg),将60000除以该平均时间间隔(Avg),计算出平均节奏值[Temp:使用BMP(Beats Per Measure)来表示。4分音符=120等](步骤S312)。

相反,在用于对拍子进行计数的变量(Beat)比N次少时(步骤S302:是),即没有达到N次以上时,从目前为止计数出的敲击次数,减去用于对拍子进行计数的变量(Beat),进一步再减1,计算出表示DeltaTime的数组序号的临时变量T(步骤S304)。关于变量(Beat)的值,最近所敲击的拍子(Beat)成为零,以后成为直到N-1为止的值。T为当访问该各个拍子(Beat)中的DeltaTime数组时的索引。

检查该变量T是否比零小(步骤S306),在比零小时(步骤S306:是),将TimeSum值除以Deno,计算出平均时间间隔(Avg),将60000除以该平均时间间隔(Avg),计算出平均节奏值[Temp:使用BMP(BeatsPer Measure)来表示。4分音符=120等](步骤S312)。

相反,在不比零小时(步骤S306:否),对上述变量(Beat)中的DeltaTime进行加权后加到TimeSum上(步骤S308),递增用于对拍子进行计数的变量(Beat)(步骤S310),返回到上述步骤S302,重复以上处理。

图10是示出上述步骤S216的节奏变动计算处理的处理步骤的流程图。

首先,将节奏变动检查的标志Pass设为1(1时,表示节奏变动OK),将用于对拍子进行计数的变量(Beat)设为零(步骤S400)。

然后,检查用于对该拍子进行计数的变量(Beat)是否比N小(步骤S402)。

在用于对拍子进行计数的变量(Beat)不比N小时(步骤S402:否),结束节奏变动计算处理。

相反,在用于对拍子进行计数的变量(Beat)比N小时(步骤S402:是),计算出该变量(Beat)中的DeltaTime的数组序号T,计算出此时的拍子的变动(Percent)(步骤S404)。

检查表示相对于上述平均时间间隔变动了何种程度(%)的值(Percent)是否超过节奏变动的允许值P(例如7%)(步骤S406)。

在表示相对于平均时间间隔变动了何种程度(%)的值(Percent)超过节奏变动的允许值P时(步骤S406:是),将上述节奏变动检查的标志Pass设为零(步骤S410),结束处理。

相反,在该值(Percent)没有超过节奏变动的允许值P时(步骤S406:否),递增用于对上述拍子进行计数的变量(Beat)(步骤S408),返回到上述步骤S402,重复以上的处理。

敲击节奏输出部108在判定为上述变动为一定范围内时,输出敲击节奏、上述敲击的最后的时间、以及此时的拍子的数值。由此,由上述节奏确定部110从拍子间隔的候选中,选择与上述敲击的数值接近的拍子间隔,确定节奏。另一方面,拍子位置确定部111将在判定为敲击的变动为一定范围内时的敲击的位置作为开头拍子位置,进而根据节奏确定部110确定的节奏来确定之后以及之前的各拍子位置。

使用图11来说明如以上那样,在确定出开头拍子位置后逐个确定之后的拍子位置的方法。设为在图11的三角形的位置上观察到开头拍子。

将从该开头拍子位置离开拍子间隔τmax的位置设为假设的拍子位置,根据在其附近L(t)和M(t)最为相关的位置来确定第2个拍子位置。即,在将开头的拍子位置设为bo时,求出使以下式的r(s)为最大的s值。该式的s为从假设的拍子位置的偏移,设为下式5的范围的整数。F为变动的参数,为0.1左右的值是适当的,但在节奏变动大的曲子中,也可以设为更大的值。n可以是5左右。

k是根据s值变化的系数,例如为图12所示的正态分布。

(式5)

<mrow><mi>r</mi><mrow><mo>(</mo><mi>s</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mi>k</mi><mo>&CenterDot;</mo><mi>L</mi><mrow><mo>(</mo><msub><mi>b</mi><mn>0</mn></msub><mo>+</mo><msub><mi>&tau;</mi><mi>max</mi></msub><mo>&CenterDot;</mo><mi>j</mi><mo>+</mo><mi>s</mi><mo>)</mo></mrow><mrow><mo>(</mo><mo>-</mo><msub><mi>&tau;</mi><mi>max</mi></msub><mo>&CenterDot;</mo><mi>F</mi><mo>&le;</mo><mi>s</mi><mo>&le;</mo><msub><mi>&tau;</mi><mi>max</mi></msub><mo>&CenterDot;</mo><mi>F</mi><mo>)</mo></mrow></mrow>

在求出使r(s)成为最大的s值时,根据下式6来计算出第2拍子位置b1

(式6)

b1=b0max+s

之后,还可同样求出第3个以及其之后的拍子位置。

在节奏几乎不变化的曲子中,可以通过该方法求出拍子位置直到曲子的末尾,但在实际的演奏中,经常出现节奏多少会产生变动、或部分地逐渐变慢的情况。

因此,考虑出如下的方法,以便也可以应对这些节奏的变动。

即,如图13所示那样,使图11的函数M(t)变化。

1)在以往方法中,在如图所示那样将各脉冲的间隔设为τ1、τ2、τ3、τ4时,为

τ1=τ2=τ3=τ4=τmax

2)将τ1至τ4均等地增大或减小。

τ1=τ2=τ3=τ4=τmax+s  (-τmax·F≤s≤τmax·F)

由此,可应对节奏急剧变化的情况。

3)对应rit.(逐渐舒缓、渐渐变慢)或者accel.(渐速、渐渐变快),如下计算各脉冲间隔:

τ1=τmax

τ2=τmax+1·s

τ3=τmax+2·s   (-τmax·F≤s≤τmax·F)

τ4=τmax+4·s

1、2、4的系数不过是举例,可以根据节奏变化的大小进行改变。

4)对3)那样的rit.或者accel.的情况下的5个脉冲位置中的哪个位置是欲求当前拍子的位置进行改变。

将它们都组合起来,计算L(t)与M(t)的相关性,从其中最大的值来确定拍子位置,则还可以对节奏变化的乐曲确定拍子位置。而且在2)和3)的情况下,还是根据s的值来改变计算相关性时的系数k的值。

而且,虽然当前使5个脉冲的大小都相同,但也可以仅增大要求出拍子的位置(图13的假设拍子位置)的脉冲,或者离要求出拍子的位置越远则越减小值,强调求出拍子的位置的各音阶音符强度的增量值的合计[图13的5]]。如以上那样确定拍子位置,但在对敲击节奏输出部108输出的拍子位置之前的位置也检测拍子时,只要沿波形的前向进行同样的处理即可,而不是沿波形的后向进行。

如上确定了各拍子的位置之后,也可以将该结果保存在缓冲器201中,并显示检测的结果,请用户确认,修改错误之处。

图14表示拍子检测结果的确认画面的例子。该图的三角形标记的位置是检测出的拍子位置。

如果按下了“再现”按钮,则当前的音乐声音信号经过D/A变换而从扬声器等再现。当前的再现位置如图所示,通过竖线等再现位置指示器来显示,所以可以一边听音乐一边确认拍子检测位置的错误。而且,如果与检测的原波形的再现同时,在拍子位置的定时上再现例如节拍器那样的声音,则不仅可以目视确认还能用声音来确认,能更易于判断错误检测。作为再现该节拍器声音的方法,例如可考虑MIDI设备等。

按下“拍子位置修正”按钮来进行拍子检测位置的修正。一旦按下该按钮,则在画面上显现十字光标,所以在最开始出现拍子检测错误的地方点击正确的拍子位置。从被点击的地方稍微靠前处(例如τmax的一半的位置)起将之后的拍子位置都清除掉,将被点击的地方作为假设的拍子位置,对之后的拍子位置进行再次检测。

接下来,说明成为用于确定小节位置的前提的第1拍位置的确定。

由上述拍子位置确定部111确定出各拍子位置,但仅靠此无法确定小节的位置。因此,向用户请求最初向节拍输入部103输入节拍。并且,在敲击输入时,让用户一边收听演奏一边敲击,以便在其第1拍时根据步骤S230的闪光灯的点亮而使拍子数值成为1。在由上述变动计算部107判定为在该敲击时计算出的敲击节奏的变动为一定范围内时,根据该敲击的拍子数值,求出与其最近的第1拍位置,将该位置作为第1拍位置输出。

在根据以上来确定出第1拍的位置(小节线的位置)后,该第1拍位置被输出到小节检测部112,所以由小节检测部112与拍子位置确定部111确定出的各拍子位置一起,检测出小节线位置。将该结果保存到缓冲器202中。与此同时,也可以将所检测到的结果显示为画面来由用户进行变更。特别是由于无法以该方法来应对变拍子的曲子,所以需要由用户来指定变拍子的地方。

根据以上的结构,可从人演奏的节奏变动的演奏声音信号中,检测出整个曲子的平均节奏、准确的拍子(拍)位置、以及小节线位置。

(实施例2)

图15是示出使用本发明的节奏检测结构的和弦检测装置的整体框图。在图15中,节奏检测以及小节检测的结构与上述结构基本相同,在相同结构中,关于节奏检测用和和弦检测用的结构,也存在与上述结构不同的部分,所以除了公式等外重复相同的说明,如下所述。

从图中可知,本和弦检测装置的结构具有:输入部100,其输入声音信号;拍子检测用音阶音符强度检测部101,其根据所输入的声音信号,以规定时间间隔(帧),使用适合于拍子检测的参数来进行FFT运算,根据所求出的强度谱求出每个帧的各音阶音符的强度;上述节奏候选检测部102~上述小节检测部112的在实施例1中记载的各结构,其对所有的音阶音符合计该每个帧的各音阶音符强度的增量值,求出表示每个帧的全部音符的变化程度的强度增量值的合计,根据表示该每个帧的全部音符的变化程度的强度增量值的合计,检测出平均的拍子间隔和各拍子的位置;和弦检测用音阶音符强度检测部300,其根据上述输入的声音信号,以与之前的拍子检测时的时间间隔不同的其他时间间隔(帧),使用适合于和弦检测的参数来进行FFT运算,根据所求出的强度谱求出每个帧的各音阶音符的强度;基音检测部301,其在所检测出的各音阶音符的强度中,将各小节设定为几个检测范围,根据各检测范围内的与第1拍相当的部分的低音域侧的音阶音符的强度来检测出各检测范围的基音;第1小节分割确定部302,其根据所检测出的基音在各检测范围中是否不同,来判定基音是否产生变化,根据该基音是否产生变化来确定是否可以将小节分割为多个;第2小节分割确定部303,其同样将小节设定为若干个和弦检测区间,在主要被设定为演奏和声的音域的和弦检测音域中,在上述检测区间对每帧的各音阶音符的强度进行平均,再按照每12个音阶音符对这些平均后的各音阶音符的强度进行累积,除以所累积的数目,求出12个音阶音符的平均强度,并分别按强度从强到弱的顺序重新排列,然后根据后续区间的强音符内的最强的3个以上的M个音阶音符是否有C个以上被包含在其之前的区间的强音符内的最强的3个以上的N个的音阶音符中,来判定和声是否产生变化,根据该和声的变化程度来确定是否可以将小节分割为多个;以及和弦名确定部304,在通过第1小节分割确定部302或第2小节分割确定部303确定为需要将小节分割为若干个和弦检测范围的情况下,根据基音和各和弦检测范围中的各音阶音符的强度来确定各和弦检测范围的和弦名,并且在通过第1小节分割确定部302或第2小节分割确定部303确定为不需要对小节进行分割的情况下,根据基音和该小节的各音阶音符的强度来确定该小节的和弦名。

输入音乐声音信号的上述输入部100是用于输入进行和弦检测的对象的音乐声音信号的部分,其基本结构与上述结构的输入部100相同,所以省略其详细说明。其中,在通常被定位于中心的口声(vocal)妨碍之后的和弦检测时,也可以通过将右声道的波形和左声道的波形相减来进行口声消除。

将该数字信号输入到拍子检测用音阶音符强度检测部101和和弦检测用音阶音符强度检测部300中。这些音阶音符强度检测部都由上述图4的各部分构成,结构完全相同,所以能够仅改变参数来再次使用相同设备。

而且作为该结构进行使用的波形预处理部101a与上述相同地构成,将音乐声音信号中来自上述输入部100的声音信号下采样为适合于今后处理的采样频率。其中,既可以利用拍子检测用和和弦检测用来改变下采样之后的采样频率、即下采样率,也可以为了节约下采样的时间而使其相同。

在拍子检测用时,下采样率是根据用于拍子检测的音域来确定的。为了使铙钹、镲等的高音域的节奏乐器的演奏声音反映到拍子检测上,需要使下采样之后的采样频率为高频,但为了主要从基音和大鼓、小鼓等的乐器声音和中音域的乐器声音中进行拍子检测时,也可以使用与下面的和弦检测时相同的下采样率。

和弦检测用的波形预处理部的下采样率根据和弦检测音域而改变。所谓和弦检测音域是指和弦名确定部在检测和弦时使用的音域。例如设和弦检测音域为从C3到A6(C4为中央的Do)时,由于A6的基本频率为大约1760Hz(A4=440Hz时),所以下采样之后的采样频率只要是奈奎斯特频率(Nyquist frequency)大于等于1760Hz的3520Hz以上即可。由此,当原本的采样频率为44.1kHz(音乐CD)的情况下,下采样率为1/12左右即可。此时,下采样之后的采样频率为3675Hz。

通常在通过了将作为下采样之后的采样频率的一半频率的奈奎斯特频率(此例中为1837.5Hz)以上的分量截止的低通滤波器之后,通过跳读数据(本例中为放弃波形样本的12个中的11个)来执行下采样处理。关于这点,基于上述结构中说明的理由相同的理由。

这样结束了波形预处理部101a的下采样之后,以规定的时间间隔,通过FFT运算部101b来对波形预处理部的输出信号进行FFT(快速傅里叶变换)。

设FFT参数(FFT点数和FFT窗口的移位量)在拍子检测时与和弦检测时为不同的值。这是由于如下的FFT的特性:如果为了提高频率分解能而增大FFT点数,则会增大FFT窗口的尺寸,会用更长时间进行1次FFT,时间分解能会降低,(即,优选在拍子检测时牺牲频率分解能来提高时间分解能)。虽然存在不使用与窗口尺寸相同长度的波形,而通过仅在窗口的一部分上设置波形数据,对窗口的剩余部分嵌入0,从而即使增大了FFT点数也不会使时间分解能变差的方法,但在本实施例的情况下,为了也能正确检测低音侧的强度,需要某种程度的波形样本数。

考虑上述情况,本实施例中,在拍子检测时,设定为FFT点数是512、窗口的移位是32个样本(窗口的重叠是15/16)、没有嵌入0;而在和弦检测时,设定为FFT点数是8192、窗口的移位是128个样本(窗口的重叠是63/64)、在一次FFT中针对波形样本使用1024个样本。如果用这种设定来进行FFT运算,则在拍子检测时,时间分解能大约为8.7ms、频率分解能大约为7.2Hz;而在和弦检测时,时间分解能大约为35ms、频率分解能大约为0.4Hz。由于当前准备求出强度的音阶音符在从C1到A6的范围内,所以和弦检测时的频率分解能约0.4Hz,也能应对频率差最小的C1和C#1的基本频率之差、即约1.9Hz。而且,如果考虑四分音符=300的节奏的乐曲中32分音符的长度为25ms,则可知和弦检测时的时间分解能为约8.7ms是足够的。

这样按照每帧进行FFT运算,根据分别对该实数部分和虚数部进行平方的值的和的平方根来计算强度,将该结果发送给强度检测部101c。

在强度检测部101c中,根据在FFT运算部101b计算出的强度谱来计算各音阶音符强度。由于FFT只是对将采样频率除以FFT点数得到的值的整数倍的频率的强度来进行计算,所以为了根据该强度谱来检测各音阶音符强度,需要进行与上述结构相同的处理。即,对于计算音阶音符的所有音符(C1至A6),将与该各音符的基本频率的上下50森特(cent)的范围内(100森特为半音符)的频率相当的强度谱内具有最大强度的频谱的强度作为该音阶音符的强度。

当对所有的音阶音符检测完强度时,将其保存在缓冲器内,使波形的读取位置推进规定的时间间隔(1帧;之前的例子中拍子检测时为32个样本,和弦检测时为256个样本),重复FFT运算部101b和强度检测部101c的处理直到波形结尾处。

根据以上所述,将输入到音乐声音信号的输入部100中的声音信号的每个帧的各音阶音符的强度保存到拍子检测用和和弦检测用这两种的缓冲器200以及203中。

接下来,由于图15的节奏候选检测部102~小节检测部112的结构是与上述实施例1的结构的节奏候选检测部102~小节检测部112相同的结构,所以此处省略其详细说明。

由于按照与上述结构相同的结构和步骤,确定出小节线的位置(各小节的帧序号),所以接着检测各小节的基音。

根据拍子检测用音阶音符强度检测部300输出的各帧的音阶音符强度,来检测基音。

图16示出与上述结构的图6相同的乐曲的相同部分的从和弦检测用音阶音符强度检测部300所输出的各帧的音阶音符强度。如该图所示,和弦检测用音阶音符强度检测部300的频率分解能为大约0.4Hz,所以提取出从C1到A6的所有音阶音符强度。

在本申请人以前开发的设备中,由于基音在小节内前半部分和后半部分有可能不同,所以将小节分割为前半部分和后半部分这两个部分,分别在两部分检测基音,当检测出其他的基音的情况下,将和弦也分为前半部分和后半部分进行检测。但在该方法中,当基音相同但和声不同时,例如小节的前半部分为C和弦,后半部分为Cm和弦的情况下,由于基音相同因而存在无法对小节进行分割,在小节整体上来检测和弦的问题。

而且,在上述以前开发的设备中,在检测范围整体中检测基音。即,当检测范围为小节的时候,在小节整体中将强音作为基音。但在爵士乐那样的基音频繁变动(基音以4分音符等变动)时,无法通过该方法正确检测基音。

因此在本实施例中,构成为首先用基音检测部301来检测基音,在检测出的各音阶音符强度中将各小节设定为若干个检测范围,根据各检测范围内相当于第1拍的部分的低音域侧的音阶音符强度来检测各检测范围的基音。如上所述,这是由于即使在基音频繁变动的情况下,大多数情况下最初的第1拍都弹奏和弦的根音(root note)。

基音是根据相当于第1拍的检测范围内的部分中的基础检测音域的音阶音符强度的平均强度来求出的。

如果设帧时间t中的第i个音阶音符强度为Li(t),则从帧fs起的fe的第i个音阶音符的平均强度Lavgi(fs、fe)可通过下式7计算出来。

式7

<mrow><msub><mi>L</mi><mi>avgi</mi></msub><mrow><mo>(</mo><msub><mi>f</mi><mi>s</mi></msub><mo>,</mo><msub><mi>f</mi><mi>e</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><msub><mi>f</mi><mi>s</mi></msub></mrow><msub><mi>f</mi><mi>e</mi></msub></munderover><msub><mi>L</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow><mrow><msub><mi>f</mi><mi>e</mi></msub><mo>-</mo><msub><mi>f</mi><mi>s</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mrow><mo>(</mo><msub><mi>f</mi><mi>s</mi></msub><mo>&le;</mo><msub><mi>f</mi><mi>e</mi></msub><mo>)</mo></mrow></mrow>

在基音检测音域、例如从C2到B3的范围内计算该平均强度,基音检测部301将平均强度为最大的音阶音符确定为基音。为了在基音检测音域中不包含音符的乐曲中或者无声部分中不错误地检测基音,也可以设定适当的阈值,当检测出的基音的强度在该阈值以下时不检测基音。而且当在之后的和弦检测中把基音看得很重要的时候,也可以检查检测出的基音是否在第1拍的基音检测范围中持续保持某强度以上,仅将更可靠的作为基音检测出来。进而,还可以不将基音检测音域中平均强度最大的音阶音符确定为基音,而是按照每12个音符名将该各音符名的平均强度进行平均,将该每个音符名的强度最大的音符名确定为基音名,在具有该音符名的基音检测音域中的音阶音符中,把平均强度最大的音阶音符确定为基音。

确定了基音之后,也可以将该结果保存在缓冲器60中,并对基音检测结果进行画面显示,在有错误的情况下让用户进行修改。而且,由于还考虑到根据乐曲不同基音域发生变化的情况,所以也可以由用户改变基音检测音域。

图17示出由基音检测部301检测出的基音检测结果的显示例。

接着通过第1小节分割确定部302根据检测出的基音在各检测范围中是否不同来判定基音是否存在变化,根据该基音是否存在变化来确定是否可以将小节分割为多个。即,如果检测出的基音在各检测范围中相同,则确定为无需分割该小节。而且如果检测出的基音在各检测范围中不同,则确定为需要分割该小节。此时,也可以重复判断是否还需要对各分割后的一半部分再进行分割。

另一个第2小节分割确定部303的结构中,首先设定和弦检测音域。这在主要演奏和声的音域中,例如为C3~E6(C4为为中央的Do)。

在小节的一半等检测区间对该和弦检测音域的每帧的各音阶音符强度进行平均。进一步按照每12个音阶音符(C、C#、D、D#、...、B)来累积平均后的各音阶音符的强度,除以累积的数,求出12个音阶音符的平均强度。

在小节的前半部分和后半部分求出该和弦检测音域的12个音阶音符的平均强度,按照强弱顺序对它们进行重新排列。

如上述图18(a)(b)所示,调查在前半部分的例如最强的3个(将该数设为N)音符之中是否包含后半部分的强音内的例如最强的3个(将该数设为M)音符,根据所包含的数量是否在该数字以上,来判定和声是否产生变化。通过该判定,第2小节分割确定部303判定该和声变化的程度,由此确定是否可以将小节分割为多个。

当所包含的数量在例如3个(将该数设为C)以上时(即包含全部),判断为在小节的前半部分和后半部分没有发生和声的变化,第2小节分割确定部303确定为不进行基于和声的变化程度的小节分割。

通过在第2小节分割确定部303中适当设定该M、N、C的值,从而可以改变基于该和声变化程度的小节分割强度。在之前的例子中该M、N、C全部为3,非常认真地检查和声的变化,但如果例如设为M=3、N=6、C=3(在前半部分的最强的6个音符中是否包含后半部分的最强的3个音符),则只要为某种程度上相似的声音,就能判断为是相同的和声。

之前描述了在4节拍的情况下,将前半部分和后半部分再分割成一半,将小节全体分割为4部分的情况,但在前半部分和后半部分的分割判断中,设M=3、N=3、C=3,通过在判断是否进一步将前半部分和后半部分再分割成一半的判断中,设M=3、N=6、C=3,从而可以进行适合于实际的一般音乐的更准确的判断。

和弦名确定部304构成为在通过第1或第2小节分割确定部302或者303确定为需要将小节分割为若干个和弦检测范围的情况下,根据基音和各和弦检测范围内的各音阶音符的强度来确定各和弦检测范围的和弦名;在通过第1或第2小节分割确定部7或者8确定为不需要对小节进行分割的情况下,根据基音和该小节的各音阶音符强度,来确定该小节的和弦名。

如下由和弦名确定部304进行实际的和弦名的确定。在本实施例中,设和弦检测范围与基音检测范围相同。计算和弦检测音域、例如从C3到A6的各音阶音符的和弦检测范围的平均强度,依次从具有大的值的音阶音符中检测多个音符名,从该多个音符名和基音的音符名中提取和弦名候选。

此时,由于不一定是强度大的音符为和弦构成音,所以检测多个例如5个音符名的音符,从所有的组合中选出其中的2个以上的组合,根据该选出的组合与基音的音符名提取和弦名候选。

关于和弦也可以不检测平均强度为阈值以下的和弦。而且还可以由用户来改变和弦检测音域。进而,也可以不依次从和弦检测音域中平均强度为最大的音阶音符中提取和弦构成音符候选,而是按照每12个音符名对该和弦检测音域内的各音符名的平均强度进行平均,从该每个音符名的强度最大的音符名中依次提取出和弦构成音符候选。

关于和弦名候选的提取,是通过由和弦名确定部304检索保存了和弦的类型(m、M7等)和距和弦构成音符的根音的音程的和弦名数据库来提取的。即,从检测出的5个音符名中选出所有的2个以上的组合,彻底调查这些音符名间的音程是否与该和弦名数据库的和弦构成音符的音程具有关系,如果是相同音程关系,则根据和弦构成音符中的任一个音符名计算根音,对该根音的音符名赋予和弦类型,确定和弦名。此时,和弦的根音和5度的音有时在演奏和弦的乐器中被省略,所以即使不包含根音和5度的音也作为和弦名候选而提取出来。在检测出基音的情况下,把基音的音符名加在该和弦名候选的和弦名上。即,如果和弦的根音名与基音音符名相同则原样即可,如果不同则作为分数和弦。

在上述方法中,当所提取的和弦名候选过多时,也可以基于基音进行限定。即,在检测出基音时,在和弦名候选之中删除其根音名与基音音符名不同的候选。

在提取出了多个和弦名候选的情况下,为了在其中确定某一个候选,需要通过和弦名确定部304来计算似然度(最相似性)。

似然度是根据和弦检测音域中的所有和弦构成音符的强度的平均和基音检测音域中的和弦的根音的强度的强度来计算的。即,设所提取出的某和弦名候选的所有构成音符在和弦检测范围内的平均强度的平均值为Lavgc、和弦的根音在基音检测范围的平均强度为Lavgr,则如下式8所示,通过该2个的平均来计算似然度。作为计算似然度的其他方法,也可以使用和弦检测音域中的和弦音调(和弦构成音符)和无和弦音调(和弦构成音符之外的音符)的(平均的)强度之比。

(式8)

此时,当和弦检测音域和基音检测音域中含有多个相同音符名的音符时,使用其中平均强度强的音符。或者也可以分别在和弦检测音域和基音检测音域中按照每12个音符名对各音阶音符的平均强度进行平均,使用该每个音符名的平均值。

还可以对该似然度的计算导入音乐知识。例如在所有帧中对各音阶音符的强度进行平均,按照每12个音符名对其进行平均来计算各音符名的强度,按照该强度分布来检测曲调。然后,考虑对曲调的顺阶和弦(Diatonic Chord)乘以某常数以使其似然度增大,或者使在构成音符中包含曲调的自然音阶(diatonic scale)上的音符之外的音符的和弦根据该之外的音符的数量来减小似然度等。还可以将和弦进行中经常出现的模式(pattern)作为数据库存储,并与之比较,从而乘以某常数以使和弦候选中常使用的进行的和弦的似然度变大。

虽然将似然度最大的确定为和弦名,但也可以将和弦名的候选与似然度一起显示,让用户选择。

无论如何,一旦由和弦名确定部304确定了和弦名,则将该结果保存在缓冲器205中,并且将和弦名进行画面输出。

图19表示和弦名确定部304的和弦检测结果的显示例。不仅对这样检测出来的和弦名进行画面显示,而且优选使用MIDI设备等再现检测出来的和弦和基音。这是由于一般无法仅凭看到和弦名来判断是否正确。

根据上面说明的本实施例结构,即使不是具有特别的音乐知识的专家也能对于音乐CD等多个乐器声音被混入输入的音乐声音信号,不用分别检测音符信息就能从全体的声音中检测和弦名。

而且根据该结构,即使构成音符相同也能进行判别,对于演奏节奏变动的情况或者相反故意打乱节奏进行演奏的声源,也能检测出每个小节的和弦名。

特别是在本实施例结构中,不仅根据基音,还根据和声的变化程度来对小节进行分割,从而来检测和弦,所以即使基音相同的情况下,当和声变化程度大时,也对小节进行分割来检测和弦。即,即使在例如具有相同基音的小节内发生和弦变化的情况下也能正确地检测和弦。关于该小节的分割,可以根据基音的变化程度、和声的变化程度来进行各种分割。

(实施例3)

本实施例结构与实施例2的结构不同,是通过计算各音阶音符强度的欧几里得距离,从而探测和声变化程度,对小节进行分割来检测和弦的结构。

其中,此时如果单纯计算欧几里得距离,则由于急剧的音提高(乐曲开始等)或急剧的音衰减(乐曲结束、中断等)而使欧几里得距离成为大的值,所以有可能虽然和声没有变化但仅根据音的强弱来对小节进行分割。于是,如图20(a)~(d)所示,在计算欧几里得距离之前,使各音阶音符的强度归一化(图20(a)如图20(c)所示进行归一化,图20(b)如图20(d)所示进行归一化)。此时,如果不根据值大的一方而根据值小的一方(参照图20),则在急剧的音的变化下欧几里得距离变小,不会错误地进行小节分割。

上述各音阶音符强度的欧几里得距离可以通过下式9计算出来。例如在该欧几里得距离超过了所有帧的所有音符的强度的平均的情况下,通过上述第1小节分割确定部302来确定对小节进行分割。

(式9)

欧几里得距离

<mrow><mo>=</mo><msqrt><munderover><mrow><mi>&Sigma;</mi><mo>>

PowerOfNote1:和弦检测范围1的12音阶音符的平均强度的数组(从C至B的12个)

PowerOfNote2:和弦检测范围2的12音阶音符的平均强度的数组(从C至B的12个)

进而,详细而言,可以在(欧几里得距离>所有帧的所有音符的强度的平均×T)的时候对小节进行分割。如果改变该式的值T,则可以将小节分割的阈值改变(调整)为任意值。

并且,本发明的节奏检测装置以及节奏检测用计算机程序不仅限于上述图示例,当然可以在不脱离本发明主旨的范围内施加各种变更。

本发明的节奏检测装置以及节奏检测用计算机程序可以用于音乐宣传视频的制作等时使视频轨道中的事件与音轨中的拍子的时刻同步的视频编辑处理、通过拍子跟踪来发现拍子位置、切取粘贴音乐的声音信号的波形的音频编辑处理、与人的演奏同步地控制照明的颜色/亮度/方向/特殊效果等要素、或者自动控制观众拍手和助威等的现场舞台的事件控制、与音乐同步的计算机图片等各种领域中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号