论文为:COCHONUT: Recognizing Complex Chords From MIDI Guitar Sequences
出处:international symposium/conference on music information retrieval(ISMIR) 2008
 
自动和弦辨别的难点:
strong context dependency and the large number of possible combinations of the intervals which the chords are made of, specially when dealing with dissonances,and suspended chords.
论文提出一个新的方法COCHONUT (Complex Chords Nutting)来识别midi guitar的和弦,基于contextual harmonic information + decision theory + optimization + pattern matching + rule-based recognition
COCHONUT的目标不仅是辨认1,3,5音,复杂音符,4音符,5音符,6音符和弦也能被辨认出来。
 
代码中是基于musicXML来进行解析,因此可以得到歌曲大小调标志(后续根据上下文来增强识别和弦时需要用到)
第一步,a segmentation algorithm判断出最可能的和弦变化的点,这一步做分割。主要函数
,segments是一个记录了n个segment的list,每一个segment记录了一段共用和弦的时间段。划分原理大概是基于note的数量的。这里
 
第二步,utility function判别每个segmentation的和弦;

这里构建了一个weight权重数组(12音阶),统计出该段中的音符值次数(权重比例),将该权重数组与事先定义好的和弦template一起匹配,得到每个和弦的得分,并得出最佳得分的和弦。

templates = [{'name': 'maj', 'pattern': [0, 4, 7]},
{'name': 'minor', 'pattern': [0, 3, 7]},
{'name': 'diminished', 'pattern': [0, 3, 6]},
{'name': '-5', 'pattern': [0, 4, 6]},
{'name': 'aug', 'pattern': [0, 4, 8]},
{'name': 'sus4', 'pattern': [0, 5, 7]},
{'name': 'sus2', 'pattern': [0, 2, 7]},
{'name': 'maj7', 'pattern': [0, 4, 7, 11]},
{'name': 'maj7+5', 'pattern': [0, 4, 8, 11]},
{'name': 'dom', 'pattern': [0, 4, 7, 10]},
{'name': 'add9', 'pattern': [0, 4, 7, 14]},
{'name': '1/2dim', 'pattern': [0, 3, 6, 10]},
{'name': 'dim7', 'pattern': [0, 3, 6, 9]},
{'name': 'min7', 'pattern': [0, 3, 7, 10]},
{'name': 'min/maj7', 'pattern': [0, 3, 7, 11]},
{'name': '7+5', 'pattern': [0, 4, 8, 10]},
{'name': '7-5', 'pattern': [0, 4, 6, 10]},
{'name': '7sus4', 'pattern': [0, 5, 7, 10]},
{'name': 'maj6', 'pattern': [0, 4, 7, 9]},
{'name': 'minor6', 'pattern': [0, 3, 7, 9]},
{'name': 'madd9', 'pattern': [0, 3, 7, 14]},
{'name': 'm6/9', 'pattern': [0, 3, 7, 9, 14]},
{'name': '6add9', 'pattern': [0, 4, 7, 9, 14]},
{'name': '7/6', 'pattern': [0, 4, 7, 9, 10]},
{'name': '9', 'pattern': [0, 4, 7, 10, 14]},
{'name': '7/13', 'pattern': [0, 4, 7, 10, 21]},
{'name': '9-5', 'pattern': [0, 4, 6, 10, 14]},
{'name': '9+5', 'pattern': [0, 4, 8, 10, 14]},
{'name': 'min9', 'pattern': [0, 3, 7, 10, 14]},
{'name': '7-9', 'pattern': [0, 4, 7, 10, 13]},
{'name': '7+9', 'pattern': [0, 4, 7, 10, 15]},
{'name': 'maj9', 'pattern': [0, 4, 7, 11, 14]},
{'name': 'min/maj9', 'pattern': [0, 3, 7, 11, 14]},
{'name': '9/6', 'pattern': [0, 4, 7, 9, 10, 14]},
{'name': 'maj11', 'pattern': [0, 4, 7, 11, 14, 17]},
{'name': '9+11', 'pattern': [0, 4, 7, 10, 14, 18]},
{'name': '11', 'pattern': [0, 4, 7, 10, 14, 17]},
{'name': '11-9', 'pattern': [0, 4, 7, 10, 13, 17]},
{'name': 'aug11', 'pattern': [0, 4, 7, 10, 14, 18]},
{'name': 'min11', 'pattern': [0, 3, 7, 10, 14, 17]},
{'name': 'min13', 'pattern': [0, 3, 7, 10, 14, 17, 21]},
{'name': 'maj13', 'pattern': [0, 4, 7, 11, 14, 17, 21]},
{'name': '13', 'pattern': [0, 4, 7, 10, 14, 17, 21]},
{'name': '13-9', 'pattern': [0, 4, 7, 10, 13, 17, 21]},
{'name': '13-9-6', 'pattern': [0, 4, 6, 10, 13, 17, 21]},
{'name': '13-9+11', 'pattern': [0, 4, 7, 10, 13, 18, 21]},
{'name': '13+11', 'pattern': [0, 4, 7, 10, 14, 18, 21]},
{'name': '13b', 'pattern': [0, 4, 7, 10, 14, 17, 20]}]
 

接下来,把前后相关的segments和调式一起结合起来,从上下文的角度来增强和弦挑选的准确性。

大调和小调的区别处理

事先定义好的和弦走向转换图

第三步,graph is built表示出最可能的和弦整体图,A rule base containing common chord sequences patterns in jazz harmony is used to solve ambiguous cases.
 
 
 
 

基于COCHONUT做和弦识别的更多相关文章

  1. 基于Python使用SVM识别简单的字符验证码的完整代码开源分享

    关键字:Python,SVM,字符验证码,机器学习,验证码识别 1   概述 基于Python使用SVM识别简单的验证字符串的完整代码开源分享. 因为目前有了更厉害的新技术来解决这类问题了,但是本文作 ...

  2. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  3. 基于ARM的车牌识别技术研究与实现

    在云盘里包含了我本科毕业设计的全部资料和代码.主要涉及下面摘要中的几个部分.虽然系统无法实用,但是适合机器视觉和嵌入式方向的入门.希望能对有志从事相关方向的朋友有所帮助.本人现在在深圳从事机器视觉算法 ...

  4. 基于FPGA的数字识别的实现

    欢迎大家关注我的微信公众号:FPGA开源工作室     基于FPGA的数字识别的实现二 作者:lee神 1 背景知识 1.1基于FPGA的数字识别的方法 通常,针对印刷体数字识别使用的算法有:基于模版 ...

  5. 【文智背后的奥秘】系列篇——基于CRF的人名识别

    版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/133 来源:腾云阁 https://www.qclou ...

  6. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  7. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  8. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  9. 基于ORB-SLAM2的图片识别

    基于ORB-SLAM2的图片识别,其功能是首先运行ORB-SLAM2,在运行过程中调起另一个线程进行图像识别,识别成功后在图片上渲染AR中的立方体模型. 识别过程主要基于ORB-SLAM2中的BoW算 ...

随机推荐

  1. 2016 Multi-University Training Contest 7 solutions BY SYSU

    Ants 首先求出每个点的最近点. 可以直接对所有点构造kd树,然后在kd树上查询除本身以外的最近点,因为对所有点都求一次,所以不用担心退化. 也可以用分治做,同样是O(NlogN)的复杂度. 方法是 ...

  2. React Native资料汇总

    React Native 官方文档中文版翻译 http://wiki.jikexueyuan.com/project/react-native/homepage.html REACT NATIVE开发 ...

  3. python学习之-- logging模块

    logging模块功能:提供了标准的日志接口,可以通过它存储各种格式的日志.日志5个级别分:debug(),info(),warning(),error(),critical() logging.ba ...

  4. 2017多校Round3(hdu6056~hdu6066)

    补题进度:7/11 1001 待填坑 1002 待填坑 1003(set) 题意: 给定长度为n(n<=5e5)的数组(是n的一个排列)和一个整数k(k<=80),f[l,r]定义为区间[ ...

  5. Spring Boot修改Thymeleaf版本(从Thymeleaf2.0到3.0)

    Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spring boot 1.4.0+才 ...

  6. mysql.bat

    cls  @echo off :设置窗口字体颜色 color 0a  :设置窗口标题 TITLE MySQL管理程序    call :checkAdmin    goto menu :菜单 :men ...

  7. Spring基于Java的配置

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/java-based-configuration.html: 基于Java的配置选项,可以使你在不用 ...

  8. @Aspect注解无效

    Pointcut的execution配置正确的话,检查下,是否加了以下jar包 <!-- http://mvnrepository.com/artifact/org.aspectj/aspect ...

  9. 【转】面向切面编程-AOP,挺有用的

    原文:http://blog.csdn.net/yangzhihello/article/details/40377399 下面的代码有点问题, ins[methodName] = function( ...

  10. @Retention n. 保留

    @Retention n. 保留 学习了:https://blog.csdn.net/asdgbc/article/details/70196749 默认都是保留到class中,而在runtime中没 ...