当前课程知识点:计算机音乐 > 第六章 高音跟踪 > 6.4 K歌评分 > K歌评分
同学们大家好
接下来这一节
我们将会以K歌评分
作为音高跟踪算法这一章的实践
我们身边有很多音乐应用
基本上都实现了K歌评分的功能
比如像唱吧好唱天籁K歌
全民K歌咪咕爱唱等等
那么从音乐学上来说
对声乐作品进行评分
是一件非常高维度的工作
我们不仅需要对音准
节奏
强弱的控制等等这些可以
量化的指标进行评价
甚至还需要对
音色气息情感这些主观的指标也进行评价
但目前我们能看到的这些应用
主要还是以音高曲线作为
评分标准的
因此它们的基础便是音高跟踪
要完成K歌评分应用
我们还需要一个标准的数据库
那么有版权问题
在那些我们平时常听的流行歌当中
想获纯人声的分轨
并且对他们做一些标记呢
几乎是不可能的
但是也有一些研究者
自己录制了一些数据库
比如ikala互动媒体
制作的ikala数据库
以及专门用于声音分离比赛的
sisec数据库
也称之为dsd100
还有专门的用于旋律提取的
medleydb数据库
那么作为示例我们今天研究的对象便是
吴奇隆的一首老歌
祝你一路顺风的片段
当然ikala的数据库并不是
吴奇隆本人录制的
但由于参与ikala数据库录制的歌手
也是一些专业的歌手
所以我们可以用这个数据库的声音作为
参考的音高
我们先来听一下这段声音
让我们也可以来录制一下这段声音
然后去做一下比较
我知道你有千言
你有万语
却不肯说出口
那么我并不是专业的
所以
人听着这一段声音就会觉得有一些跑调
或者抢拍的问题
我们接下来就用python程序
来进行一下音高跟踪
并且可以对这两者的音高曲线进行比较
看一下这个差别具体在哪
这次我们将使用
一个第三方的模块aubio
这个模块来调用他的
已经写好的音高跟踪算法
aubio的python模块
它在官方的文档上面说
可以直接在TABLE上进行安装
但实际上最新的版本
在windows里面是不能用TABLE进行安装的
他最新版本的说明文档里面有说
我们可以用conda进行安装
那么在
Install aubio from source里面
我们可以看到
我们可以用conda来安装一个
已经编译好的文件
那么我们接下来就直接安装这个aubio
因为我们是windows版本的
所以我们按照他说的
在windows里面我们可以直接用conda install-C
从这个conda fourge里面去安装aubio
安装它需要一定的时间去下载
那么因为我们之前已经安装好了
所以其实待会它会提示安装已经装好了
好这里它会提示有一些控件需要更新
那么我们点Y继续就可以了
它会自动的下载更新
全部完成之后
我们就可以使用aubio这个库了
好我们根据aubio官方提供的文档
我们知道它在使用之前
需要从aubio里面去
import source跟pitch两个模块
那么import sourc主要是用来读取音频文件的
pitch是用来做音高跟踪的
那么下面的音频的读取方法都是
直接从aubio的官方文档里面摘取的
那么我们读了两个文件
一个文件是ikala test.way
这是ikala里面的
祝你一路顺风的这个
音频片段的样本
那么S2是我刚才唱的这个样本
那么我们打算比较一下这两个文件的
音高曲线是否匹配
那么这个pitch我们按照它的官方文档需要
去调用pitch函数
来构建一个pitch O这样的一个函数
那么在构建之前你需要
把windows S
就是作傅里叶变换的窗口的大小以及
窗距给进行一个输入
好那么接下来按照它的官方文档的推荐
我们需要用一个while循环
那么第一个while循环我们把
第一个音频的音高的曲线进行提取
并且全放在pitch1里面
第二个循环我们把
第二个文件的音高进行提取
并且放在pitch2里面
然后我们把这两个音高曲线绘制出来
运行一下看一下结果
好了我们存储的文件应该叫做kala test
好运行一下看一下结果
我们从这个结果里面能看到
蓝色的曲线是
ikala数据库里面的一个标准曲线
橙色曲线是我唱的一个版本
我们在音高提取过程中依然会遇到类似
我们自己写的音高提取程序一样
那么在间隔的地方
它会有提取的不准的地方
所以如果你要去设计这个
音高比对程序的时候
我们可以对音高的范围做一个限定
只有在人声的范围以内我们才做比较
那么超过了这个乐曲的范围
我们就不做这个比较
那么这也是可以
一定程度去
降低错误率的一个方法
那么从这曲线的匹配上来看
我们唱的版本有一点点
这个地方有一点点拖拍
那么这地方有一点点抢拍
但是从音高的曲线的整体的趋势来看
还是基本上跟
标准版本的趋势是一样的
那么课下同学们可以
想办法来设计一下这个
不同的音高曲线之间怎么做这个比对
可以自己来设计一下这个评分的程序
让我们来对这一章节的课程
进行一个总结
音高是我们在音乐生活当中
非常重要的信息
那么在时域当中它表现为信号的周期
当然由于我们平时处理的声音
基本上并不是严格的周期的信号
所以音高在时域上的定义是比较模糊的
那么如果我们考察的声音是和谐的乐音
也就是说它的峰值是成整数倍分布的
那么我们就可以在频域当中
把音高定义成峰值之间的间隔
这样后我们就可以用频域的处理方法
去求出这个间隔
但总而言之
无论是用哪种方法去计算音高
我们都只能对一个小窗口
去计算音高
因此音乐的音高
通常是随时间变化的
这时候窗口的大小的选择
就会显得尤其的重要
我们今天的课程只是介绍一些基本的算法
真正使用算法往往需要更多的一些预处理
甚至使用机器学习的方式进行
那么更多的扩展就交由同学们在课下进行
关于音高跟踪的介绍就介绍到这里
下节课我们再见
-欢迎辞
-1.1 计算机音乐导言
--计算机音乐导言
-1.2 计算机音乐课程主要内容
-1.3计算机音乐课程资源
-1.4 音乐的基本表达
--音乐的基本表达
-第一章作业
-2.1时域音频处理概述
--时域音频处理概述
-2.2 分窗处理1:OLA叠放
-2.3 分窗处理2:音量计算
-2.4 端点检测
--端点检测
-2.5 振幅包络
--振幅包络
-2.6 音频信号相乘
--音频信号相乘
-2.7 环形调制
--环形调制
-2.8 频率调制
--频率调制
-2.9 频率调制在音乐上的应用
-第二章作业
-3.1 频谱概述
--频谱概述
-3.2 傅里叶变换
--傅里叶变换
-3.3 短时傅里叶变换
--短时傅里叶变换
-3.4 加法合成
--加法合成
-3.5 线性滤波器
--线性滤波器
-3.6 京剧锣鼓经分析
--京剧锣鼓经分析
-第三章作业
-4.1 音色合成概述
--音色合成概述
-4.2 质点弹簧阻尼模型
--质点弹簧阻尼模型
-4.3 双线性滤波器
--双线性滤波器
-4.4 Modal合成
--Modal合成
-第四章测试
-5.1 一维振动模型概述
--一维振动模型概述
-5.2 弦振动模型
--弦振动模型
-5.3 达朗贝尔的行波解
--达朗贝尔的行波解
-5.4 梳状滤波器
--梳状滤波器
-5.5 Karplus Strong算法
-5.6 管状气鸣乐器模型
--管状气鸣乐器模型
-第五章作业
-6.1 音高跟踪概述
--音高跟踪
-6.2 时域音高跟踪
--时域音高跟踪
-6.3 频域音高跟踪
--频域音高跟踪
-6.4 K歌评分
--K歌评分
-第六章作业
-7.1 音频同步概述
--音频同步概述
-7.2 音乐特征提取 CQT
-7.3 音乐特征提取 Chroma
-7.4 动态时间规划概述
--动态时间规划概述
-7.5 动态时间规划实现
--动态时间规划实现
-第七章作业