基于CQT和PCP的和弦识别算法
- 原理
-
- 声学基础
- 音乐理论基础
-
- 音高
- 十二平均律
- 音程与和弦
- 时频转换
- PCP特征向量
- 过程
- 源代码
- 结语
原理 声学基础 声音是物体振动时产生的波动现象,通过介质传达,最终由人或动物的听觉器官感知
声音的特征特性可以通过音量、音调、音色三个基本要素来实现
音量,即响度,是人耳对声音强度的主观感知,通常与声波的幅度有关
音调,是人类的耳朵对于声音强弱的一种主观感觉,通常与声波的频率有关
音色,又叫音品,是人类用来辨别区分具有相等的响度、相同的音调的两个不同的声音的一种特殊的性质,可以说是人类的耳朵,对于声音频率和响度的一种综合反应
音乐理论基础 音高
音高取决于发出声音的物体的振动频率,两者有正相关关系
我们平常讲的“标准音”,就是每秒振动440次的小字一组A音(频率为440hz)
十二平均律
音律,就是乐音体系中各音的绝对准确高度及其相互关系
包括五度相生律、纯律和十二平均律
这里我们只说一下现代音乐中最多使用的十二平均律
“十二平均律”通俗来说就是根据固定的比例将弦分割成十二个比值相等的部分
用钢琴举例,每两个相邻的琴键(对应相邻的乐音)之间的比为2^(1/12)
文章图片
音程与和弦
在乐音系统中,在一定的音高对应的两个乐音之间的间距关系被称为音程
和弦指的是,一组具有固定音程关系的声音
是将三个乐音或者三个以上的乐音,按照三度或者非三度,在纵向上加以重叠结合
和弦种类有很多,我们这个算法只涉及常见的大三和弦和小三和弦
这几乎可以用于大部分流行歌曲的和弦搭配
时频转换 我们知道每一个乐音都有相应的频率
反过来,只要提取到了相应的频率就可以找到对应的乐音
那么,对于构成一个和弦的多个音,说白了不就是一组频率嘛
但是,音乐是时间的艺术,我们常常都是在时域上提取信息
为了提取到频率的信息,就需要将时域转换到频域
可以这样理解,每一个频率的声波都是一个正弦波
我们听到的声音其实就是多个正弦波的线性和
转换到频域后,不同频率的幅度就会清晰的显示出来
文章图片
时频转换的算法有很多,在这里我们使用CQT算法,因其更符合乐音频率的提取
理论上,这样我们就可以轻松的提取出构成和弦的音
PCP特征向量 音级轮廓图(PCP)特征是由 Fujishima 在 1999 年提出的
是一种用于频谱对应音级的 12 维特征向量,每一维向量分别代表了一个半音音级
将提取出来频率对应各个乐音,符合的乐音为1,不符合的为0
例如C Major的PCP特征向量为
[1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]
【python算法设计|基于CQT和PCP的和弦识别算法】对应C Major的构成就是
[C, C#, D, D#, E, F, F#, G, G#, A, A#, B]
过程 和弦识别算法主要包括以下几个部分:
- 读取音频文件,对音频在时域方面进行处理
- 时域频域转换
- 将提取到的谐波分量信息转化为色谱图
- 和弦与PCP匹配
结语 欢迎热爱编程的小伙伴关注我的github博客
以及我的github仓库
里面有一些前端小技巧以及python算法设计跟大家一起分享
我们一起每天进步一点点!
推荐阅读
- 神经网络|大盘点 | 2020年21篇医学影像算法最佳综述
- 人工智能|机器学习13种算法的优缺点,你都知道哪些()
- 人工智能|高考作文(如何下好“数据治理”这盘大棋())
- python|【Python基础篇007】带你超深度剖析Python装饰器函数
- 编程语言|2022,前端工具链十年盘点
- 网络|QUIC 是如何解决TCP 性能瓶颈的()
- 学习教程|人工智能机器人发展前景,使用/教程/实例
- 人工智能导论|人工智能导论(10)——机器人(Robot)
- 人工智能|6 个主流 AI 聊天机器人平台