专利名称:流媒体实时音乐节拍分析与舞蹈控制系统及方法
技术领域:
本发明涉及计算机音乐节拍分析领域,具体说是一种使用声卡API直接获 得声卡数据进行音乐实时节拍分析和音乐速度(BPM)分析并控制舞蹈与音乐 同步播放的系统及软件方法。
背景技术:
音乐是一种艺术品,是人意识的创作物,具体的演奏音乐很难用数值分析, 音频文件是以采样点的形式在计算机中存储的,播放过程是先将音频文件解压, 再将解压后的数据传输给声卡驱动,声卡驱动将数据进行处理后发送给声卡硬 件,硬件进行数模转换后把模拟信号发送给声音输出设备。
获得音乐节拍速度(BPM)和节拍信息的一般方法是,首先在音频信号中 选取一个节拍位置,这个节拍位置的选取一般会与工作人员的乐感和对音乐的 理解有关,然后工作人员一边听音乐, 一边数拍数,数出一定拍数后,将拍数 除以数拍的时间,即可得到音乐节拍速度。但这种方法要求工作人员在数拍过 程中不能出错,因此要求工作人员精神集中,而且必须数拍的时间要足够长, 数拍时间越长则最终数据越精确,该方法受到工作人员影响, 一般最终获得的 音乐速度只有整数位精度。
最近,在检测音乐节拍分析技术方面有大量的研究和开发。 例如,02142473X号专利,为了检测乐曲中的节拍数,这种已有装置使用 了可变的阀值。该可变阀值是在假定某一段时间间隔中无瞬变事件发生的情况 下得到的,在此时间中,音频信号的最大值被检测出来,然后将其与一个常数 因子相乘,乘积结果将作为阀值,在后面的时间间隔中,如果信号超过这一阀 值就会被检查出来,这就表明产生了一个突变事件,两个相邻的突变事件之间 的时间间隔就被测量出来。这一步骤在输入信号的三个不同频带中进行。 另外,美国第5614687号专利也采用了这种检测节拍数的技术。 以上装置的缺点是检测节拍的瞬时性不强,至少需要音乐三个节拍以上才 可以获得音乐速度和节拍位置,另外运算量较大并不适合应用于实时节拍检测, 而且以上专利都是以检测单一的音乐节拍速度为目标的而不是主要应用于获得 节拍数据。另外以上装置均使用特殊硬件实现,造价较高而且需要专门的硬件 接口通用性不强。
5另外具体的音乐一般受演奏者和音乐所要表达的感情影响,所以音乐节拍 速度不是定值,在音乐中经常会出现变奏的情况,这样单独的使用一个数值来 描述音乐节拍速度是不合适的。
发明内容
为了解决上述存在的问题,本发明提供一种可动态实时分析音乐节拍速度 和节拍信息并控制舞蹈与音乐同步播放的系统及方法;本发明的目的是通过下 述技术方案实现的流媒体实时音乐节拍分析与舞蹈控制系统,包括-
音频数据采集模块用于实时从声卡获得音频数据;
音乐节拍分析模块用于对音频数据的采集模块采集的数据信息进行分析、 处理;所述的音乐节拍分析模块,包括采样数据处理模块用于对音频数据进 行縮减数据量处理,根据程序设置的定动态阀值,并判断出可能的节拍点;节 拍分析模块用于进一步判断出节拍点的数据并存储;
音乐节拍速度分析模块用于将音乐节拍分析模块分析出的节拍点序列进 行二次分析,将过密节拍点,即时间间隔小于0.2秒的节拍点去掉,建立一个统 计表,确定音乐节拍点,并统计每两个节拍点之间的时间间隔,按照每两个节 拍点之间的时间间隔,计算得出音频数据中的平均节拍周期及音乐节拍速度。
舞蹈控制模块根据以上模块分析出的音乐节拍速度,控制动画角色播放 舞蹈动作,使舞蹈动作与正在播放的音乐在节拍上同步并具有节奏感。 流媒体实时音乐节拍分析与舞蹈控制方法,步骤如下
A、 音频数据采集为了实现实时获得音频数据,首先得到系统混音器, 并打开录音设备,在操作系统中注册程序需要捕获声卡数据改变消息,当声卡 数据改变时由操作系统负责把声卡数据以消息的形式发送给音频数据采集模 块,在此消息中可以得到当前系统正在播放的声音数据;
B、 对步骤A采集到的音频数据进行采样分析,初步判断出疑似节拍点数 据,具体步骤如下
(1) 获得采样数据;
(2) 判断采样数据是否到达数据尾,如果是,跳转至步骤(8)完成此段 数据处理;如果否则跳转至步骤(3);
(3) 判断采样数据值是否小于600,如果是,跳转至步骤(4),如果否, 则返回步骤(1)获得下一采样数据;
(4) 判断采样数据值是否为正值,如果是,跳转至步骤(5),如果否,跳转至步骤(1)获得下一采样数据;
(5) 判断采样数据是否大于最大值,如果是则记录最大值;如果否,跳转 至步骤(6);
(6) 判断采样数据是否大于0.8倍最大值,如果是,跳转至步骤(7),如 果否跳转至步骤(1)获得下一采样数据;
(7) 判断采样数据是否与前一个极值点相差0.05秒以上,如果是则记录节 拍点,作为疑似节拍点数据库存储,如果否,跳转至步骤(1)获得下一采 样数据;
(8) 完成此段数据处理;
C、 对步骤B获得的疑似节拍点,进行二次分析,筛选出正式的节拍点,具 体步骤如下首先创建两个节拍点记录器,用于保存和交换数据,遍历疑似节 拍点列表中每个节拍点位置,获得一个节拍点数据信息;判断节拍点数据是否 大于0.8倍的本段最大采样值,如果否,则抛弃这个疑似节拍点信息继续检査下 一个节拍点,如果是,检査是否在第一个节拍点记录器中没有记录点,如果在 第一个节拍点记录器不存在记录点,则直接将这个疑似节拍点放入到第一个节 拍点记录器中,如果第一个节拍点记录器中有数据,则计算第一个节拍点记录 器中最后一个节拍点与当前节拍点的时间差,如果这个时间差小于0.2秒且采样 值大于第一个节拍点记录器中最后一个节拍点,则替换第一个节拍点记录器中 最后一个节拍点的数据,并重新计算第一个节拍点记录器中倒数第二个节拍点 的距离信息,对于不符合上述条件的疑似节拍点直接抛弃,重复以上步骤直到 所有的疑似节拍点都被处理过,然后清空第二个节拍点记录器,再交换这两个 节拍点记录器,通过上述步骤所有节拍点信息都被存储到了第二个节拍点记录 器,供分析音乐播放速度使用;
D、 音乐节拍速度分析
首先,判断在节拍记录器中是否有节拍点,如果没有则认为平均节拍周期不 存在,如果有则依次从节拍记录器中得到每个节拍点信息;取得一个节拍点信 息后,计算Key值,Key=此节拍点与上一个节拍点距离/ (采样率* 0.5),标 准情况下采样率为44100,以Key值为主键建立一个查找表,查找这个节拍点信 息计算出的Key值,如果找到了,则在查找表中记录这个Key值所对应的节拍 点数量,如果没找到,则在这个査找表中添加这个Key并记录数量为1;遍历所
7有Key所对应的记录数量,判断是否这个Key对应的记录数量是否是最大值, 如果是,则可得到节拍点数量最大的Key,当遍历完所有节拍点后,计算所有拥 有最大Key的节拍点的距离的平均值,即可得到平均节拍周期,根据音乐节拍 速度BPM = 60/平均节拍周期,计算得出音乐节拍速度。 E、舞蹈控制
预先规定所有的动画角色舞蹈动作均为一个八拍,并记录每个动作捕捉时舞 蹈的每分钟节拍数(MoveBPM),再根据以上分析出的音乐节拍速度(MusicBPM), 得到舞蹈播放速度(DanceSpeed):
DanceSpeed , MusicBPM/,veBPM
然后播放相应的舞蹈角色动作,并设置此动作的播放速度为DanceSpeed,使得 舞蹈动作与所播放的音乐节拍保持同步。
本发明的有益效果现今同类发明中,大多数都是应用于非实时音乐节拍 速度计算,即对单个音频文件进行整体分析,但在网络技术飞速发展的今天, 用于网络音乐传输的大都是流媒体,而整体分析方法一般都无法分析流式音频 源,另外对整体音乐节拍速度分析的另外一个条件是需要有解码器,就是需要 有 -个算法将压縮后的音频文件解码,这样才能把音频文件还原成波形采样, 而往往解码器和音频文件格式都是专利的,需要收取使用费用,而我们的技术 无需解码器,而是从硬件直接得到波形采样数据,也就是说只要您的计算机系 统的任何软件可以播放声音就可以通过这套系统分析音乐节拍速度。另外一些 产品使用硬件方法进行音乐节拍速度计算,这些产品的技术很难用于公知计算 机系统,而是使用在专门的硬件基础上,而且造价较高没有通用性。本发明流 媒体实时音乐节拍分析与舞蹈控制系统及方法,使用户能够根据需要动态实时 分析音乐节拍速度和节拍信息并控制舞蹈与音乐同步播放,本发明方法简单、 使用方便、成本较低,适用于大多数的流媒体实时音乐分析需求。
图1是本发明流媒体实时音乐节拍分析系统框图; 图2是本发明实施例的程序模块时序图。 图3A是本发明采样数据处理流程图。 图3B是本发明对音乐节拍分析流程图。 图4是本发明对音乐节拍速度分析流程图。
具体实施例方式
实施本发明流媒体实时音乐节拍分析系统与方法,要求的硬件基础为需要
有声卡的公知计算机系统,使用Windows2000以上操作系统。
本实施例提供了一个音乐游戏程序,在其中应用到本发明流媒体实时音乐 节拍分析系统和分析方法,该游戏程序会随着音乐节拍出现按键标志,当音乐 播放到重拍位置时按下相应按键得分,如果按键正确,游戏人物会伴随音乐节 奏播放舞蹈动画。
本实施例音乐游戏程序总体模块时序图如图2所示,首先音频数据采集模 块从声卡中得到音频采样数据,然后将数据传递给音乐节拍分析模块,并调用 音乐节拍分析模块相关方法分析音乐节拍点,得到音乐节拍点后将节拍点数据 发送给音乐节拍速度分析模块,在音乐节拍速度分析模块得到音乐节拍速度后, 刷新用户界面并控制舞蹈控制模块控制游戏人物播放舞蹈动作。
本实施例的实现需要独立显卡支持,但并不属于本专利硬件基础,仅为实 施例实现需要。
本实施例应用的流媒体实时音乐节拍分析系统,如图1所示,包括 音频数据采集模块用于实时从声卡获得音频数据;
音乐节拍分析模块用于对音频数据的采集模块采集的数据信息进行分析、 处理;所述的音乐节拍分析模块,包括采样数据处理模块用于对音频数据进 行縮减数据量处理,根据程序设置的定动态阀值,并判断出可能的节拍点;节 拍分析模块用于进一步判断出节拍点的数据并存储;
音乐节拍速度分析模块用于将音乐节拍分析模块分析出的节拍点序列进 行二次分析,将过密节拍点,即时间间隔小于0.2秒的节拍点去掉,建立一个统 计表,确定音乐节拍点,并统计每两个节拍点的时间间隔,按照每两个节拍点 直接的时间间隔,计算得出音频数据中的平均节拍周期及音乐节拍速度。
除包括上述流媒体实时音乐节拍分析系统,本实施例提供的音乐游戏程序还 包括用户界面层,上层框架逻辑层。
其分析步骤如下
一、音频数据采集
当程序运行后会初始化声音设备,检査声卡设备是否有效,如果校验硬件可 用则用户可以选择想要播放的歌曲,当歌曲被播放时,音频分析器通过文件名
可以得到正在播放的音频文件的句柄,使用WindowsAPI函数wavelnGetDevCaps获得当前播放的音乐的采样率,并调用wavelnOpen函数注册本实例的程序窗口 接收音频硬件的数据改变的消息,这样实例窗体可以接收到MM一WIM—DATA 消息。然后建立硬件音频缓冲区,因为MM一WIM—DATA消息得到的最大采样 长度为8192个,所以单个缓冲区的大小为8192x2字节,为了得到足够多的釆 样数据需要通过wavelnAddBuffer添加3个预缓冲区然后再建立一个输出缓冲 区。判断当前是否正在播放声音,如果当前正在播放声音则通过wavelnStart函 数启动音频捕获模块的消息回调,当有音乐播放时Windows会通知窗口实例并 把数据传递给它,我们把数据拷贝到输出缓冲区中,这样提取当前音乐数据的 过程就完成了。
二、音乐节拍分析
接下来要分析输出缓冲区中的数据从中得到节拍信息(如图3A所示),遍 历缓冲区中的采样数据,逐个获得采样数据,如果采样值大于600则认为这个 采样点的数据无效。另外只取正采样值进行处理,为了减少计算量抛弃负采样 值,因为声音是一种波,正负采样部分还原后是一致的。检测当前采样点的值 是否大于以前的采样点,如果是则记录最大值并记录节拍点,如果小于最大值 则检査这个采样点大于0.8倍的最大值,如果否,则抛弃这个疑似节拍点信息继 续检查下一个节拍点,如果此采样点大于0.8倍的最大值且和上一个最大值距离 大于0.05秒,则记录节拍点,对于不符合上述条件的疑似节拍点直接抛弃,这 样所有疑似的节拍点被记录到一个列表中。
下一步是从疑似节拍点中筛选正式节拍点(其流程如图3B所示),首先创 建两个节拍点记录器,用于保存和交换数据,遍历疑似节拍点列表中每个节拍 点位置,获得一个节拍点数据信息;判断节拍点数据是否大于0.8倍的本段最大 釆样值,如果否,则抛弃这个疑似节拍点信息继续检查下一个节拍点,如果是, 检查是否在第一个节拍点记录器中没有记录点,如果在第一个节拍点记录器不 存在记录点,则直接将这个疑似节拍点放入到第一个节拍点记录器中,如果第 一个节拍点记录器中有数据,则计算第一个节拍点记录器中最后一个节拍点与 当前节拍点的时间差,如果这个时间差小于0.2秒且采样值大于第一个节拍点记 录器中最后一个节拍点,则替换第一个节拍点记录器中最后一个节拍点的数据, 并重新计算第一个节拍点记录器中倒数第二个节拍点的距离信息,对于不符合 上述条件的疑似节拍点直接抛弃,重复以上步骤直到所有的疑似节拍点都被处理过,然后清空第二个节拍点记录器,再交换这两个节拍点记录器,通过上述 步骤所有节拍点信息都被存储到了第二个节拍点记录器,供分析音乐播放速度 使用;
三、音乐节拍速度分析
这部分通过以上模块得到的节拍信息计算平均节拍周期,从而得到音乐节
拍速度(BPM)(流程如图4所示)。
首先,判断在节拍记录器中是否有节拍点,如果没有则认为平均节拍周期
不存在,如果有则依次从节拍记录器中得到每个节拍点信息;取得一个节拍点 信息后,计算Key值,Key =此节拍点与上一个节拍点距离/ (采样率* 0.5), 标准情况下采样率为44100,以Key值为主键建立一个査找表,査找这个节拍点 信息计算出的Key值,如果找到了,则在查找表中记录这个Key值所对应的节 拍点数量,如果没找到,则在这个查找表中添加这个Key并记录数量为1;遍历 所有Key所对应的记录数量,判断是否这个Key对应的记录数量是否是最大值, 如果是,则可得到节拍点数量最大的Key,当遍历完所有节拍点后,计算所有拥 有最大Key的节拍点的距离的平均值,即可得到平均节拍周期,根据音乐节拍 速度BPM二60/平均节拍周期,计算得出音乐节拍速度。
四、 控制动画角色播放舞蹈动作
预先规定所有的动画角色舞蹈动作均为一个八拍,并记录每个动作捕捉时舞 蹈的每分钟节拍数(MoveBPM),将上述模块中计算所得的音乐节拍速度 (MusicBPM)传递给舞蹈控制模块,舞蹈控制模块将使用如下公式计算舞蹈播放 速度(DanceSpeed):
DanceSpeed = MusidBPM/MoveBPM
然后每隔八拍的时间(DanceCycleTime ):
DanceCydeTime = 60*8/ BPM
播放相应的舞蹈角色动作,并设置此动作的播放速度为DanceSpeed。通过这样 的处理,舞蹈动作就会和所播放的音乐节拍同步使舞蹈具有节奏感。
五、 控制用户界面显示
用户界面用于将计算结果显示给用户,在此实施例中用户界面使用Direct3D 渲染,加载节拍点要对应的图片到渲染系统,在此实施例中音乐的16拍为一个显示周期,则一个周期的时间可以根据如下公式计算
CydeTime- 60如16/BPM
设用户界面要显示的宽度为L,每个节拍点的时间为T,则每个节拍点的显示位 置为 Postio!i = L*T/CyckTime
然后将对应的图片渲染到此为止即可。这样用户就可以边听音乐边看到此时刻
是否存在节拍点。
六、其他部分
本实施例音乐游戏程序中还包括用户输入系统和记分系统。他们的作用是检 查用户敲击节拍的准确性,并为用户提供一个对某音乐节拍属性程度的评定。 其详细构成属于现有技术,在此不做赘述。
权利要求
1、流媒体实时音乐节拍分析与舞蹈控制系统,其特征在于,包括音频数据采集模块用于实时从声卡获得音频数据;音乐节拍分析模块用于对音频数据的采集模块采集的数据信息进行分析、处理;所述的音乐节拍分析模块,包括采样数据处理模块用于对音频数据进行缩减数据量处理,根据程序设置的定动态阀值,并判断出可能的节拍点;节拍分析模块用于进一步判断出节拍点的数据并存储;音乐节拍速度分析模块用于将音乐节拍分析模块分析出的节拍点序列进行二次分析,将过密节拍点,即时间间隔小于0.2秒的节拍点去掉,建立一个统计表,确定音乐节拍点,并统计每两个节拍点之间的时间间隔,按照每两个节拍点之间的时间间隔,计算得出音频数据中的平均节拍周期及音乐节拍速度。舞蹈控制模块根据以上模块分析出的音乐节拍速度,控制动画角色播放舞蹈动作,使舞蹈动作与正在播放的音乐在节拍上同步并具有节奏感。
2、 流媒体实时音乐节拍分析与舞蹈控制方法,其特征在于,步骤如下A、 音频数据采集为了实现实时获得音频数据,首先得到系统混音器, 并打开录音设备,在操作系统中注册程序需要捕获声卡数据改变消息,当声卡 数据改变时由操作系统负责把声卡数据以消息的形式发送给音频数据采集模 块,在此消息中可以得到当前系统正在播放的声音数据;B、 对步骤A采集到的音频数据进行采样分析,初歩判断出疑似节拍点数 据,具体步骤如下(1) 获得采样数据;(2) 判断采样数据是否到达数据尾,如果是,跳转至步骤(8)完成此段 数据处理;如果否则跳转至歩骤(3);(3) 判断采样数据值是否小于600,如果是,跳转至步骤(4),如果否, 则返回歩骤(1)获得下一采样数据;(4) 判断采样数据值是否为正值,如果是,跳转至步骤(5),如果否, 跳转至步骤(1)获得下一采样数据;(5) 判断采样数据是否大于最大值,如果是则记录最大值;如果否,跳 转至歩骤(6);(6) 判断采样数据是否大于0.8倍最大值,如果是,跳转至步骤(7),如果否跳转至步骤(1)获得下一采样数据;(7) 判断采样数据是否与前一个极值点相差0.05秒以上,如果是则记录 节拍点,作为疑似节拍点数据库存储,如果否,跳转至步骤(1)获 得下一采样数据;(8) 完成此段数据处理;C、 对步骤B获得的疑似节拍点,进行二次分析,筛选出正式的节拍点,具 体步骤如下首先创建两个节拍点记录器,用于保存和交换数据,遍历疑似节 拍点列表中每个节拍点位置,获得一个节拍点数据信息;判断节拍点数据是否 大于0.8倍的本段最大采样值,如果否,则抛弃这个疑似节拍点信息继续检查下 一个节拍点,如果是,检查是否在第一个节拍点记录器中没有记录点,如果在 第一个节拍点记录器不存在记录点,则直接将这个疑似节拍点放入到第一个节 拍点记录器中,如果第一个节拍点记录器中有数据,则计算第一个节拍点记录 器中最后一个节拍点与当前节拍点的时间差,如果这个时间差小于0.2秒且采样 值大于第一个节拍点记录器中最后一个节拍点,则替换第一个节拍点记录器中 最后一个节拍点的数据,并重新计算第一个节拍点记录器中倒数第二个节拍点 的距离信息,对于不符合上述条件的疑似节拍点直接抛弃,重复以上步骤直到 所有的疑似节拍点都被处理过,然后清空第二个节拍点记录器,再交换这两个 节拍点记录器,通过上述步骤所有节拍点信息都被存储到了第二个节拍点记录 器,供分析音乐播放速度使用;D、 音乐节拍速度分析首先,判断在节拍记录器中是否有节拍点,如果没有则认为平均节拍周期不 存在,如果有则依次从节拍记录器中得到每个节拍点信息;取得一个节拍点信 息后,计算Key值,Key=此节拍点与上一个节拍点距离/ (采样率* 0.5),标 准情况下采样率为44100,以Key值为主键建立一个查找表,查找这个节拍点信 息计算出的Key值,如果找到了,则在查找表中记录这个Key值所对应的节拍 点数量,如果没找到,则在这个查找表中添加这个Key并记录数量为1;遍历所 有Key所对应的记录数量,判断是否这个Key对应的记录数量是否是最大值, 如果是,则可得到节拍点数量最大的Key,当遍历完所有节拍点后,计算所有拥 有最大Key的节拍点的距离的平均值,即可得到平均节拍周期,根据音乐节拍 速度BPM = 60/平均节拍周期,计算得出音乐节拍速度;E、舞蹈控制预先规定所有的动画角色舞蹈动作均为一个八拍,并记录每个动作捕捉时舞蹈的每分钟节拍数(MoveBPM),再根据以上分析出的音乐节拍速度 (MusicBPM),得到舞蹈播放速度(DanceSpeed):DaiiceSpeed - MusicBPM/MoveBPM然后播放相应的舞蹈角色动作,并设置此动作的播放速度为DanceSpeed,使得 舞蹈动作与所播放的音乐节拍保持同步。
全文摘要
流媒体实时音乐节拍分析与舞蹈控制系统及方法,涉及音乐节拍分析技术领域,解决了现有技术不适合实时节拍检测,需要配备特殊硬件实现的问题,该系统包括音频数据采集模块、音乐节拍分析模块、音乐节拍速度分析模块、舞蹈控制模块。该方法步骤为A.音频数据采集;B.对步骤A采集到的音频数据进行采样分析,初步判断出疑似节拍点数据;C.对步骤B获得的疑似节拍点,进行二次分析,筛选出正式的节拍点;D.音乐节拍速度分析;E.舞蹈控制。本发明能够动态实时分析音乐节拍速度和节拍信息,使舞蹈与音乐同步播放。无需专用解码器,从硬件直接得到波形采样数据,即可分析出节拍速度,方法简单、使用方便,适用于大多数流媒体实时音乐分析需求。
文档编号G10H1/40GK101587706SQ20091001240
公开日2009年11月25日 申请日期2009年7月8日 优先权日2009年7月8日
发明者军 张 申请人:沈阳蓝火炬软件有限公司