分层递阶的歌曲旋律检索方法

文档序号:6470734阅读:130来源:国知局
专利名称:分层递阶的歌曲旋律检索方法
技术领域
本发明涉及一种歌曲旋律检索方法;更具体的,本发明涉及一种根据操作者的哼唱输入数据来实现快速并准确查询歌曲库中相似旋律的检索方法。

背景技术
基于哼唱查询的旋律检索一直是基于音乐内容分析领域的重要问题。由于歌曲数据库中通常都有成千上万首歌曲,每首歌曲通常在3到5分钟这样的长度,整个歌曲库的旋律数据量非常大。因此旋律检索面临的两大难题就是检索准确性和检索速度。传统的旋律检索方法可以分为两类,一类是基于音符的检索方法(note-based),另一类是基于分帧的检索方法(frame-based)。第一类方法首先要对旋律数据进行音符分割,得到由音符对象组成的音符序列,然后基于音符进行检索。该方法的检索速度很快但是由于在目前技术下,音符分割是公认的难题,音符分割的效果并不理想,因此检索的准确性受到较大影响;而第二类方法按照等长的短时间隔(比如20ms)对旋律数据进行划分,得到由分帧音高数据组成的序列,然后基于分帧音高序列来进行检索。该方法的准确性相对比较高,但由于分帧音高序列的数据量很大,检索速度很慢。因此,当前的旋律检索方法不能同时兼顾准确性和速度,很难满足实际应用的需求。
本发明正是针对目前旋律检索方法的不足,采用分层递阶的办法,先在大数据集情况下使用基于音符的检索方法,在很快的速度情况下得到一个较小的备选数据集;然后再在该小数据集中使用基于分帧的检索方法,从而得到更为准确的最终检索结果。


发明内容
本发明的目的是为了同时兼顾旋律检索的准确性和速度,使用分层递阶的方法,在大数据集中先使用快速的检索方法来获取一个较小的备选数据集,然后再在该备选数据集中使用更为精准的检索方法来获得最终结果。这样既可以保证较高的检索准确性又可以获得较快的检索速度。本方法在PC平台上实现,具有相当广泛的适用范围。
本发明的特征在于 该方法是在PC机上依次按以下步骤实现的 步骤1,初始化 在该PC机上安装哼唱录音数据采集模块,哼唱旋律特征提取模块,曲库旋律特征提取模块,快速检索模块,精准检索模块,其中 A.哼唱录音数据采集模块,输入哼唱数据,根据设定的录音采样频率和位数采集哼唱录音数据,并输出,还设有录音设备启动和停止的控制信号输出端; B.哼唱旋律特征提取模块,从所述哼唱录音数据采集模块输出的哼唱录音数据中使用基于自相关函数的基因周期估计算法计算出每帧的音高,提取出能表达哼唱旋律特征的分帧哼唱音高序列,再用基于音高的音符分割方法,从所述的分帧哼唱音高序列中得到哼唱音符序列; C.曲库旋律特征提取模块,在由完整歌曲库输入的含有歌曲旋律的midi文件中先把其中的音符信息按时间顺序相串接,得到歌曲旋律所对应的音符序列,依此类推,得到完整歌曲库中所有歌曲旋律对应的音符序列集,再对每一个音符序列按设定的时间单位分帧,根据每帧对应时间的音符的音高值作为该帧的音高值,得到一个对应的分帧音高序列,依此类推,得到该完整歌曲库中所有歌曲旋律对应的分帧音高序列; D.快速检索模块,从所述曲库旋律特征模块输入曲库音符序列集,再从所述哼唱旋律特征提取模块输入哼唱音符序列,再用动态规划算法计算所述哼唱音符序列与曲库音符序列集中每一个序列的旋律差异值,然后再按设定的百分比把差异值最小的一部分音符序列所对应的曲库音乐旋律集中在一起作为备选旋律集; E.精准检索模块,分别从所述曲库旋律特征提取模块提取分帧音高序列,从哼唱旋律特征提取模块提取分帧哼唱音高序列,从快速检索模块提取备选旋律库,再按以下步骤处理 首先,根据所述备选旋律集和分帧音高序列集得到备选旋律分帧音高序列集; 其次,计算所述分帧哼唱音高序列与所述备选旋律分帧音高序列集中每一个分帧音高序列的旋律差异值,同样是用所述快速检索模块中所述的动态规划算法,把最小的旋律差异值所对应的旋律作为最终检索结果; 步骤2,曲库旋律特征提取模块从包含歌曲旋律特征的midi文件中提取能表示歌曲旋律特征的的音符序列集和分帧音高序列集; 步骤3,操作者按下PC机上的开始录音键,启动哼唱录音数据采集模块,然后通过话筒和声卡设备输入哼唱数据,保存为wav格式的哼唱录音数据; 步骤4,哼唱旋律特征提取模块从步骤3输出的哼唱录音数据中,提取能表示哼唱旋律特征的音符序列和分帧哼唱音高序列; 步骤5,快速检索模块将步骤4输出的哼唱音符序列在步骤2输出的曲库旋律音符序列集中进行检索,得到相似程度排在设定百分比前面的歌曲,输出为备选旋律集; 步骤6,根据步骤2输出的曲库旋律分帧音高序列集和步骤5输出的备选旋律集,可以得到备选旋律集所对应的备选旋律分帧音高序列集; 步骤7,精准检索模块将步骤4输出的分帧哼唱音高序列在步骤6输出的备选旋律分帧音高序列集中进行基于分帧的检索,从而得到最终的检索结果。
本发明具有同时兼顾旋律检索速度和旋律检索准确性的优点。



图1为本发明的模块示意图。
图2为本发明的程序流程框图。
图3为本发明设计的检索算法涉及的旋律差异计算示意图
具体实施例方式 请参阅图1(图1为“分层递阶的歌曲旋律检索方法”的模块示意图) 哼唱录音数据采集模块是控制录音设备的启动和停止,并可以调节录音音量的大小和设置相应的录音采样频率和位数,从而采集到哼唱录音数据。本系统使用的采样频率为11025,位数为16。
该模块的输入是通过话筒和声卡设备输入的哼唱数据 该模块的输出是根据设置的采样频率、位数,采集并保存的哼唱录音数据 该模块的处理流程先设置好录音数据采样参数录音音量的大小,采样频率和位数;然后由操作者通过按键或鼠标点击启动录音,则开始进行录音,将录制的数据保存为标准wav格式。
哼唱旋律特征提取模块是从哼唱录音数据中提取能表达哼唱旋律特征的音符序列和分帧音高序列。
该模块的输入是经哼唱录音数据采集模块输出的哼唱录音数据 该模块的输出是包含哼唱旋律特征的哼唱音符序列和分帧哼唱音高序列 该模块的处理流程将输入的哼唱录音数据以20ms的时间单位划分为一帧,使用基于自相关函数的基音周期估计算法来计算出每帧的音高。具体来说,以一段15秒的哼唱录音数据为例,采用20ms的时间间隔来划分帧,则可得到750帧,因为设置的采样率是11025,则每一帧的样本数是(20*11.025)再取整,结果是220。用这220个样本数据计算自相关函数,然后计算出自相关函数在第一个过零点之后的最大峰值点位置,便能估算出基音周期,即为该帧的音高。具体的计算步骤如下 1.计算自相关函数 设样本数据为s(n)(1≤n≤N),其中N=220;则自相关函数的计算公式为 2.找到第一个过零点(即R(k)≤0)的位置 第一个过零点的位置记为k0,具体计算方法如果(R(k)>0)则k=k+1;否则,k0=k; 通过循环可找到第一个过零点的位置k0; 3.找到过零点之后的最高峰值点位置 在k0<k<N范围内,找到R(k)取最大值的位置,设该位置为kmax; 4.计算基音周期,作为该帧的音高 基音周期(即该帧音高)=11025/kmax 对这段750帧的哼唱录音数据都采用以上相同方法计算出每帧的音高,则可得到一个共计750帧的分帧哼唱音高序列。
为了得到哼唱音符序列,需要对分帧音高序列进行音符分割。这里采用了基于音高的音符分割方法,即相邻帧的音高差异在50音分以内的都属于同一个区段,长度大于100ms的区段就可以看作是一个音符。通过这样的音符分割处理,从上述750帧的分帧哼唱音高序列就得到一个可能由40个音符组成的哼唱音符序列。
曲库旋律特征提取模块是从歌曲库的歌曲旋律数据(即标准midi格式文件)中提取音符序列和分帧音高序列 该模块的输入是歌曲库的所有歌曲旋律数据,即标准单音轨midi格式的文件 该模块的输出是包含歌曲旋律特征的音符序列集和分帧音高序列集 该模块的处理流程包含歌曲旋律数据的midi格式文件记录了歌曲旋律中每一个音符的音高和时长。直接把其中的音符信息按时间顺序串在一起即可得到歌曲旋律所对应的音符序列。按照这样的方法就能得到曲库中所有歌曲旋律所对应的音符序列集。
为了得到歌曲旋律对应的分帧音高序列,我们采用以20ms的时间单位来划分帧,根据每帧对应时间的音符的音高值作为该帧的音高值。具体来说,比如midi文件记录的某一个音符的音高值是71,开始时间是20秒,持续时间是0.5秒,则对应到分帧音高序列的计算方法是第20秒对应的是第1000(=20*1000ms/20ms)帧,从这第1000帧开始,共有25(=0.5*1000ms/20ms)帧的音高值都为71。通过这样的方法可以从一个标准midi格式的文件提取音高数据,得到一个对应的分帧音高序列。于是即可得到整个曲库中所有歌曲旋律所对应的分帧音高序列。
快速检索模块是利用基于音符的检索方法,从曲库旋律集中快速检索出与哼唱音符序列较为相近的曲库旋律组成备选旋律集。
该模块的输入是 1.经哼唱旋律特征提取模块输出的哼唱音符序列; 2.经曲库旋律特征提取模块输出的音符序列集; 该模块的输出是备选旋律集 该模块的处理流程计算哼唱音符序列与曲库音符序列集中每一个序列的旋律差异值,然后把差异值最小的前10%音符序列所对应的旋律集中在一起作为备选旋律集。基于音符序列的旋律差异值计算采用了动态规划的计算方法,具体来说设哼唱音符序列包含共M个音符,m为音符序号,取值范围即为(0~M);设曲库中某一旋律的音符序列包含N个音符,n为该序列的音符序号,取值范围即为(0~N)。设Hm表示哼唱音符序列的第m个音符,Gn表示曲库某旋律音符序列的第n个音符,Diff(Hm,Gn)表示上述两个音符之间的差异值。再设[m,n]表示哼唱音符序列的前m个音符组成的序列与曲库某旋律的前n个音符组成的序列之间的旋律差异值。差异值的具体递推计算方法是由下列三种情况取最优得到 哼唱音符与曲库旋律音符的差异值为 D1=Diff(Hm,Gn)+[m-1,n-1] 多余音符情形,即哼唱音符与曲库旋律空白音符的相似值为 D2=Dinsert+[m-1,n](其中,Dinsert=100) 缺少音符情形,即哼唱空白音符与曲库旋律音符的相似值为 D3=Ddelete+[m,n-1](其中,Ddelete=120) 整体差异值D(m,n)即为上述三个值中的最小值,即 [m,n]=min(D1,D2,D3) 于是,从图3所示矩阵的左上角开始,可以逐步递推计算出所有[m,n]的最小差异值,而最终得到的矩阵右下角的[M,N]即是哼唱音符序列和该曲库旋律音符序列的整体差异值。
用上述方法可以计算出哼唱音符序列和曲库中所有旋律音符序列的整体差异值,选择其中整体差异值最小的前10%音符序列所对应的曲库旋律作为备选旋律集输出。
精准检索模块是利用基于分帧的检索方法,从备选旋律集中检索出与分帧哼唱音高序列最相近的旋律,作为最终检索结果 该模块的输入是 1.经哼唱旋律特征提取模块输出的分帧哼唱音高序列; 2.经曲库旋律特征提取模块输出的分帧音高序列集; 3.经快速检索模块输出的备选旋律集; 该模块的输出是最终检索结果(即与哼唱旋律最相似的曲库旋律) 该模块的处理流程首先,根据快速检索模块输出的备选旋律集和曲库旋律特征提取模块输出的分帧音高序列集可以得到备选旋律分帧音高序列集。然后,计算分帧哼唱音高序列与备选旋律分帧音高序列集中每一个分帧音高序列的旋律差异值,差异值最小的即是最终检索结果。基于分帧序列的旋律差异值计算也是采用了动态规划的计算方法,具体来说设分帧哼唱音高序列包含共M帧音高数据,m为帧序号,取值范围即为(0~M);设备选旋律集中某一旋律的分帧音高序列包含N帧音高数据,n为该序列的帧序号,取值范围即为(0~N)。设Pm表示分帧哼唱音高序列的第m个音高数据,Tn表示备选旋律集中某旋律分帧音高序列的第n个音高数据,Diff(Pm,Tn)表示上述两个音高数据之间的差异值。再设[m,n]表示分帧哼唱音高序列的前m个音高数据组成的序列与备选旋律集中某旋律的前n个音高数据组成的序列之间的旋律差异值。差异值的具体递推计算方法是由下列三种情况取最优得到 分帧哼唱音高序列与备选旋律集中某旋律分帧音高序列的差异值为 D1=Diff(Pm,Tn)+[m-1,n-1] 多余音高数据情形,即哼唱音高数据与备选旋律空白音高数据的相似值为 D2=Dins+[m-1,n](其中,Dins=50) 缺少音高数据情形,即哼唱空白音高数据与备选旋律音高数据的相似值为 D3=Ddel+[m,n-1](其中,Ddel=50) 整体差异值D(m,n)即为上述三个值中的最小值,即 [m,n]=min(D1,D2,D3) 于是,从图3所示矩阵的左上角开始,可以逐步递推计算出所有[m,n]的最小差异值,而最终得到的矩阵右下角的[M,N]即是分帧哼唱音高序列和备选旋律集中某旋律分帧音高序列的整体差异值。
用上述方法计算出分帧哼唱音高序列与备选旋律集中所有旋律的分帧音高序列之间的整体差异值之后,选择其中整体差异值最小的所对应的旋律作为最终检索结果。
权利要求
1.分层递阶的歌曲旋律检索方法,其特征在于,所述方法是在PC机上依次按以下步骤实现的
步骤1,初始化
在该PC机上安装哼唱录音数据采集模块,哼唱旋律特征提取模块,曲库旋律特征提取模块,快速检索模块,精准检索模块,其中
A.哼唱录音数据采集模块,输入哼唱数据,根据设定的录音采样频率和位数采集哼唱录音数据,并输出,还设有录音设备启动和停止的控制信号输出端;
B.哼唱旋律特征提取模块,从所述哼唱录音数据采集模块输出的哼唱录音数据中使用基于自相关函数的基因周期估计算法计算出每帧的音高,提取出能表达哼唱旋律特征的分帧哼唱音高序列,再用基于音高的音符分割方法,从所述的分帧哼唱音高序列中得到哼唱音符序列;
C.曲库旋律特征提取模块,在由完整歌曲库输入的含有歌曲旋律的midi文件中先把其中的音符信息按时间顺序相串接,得到歌曲旋律所对应的音符序列,依此类推,得到完整歌曲库中所有歌曲旋律对应的音符序列集,再对每一个音符序列按设定的时间单位分帧,根据每帧对应时间的音符的音高值作为该帧的音高值,得到一个对应的分帧音高序列,依此类推,得到该完整歌曲库中所有歌曲旋律对应的分帧音高序列;
D.快速检索模块,从所述曲库旋律特征模块输入曲库音符序列集,再从所述哼唱旋律特征提取模块输入哼唱音符序列,再用动态规划算法计算所述哼唱音符序列与曲库音符序列集中每一个序列的旋律差异值,然后再按设定的百分比把差异值最小的一部分音符序列所对应的曲库音乐旋律集中在一起作为备选旋律集;
E.精准检索模块,分别从所述曲库旋律特征提取模块提取分帧音高序列,从哼唱旋律特征提取模块提取分帧哼唱音高序列,从快速检索模块提取备选旋律库,再按以下步骤处理
首先,根据所述备选旋律集和分帧音高序列集得到备选旋律分帧音高序列集;
其次,计算所述分帧哼唱音高序列与所述备选旋律分帧音高序列集中每一个分帧音高序列的旋律差异值,同样是用所述快速检索模块中所述的动态规划算法,把最小的旋律差异值所对应的旋律作为最终检索结果;
步骤2,曲库旋律特征提取模块从包含歌曲旋律特征的midi文件中提取能表示歌曲旋律特征的的音符序列集和分帧音高序列集;
步骤3,操作者按下PC机上的开始录音键,启动哼唱录音数据采集模块,然后通过话筒和声卡设备输入哼唱数据,保存为wav格式的哼唱录音数据;
步骤4,哼唱旋律特征提取模块从步骤3输出的哼唱录音数据中,提取能表示哼唱旋律特征的音符序列和分帧哼唱音高序列;
步骤5,快速检索模块将步骤4输出的哼唱音符序列在步骤2输出的曲库旋律音符序列集中进行检索,得到相似程度排在设定百分比前面的歌曲,输出为备选旋律集;
步骤6,根据步骤2输出的曲库旋律分帧音高序列集和步骤5输出的备选旋律集,可以得到备选旋律集所对应的备选旋律分帧音高序列集;
步骤7,精准检索模块将步骤4输出的分帧哼唱音高序列在步骤6输出的备选旋律分帧音高序列集中进行基于分帧的检索,从而得到最终的检索结果。
全文摘要
分层递阶的歌曲旋律检索方法,属于旋律检索技术领域,其特征在于在PC机上设定哼唱录音数据采集模块,把从话筒声卡输入的哼唱声音保存为哼唱录音数据;哼唱旋律特征提取模块,从哼唱录音数据中提取出包含旋律特征的哼唱音符序列和分帧哼唱音高序列;曲库旋律特征提取模块,从包含歌曲旋律的midi文件中提取音符序列和分帧音高序列;快速检索模块,利用基于音符的检索方法从整个曲库中进行快速检索得到一个较小的备选旋律集;精准检索模块,利用基于分帧的检索方法,在上述备选旋律集中进行检索从而得到最终结果。该旋律检索方法具有检索准确性高而且检索速度快的特点。
文档编号G06F17/30GK101364238SQ20081022231
公开日2009年2月11日 申请日期2008年9月17日 优先权日2008年9月17日
发明者智 王, 钹 张, 张云刚 申请人:清华大学, 上海锐深计算机科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1