【技术实现步骤摘要】
一种基于音符建模的哼唱式音乐检索方法及系统
本专利技术属于计算机应用
,尤其涉及一种基于音符建模的哼唱式音乐检索方法及系统,具体对音乐旋律中包含的音符进行建模、通过模型训练和解码识别两个关键过程实现哼唱式旋律识别。
技术介绍
近年来,云计算和智能嵌入式软硬件技术的迅速兴起进一步推动了数字娱乐应用的发展,音乐娱乐服务日益走近人们的生活。一方面,利用云计算平台上的虚拟化、云存储等技术可以建立歌曲库,部署音乐服务系统,在互联网和移动网络上提供高性能的音乐搜索和下载服务。另一方面,ARM、OMAP、PXA、Adreno等嵌入式微处理器的快速发展以及Android、iOS、Windowsphone8等嵌入式操作系统的推出,催生了智能手机、平板电脑、智能电视、智能机顶盒等智能终端设备的发展,促进了借助智能终端开展的音乐娱乐应用。互联网及智能终端设备上的音乐服务应用中,以哼唱识别为代表的音乐内容检索技术是一个关键,传统的基于文本或按照分类目录进行检索的方式已经不能满足应用的需求。基于哼唱的音乐检索技术是一种最直接、最自然的人机交互方式,得到人们的重视,国内相关专利的申请逐年增加。通过查新以及对相关技术的持续跟踪,可以在总体上将国内外代表性研究方法划分为两类:一类是特征模板匹配法。直接利用歌曲旋律的声学特征参数及乐理特征,建立起各旋律的特征模板(或者特征串),形成模板库,识别时利用从哼唱语音中提取的声学特征参数或音符串与各个特征模板/特征串进行匹配计算,得出判别结果。另一类是声学统计建模法。事先对歌曲旋律进行统计建模,采集代表性的哼唱语料训练出各旋律的声学模型,形成 ...
【技术保护点】
一种基于音符建模的哼唱式音乐检索方法,其特征在于,所述哼唱识别方法包括下述步骤:步骤A,于用户的哼唱语音中,提取各语音帧的音高,并保存为哼唱语音音高序列;步骤B,根据预先建立的音符模型参数库,利用步骤A提取的音高分别计算出当前语音帧属于所述音符模型参数库中各个音符模型的概率值,根据计算的概率值以及音符模型参数库对当前语音帧进行音符模型匹配识别,若当前语音帧与其前一相邻语音帧分属不同的音符模型时,记录下当前语音帧的帧号;步骤C,重复步骤A到步骤B,当哼唱语音依序逐语音帧全部处理完毕后,得出所述哼唱语音所对应的音符模型序列以及序列中各个音符模型的起始语音帧号,依次计算出每个音符模型所持续的语音帧数,对应为该音符模型持续的时长;步骤D,结合步骤A中得到的哼唱语音音高序列对步骤C中得到的音符模型及其时长序列进行修正处理,最终确定出所述哼唱语音所包含的音符模型序列及其相对应的时长序列,并表示成<音符,时长>的二元组序列形式;步骤E,对步骤D中得到的<音符,时长>二元组序列在预先建立的歌曲及旋律乐素结构库中进行匹配和相似度计算,按照相似度值由高到低进行排序,选取前若干名相似 ...
【技术特征摘要】
1.一种基于音符建模的哼唱式音乐检索方法,其特征在于,所述哼唱识别方法包括下述步骤:步骤A,于用户的哼唱语音中,提取各语音帧的音高,并保存为哼唱语音音高序列;步骤B,根据预先建立的音符模型参数库,利用步骤A提取的音高分别计算出当前语音帧属于所述音符模型参数库中各个音符模型的概率值,根据计算的概率值以及音符模型参数库对当前语音帧进行音符模型匹配识别,若当前语音帧与其前一相邻语音帧分属不同的音符模型时,记录下当前语音帧的帧号;步骤C,重复步骤A到步骤B,当哼唱语音依序逐语音帧全部处理完毕后,得出所述哼唱语音所对应的音符模型序列以及序列中各个音符模型的起始语音帧号,依次计算出每个音符模型所持续的语音帧数,对应为该音符模型持续的时长;步骤D,结合步骤A中得到的哼唱语音音高序列对步骤C中得到的音符模型及其时长序列进行修正处理,最终确定出所述哼唱语音所包含的音符模型序列及其相对应的时长序列,并表示成<音符,时长>的二元组序列形式;步骤E,对步骤D中得到的<音符,时长>二元组序列在预先建立的歌曲及旋律乐素结构库中进行匹配和相似度计算,按照相似度值由高到低进行排序,选取前若干名相似度最高的旋律作为最终的识别结果进行输出。2.如权利要求1所述的方法,其特征在于,所述歌曲及旋律乐素结构库包括每首歌曲的歌曲索引、歌名、演唱者、类型、放音文件存储位置以及该歌曲所包含的若干段关键旋律的旋律乐素结构,库中歌曲按照各自唯一的索引号进行分类和组织,歌曲与其对应的旋律乐素结构通过索引号进行关联,所述旋律乐素结构是指由在关键旋律中依次出现的每一个音符的音符名称和该音符的演唱时值构成的<音符,时值>单元结构依次形成的一个二元组序列,各旋律乐素结构通过歌谱或歌曲配套的MIDI文件按照乐理常识解析得出,按照自身所包含的二元组单元结构的个数多少进行排序;在所述歌曲及旋律乐素结构库中,采用下述步骤F1至F3将每首歌曲的关键旋律所对应歌谱中的音符逐一解析成<音符,时值>二元组序列结构中的音符元素:步骤F1,对于有调号标识的歌谱,将各个音符按照指定的调号进行平移;步骤F2,对于音符上有上弧线标识的连音线时,若连音线作用在同一个音符上,解析时不产生新音符,若连音线连接两个以上不同的音符,则解析时不考虑该连音线的影响,各自进行音符解析;步骤F3,歌谱中的休止符解析成静音,仍采用该休止符具有的时值;在所述歌曲及旋律乐素结构库中,采用下述步骤F4至F8将每首歌曲的关键旋律所对应歌谱中音符的时值逐一解析成<音符,时值>二元组序列结构中的时值元素:步骤F4,以每秒60拍的中等演唱速度作为转化的基准,将基准速度下演唱一拍的四分音符其时值表示为1数据单位,其余节拍音符据此类推出表示其时值的数据值;步骤F5,对于无特定速度标记的歌谱,其音符时值默认按照基准演唱速度进行转化;步骤F6,对于标记为快速、慢速的歌谱,根据乐理以基准演唱作为基准,对标记速度进行折算,计算出各音符的相对基准演唱速度的时值数据;步骤F7,对于附点音符,则多增加附点前面音符所对应时值的一半;步骤F8,对于音符上面有上弧线标识的连音线时,若连音线作用在同一个音符上,解析时不产生新音符,把前后所连的音符的时值相加,作为该音符的时值。3.如权利要求1所述的方法,其特征在于,所述音符模型参数库包含分别为处于低八度、中八度、高八度区段中的各个标准音符以及一个静音所建立的统计模型,每一个模型基于高斯混合建模技术进行建模,采用多个单高斯分布进行混合,通过如下公式对音符模型的概率密度函数G(x)进行加权混合计算:其中,M为包含的单一高斯分布的个数,αj为各个单一高斯分布的概率密度函数的混合权重,Pj(x,μj,Σj)的定义如下:其中,T表示矩阵的转置,x为待估算的哼唱语音帧的音高特征列向量,μ为模型期望,Σ为模型方差,μ、Σ均由若干训练样本语音帧的音高特征列向量cj得出,为均值向量,是协方差矩阵,n为训练样本的个数。4.如权利要求3所述的方法,其特征在于,所述音符模型的计算参数通过如下步骤训练得到:步骤G1,进行音符模型高斯混合概率密度函数计算参数的初始化,对于每一个音符模型,将该音符的国际标准音高作为所述计算参数的初始期望均值;步骤G2,在步骤G1音符模型计算参数初始化的基础上,利用从哼唱语料中提取出来的该音符的音高作为观察样本值,利用期望最大化算法进行最大似然估计,确定音符模型高斯混合概率密度函数的各个计算参数;步骤G3,依次根据步骤G1和G2训练得到的每一个音符模型,将哼唱语料中提取出来的所有音高观察样本值划分成两类,一类是属于该音符模型的接受域,另一类是不属于该音符模型的拒绝域,利用后验概率和似然比分析的方法对所述接受域和拒绝域所包含的观察样本值进行处理以确定该音符模型的拒识阈值。5.如权利要求1所述的方法,其特征在于,所述步骤E包括如下步骤:步骤E1,利用步骤D中得到的哼唱语音的<音符,时长>结构序列,提取出哼唱语音的音符前向间距序列DS[m]和音符时长序列TS[m],其中m为所述哼唱语音所包含的<音符,时长>二元结构的个数,所述音符前向间距是指关键旋律或哼唱语音所对应的音符序列中当前音符与下一相邻的音符之间的位置序号之差;步骤E2,在歌曲及旋律乐素结构库中依次选取出某一关键旋律的乐素结构,从中提取出所述关键旋律的音符前向间距序列DB[n]和音符时值序列TB[n],其中n为所述关键旋律所包含的<音符,时值>二元结构的个数;步骤E3,在哼唱语音的音符前向间距序列DS[m]和当前关键旋律的音符前向间距序列DB[n]之间搜索出最长公共音符子序列LCNS以及最长相似音符子序列LSNS,得出最长公共音符子序列LCNS的长度Lc、最长公共音符子序列LCNS在DB[n]中的起始位置LC_DB、最长公共音符子序列LCNS在DS[m]中的起始位置LC_DS、最长相似音符子序列LSNS的长度Ls、最长相似音符子序列LSNS在DB[n]中的起始位置LS_DB、最长相似音符子序列LSNS在DS[m]中的起始位置LS_Ds,并计算哼唱语音对当前关键旋律的最长公共音符子序列的音符相似度Lc/n和最长相似音符子序列的音符相似度Ls/n;步骤E4,对于步骤E3中得到的最长公共音符子序列LCNS、长度Lc、起始位置LC_DB和LC_DS,在哼唱语音TS[m]中定位出相应的时长序列区间TSK,在当前关键旋律TB[n]中定位出相应的时值序列区间TcBK,按照DTW动态规划方法,计算出最长公共音符子序列LCNS所对应的TcSK和TcBK序列区间的匹配度DTWc;步骤E5,对于步骤E3中得到的最长相似音符子序列LSNS、长度Ls、起始位置LS_DB和LS_DS,在哼唱语音TS[m]中定位出相应的时长序列区间TSSK,在当前关键旋律TB[n]中定位出相应的时值序列区间TSBK,按照DTW动态规划方法,计算出最长公共音符子序列LSNS所对应的TSSK和TSBK序列区间的匹配度DTWs;步骤E6,根据步骤E3至步骤E5得出的最长公共音符子序列的音符相似度Lc/n、最长相似音符子序列的音符相似度Ls/n、哼唱语音与当前关键旋律之间在最长公共音符子序列上的时间匹配度DTWc、哼唱语音与当前关键旋律之间在最长相似音符子序列上的时间匹配度DTWs,加权运算得到哼唱语音对当前关键旋律的综合相似度TScore,计算公式如下:TScore=w1*Lc/n+w2*Ls/n+w3/DTWc+w4/DTWs其中,w1,w2,w3,w4分别为预设的各项的权重系数;步骤E7,重复步骤E2至E6,直到歌曲及旋律乐素结构库中所有关键旋律都处理完毕,最后得到哼唱语音对所有关键旋律的综合相似度,并进行综合相似度排序,从中选取前若干名相似度高的作为旋律识别的结果进行输出;在所述步骤E3中,根据如下步骤搜索出最长公共音符子序列LCNS和最长相似音符子序列LSNS:步骤E31,建立搜索矩阵MatrixC[mxn]和MatrixS[mxn],初始化LCNS、LSNS的长度Lc、Ls以及起点位置均为0;步骤E32,设定步号i从1到m,步长为1,从DS[1]到DS[m]逐序列项与DB[n]中每项依次比较分析;步骤E33,设定步号j从1到n,步长为1,从DB[1]到DB[n]逐序列项与DS[i]进行比对处理,记录下中间结果;步骤E34,按照以下方法迭代生成公共音符子序列:当DS[i]=DB[j]时,LCNS[i,j]=LCNS[i-1,j-1]+DS[i],形成新的极长公共子序列,保存在搜索矩阵MatrixC中,更新极长公共子序列的长度Lc和分别在DS[m]及DB[n]中的起点位置;步骤E35,把音高紧邻,即音符之间的序位距离为1或-1的音符,作为音高相似音符,按照以下方法迭代生成相似音符子序列:当DS[i]=DB[j]或DS[i]=DB[j]+1或DS[i]=DB[j]-1时,LSNS[i,j]=LSNS[i-1,j-1]+DS[i],形成新的极长相似子序列,保存在搜索矩阵MatrixS中,更新极长相似子序列的长度Ls和分别在DS[m]及DB[n]中的起点位置;步骤E36,重复步骤E33到步骤E35,直到步号j进行到第n步为止;步骤E37,重复步骤E32到步骤E35,直到步号i进行到第m步为止;步骤E38,动态迭代完毕后,得到最长公共音符子序列LCNS的长度Lc、最长公共音符子序列LCNS对应于旋律模板DB[n]的起始位置,同时得到最长相似音符子序列LSNS的长度Ls、最长相似音符子序列LSNS对应于旋律模板DB[n]的起始位置;所述音符前向间距序列根据如下步骤生成:步骤H1,预先在从低八度到高八度的区间上按音高从低到高的顺序对音乐中全部音符依序排列,记录下各个音符的位置序号;步骤H2,对于歌曲及旋律乐素结构库中每一关键旋律的旋律乐素结构,从其<音符,时值>序列中依序逐一从中取出一个音符,计算该音符与其下一个邻音音符之间的位置序号之差,所述<音符,时值>序列处理完毕后,得出该关键旋律的音符前向间距序列;步骤H3,对于哼唱语音,根据在步骤D中识别出来的<音符,时长>序列,依序逐一从中取出一个音符,计算该音符与其下一个邻音音符之间的位置序号之差,所述<音符,时长>序列处理完毕后,得出该哼唱语音的音符前向间距序列。6.如权利要求1所述的方法,其特征在于,所述步骤B包括如下步骤:步骤B1,根据预先建立的音符模型参数库,对步骤A提取的当前语音帧的音高分别代入所述音符模型参数库中各个音符模型的高斯混合概率密度函数计算出所述语音帧属于各个音符模型的概率值;步骤B2,将当前语音帧与所述概率值中最大者所对应的音符模型进行匹配,当该最大概率值低于相应音符模型的拒识阈值时进行拒识处理;步骤B3,若匹配结果为当前语音帧与前一语音帧分属不同的音符模型时,记录下当前语音帧的帧号。7.一种基于音符建模的哼唱式音乐检索...