前言

这篇文章不是讲乐理知识的,那是音乐制作人,编曲人员所需要钻研的学问,不过你要有兴趣也可以看看专业的乐理知识。

这里仅仅是说在音乐信号分析的项目中,我们需要知道的一些参数的意义。

在诸多信号处理,或图像处理算法的博客中,我没有找到有人能把一个算法说清楚的,比如给出一堆复杂公式,但没有说明参数代表的意义,这一点是非常浪费阅读者的时间的。或者说公式里的参数字母表示经常更换,在不同的场景中,更换很多种字母,以及公式的变形。这是对学习者非常不利的。包括编程语言实现一些算法的博客,比如写一个算法的 python 实现,代码写了一堆但最后波形展示的时候,连一句 plt.show() 都没写上去,导致追问的新手要花大量的时间继续寻找答案,有基础的人当然能看出来代码没写全。不过现在的很多算法都有库,但是有些库经常更新,导致很多文档中提到的一些函数已经失效,这时候如果你知道基本原理,就可以从底层实现,自己定义一些 function 来解决问题,如果你没有这个自我从底层实现算法的能力,那估计你要在茫茫的网络深海中捞针试图找到答案了。不过遗憾的是,好像市面上没有一些从 0 实现的算法文档说明,每个人都在调用。感性的说个数字,我觉得应该有 95% 以上的博主写算法文章都说不清楚情况,导致我们一切问题都会在 stackoverflow 上寻找一些零碎的答案。

写算法就要说清楚公式的参数,否则只是浪费大家时间,写得清楚公式参数的意义才配称得上是算法工程师。

音乐形式简述

根据音乐数据的不同形式,可以将音乐的表示分为以下三类:

声音文件类型

声音通过录音设备采样后的一种文件类型,以二进制采样数据的形式直接记录了那些真实的音乐或者语音音频文件,是世界上目前应用最普遍的音频表示形式。这种声音文件类型的存储方式有很多中,常用的有压缩格式和非压缩格式两种。压缩格式包括 mp3、rm 等,而非压缩的格式包含了 pcm、wav 等。但这种文件类型的缺点是需要比较大的存储空间。

符号文件类型

MIDI(Musical Instrument Digital Interface)文件格式类型是最常见的结构化符号的音乐表示,记录了丰富的音乐信息:音乐演奏的方式、音符以及音调等语义信息。MIDI 文件实际是一种能够描述音乐乐谱的音乐节奏指令序列。此外还有 GUIDO(一位音乐理论家的名字)、SMDL(Standard Music Description Language)、NIFF(Notation Interchange File Format)等类型。

模块文件类型

实际包含了 MIDI 和数字音频两种文件类型的特性。它除包含有乐器演奏指令和声音的数字采样信号外,对音频硬件的依赖性并不大。根据编码方式的不同,模块文件的格式有 MOD、XM、MTM、KAR、IT。

音级轮廓特征提取

根据音乐作品内容的差异性,可以通过不同层次对音乐进行研究。一般来讲,音乐可分为 Low-Level、Mid-Level、High-Level 三个层次。根据音乐理论以及音乐的表现形式,这三个层次的音乐特征可以分别描述为基本特征、部分特征和整体特征。

音乐的基本特征通常包括音高、音色、音强等,它们代表了音频信号的一些固有特征。按照相关的音乐理论将一种或者几种基本特征详解后就组成了部分特征,包括节奏、音程、和弦等。同基本特征相比,部分特征具有一定的语义特性,是统计模型和机器学习中常用的方法。

音乐的和弦特征是音乐信号处理中广泛使用的一种信号特征,并且和弦识别在计算机自动伴奏,歌曲翻唱识别以及音频匹配等领域具有重要作用。特征提取和和弦识别分类是音乐和弦自动识别研究中两个最重要的截断。和弦识别系统可以看另一篇文章

节拍跟踪

音乐的节奏作为音乐的灵魂,在表达音乐美中始终保持着重要的地位。没有节奏就失去了表达音乐思维的能力。

“拍”是节奏的一个方面,同时也是计量音乐演奏快慢的一种度量单位。

一般用节奏来表示音乐每分钟的拍数,单位为 BPM,表示每分钟的节拍个数。节奏较快的音乐,节拍值大;节拍较慢的音乐,节拍值小。一般情况下,音乐的速度集中在每分钟 20 到 300 节拍数之间。用某一个节拍出现的时间点来表示节拍点位置。将相邻两个节拍点之间的间隔称为节拍间隔。它们时间的关系表达式:

\displaystyle

B_v=\frac{60}{B_r}\\{}\\

B_v=节拍值\\{}\\

B_r=节拍间隔

节拍跟踪用于获取音乐信号中的节拍信息,确定每个节拍在信号中的大致时间位置。它是自动伴奏及转录、计算机辅助音频编辑以及音乐相似性等应用的基础,同步节拍特征也是归一化不同音乐版本之间速率变化的一种很好的途径。

此外,由乐理知识可知,音乐中和弦的改变往往发生在节拍处,因此进行和弦识别时先对相应的音频进行节拍的跟踪检测,之后再进行音频分割,优点就是可以有效避免将同一个和弦分割在不同的音频段或者是同一音频段中包含有多个和弦的情况。在音乐信号处理中增加节拍跟踪的方法可以很好的提高和弦的识别率。

比如动态节拍跟踪算法,包括起始点能量包络、自相关最佳速率估计和节拍检测三部分组成。

音乐信号预处理:主要是对信号进行去燥。将完成预处理的音乐全部转化成 mp3 格式,采样率为 11025Hz,单声道标准音乐文件。

将音频信号进行 FFT,通过一个权重矩阵将傅里叶频谱变成 40 维 Mel 频谱。计算每一维频谱沿时间轴的一阶拆分(只有起始点信息),然后将整个频谱内的值相加,滤除直流后得到起始能量包络。

对整个信号的能量进行起始自相关运算,然后加高斯窗,在其对数域上取单一主峰值,将自相关中最大的滞后值作为最佳的速率估计。

最后将起始能量包落和全局速率输入节拍检测模块,通过同台规划算法获取节拍的时间位置信息,完成节拍跟踪。

PCP 特征介绍

人类听觉系统对声音的感知过程类似于频域中对信号频谱的分析过程。对于音频文件信息而言,标准的模式识别方法通常依赖于广泛的特征。一般这些特征都描述了声音的音色或者文本结构的一些特性,或者都是一些语音识别应用中对人类听觉系统光谱特征相应建模的音频特征。当处理音乐信号时,可以使用表示音乐信号的一些特征描述,其中最显著的一个特征就是音乐在旋律和谐波方面八度的等效一致性。

Shepard 提出了使用二维空间来表示音高的感知结构,他认为使用二维的螺旋形来表示人类对音高的听觉系统感知比使用一维的线来表示要准确,并由此提出用音高(Pitch)和音级(Chroma)两项来分别代表垂直和弧度维:

在这样的表示中,随着音符音高的增加,比如说从 C1 到 C2,它的位置沿着螺旋线向上移动,在重新到达原始音高级 C 之前,它绕所有的音高级(音级依次为 C -> C# -> D,, -> G#)完成一次旋转。音高描述了音乐的声调随频率的增加而增加,而音级则表示在某个倍频程里的循环。因此相差整数倍频的音属于同一个音级。根据 Shepard 的结果,信号的感知音高能够转换成音级(chroma)值和音调,表示为:

p=2^{h+c}

这样的分解是位移的,它满足c\in [0,1],\ h\in Z。c的线性变化,通过将间隔 0 到 1 分成 12 等份,可以获得等音阶的 12 个音级。Shepard 的表示形式表明两个音高之间的距离依赖于 c 和 h,而不仅仅跟 p 有关。在音高(Tone height)方向上表示了音所在的倍音程;在水平方向,如图所示的逆时针运动方向表明了音属的音级。途中一共包含了 A –> G# 12 个音级。

音级特征 PCP 通过结合音乐理论并且重建频谱使其成为了音级谱。同时 PCP 特征的一种重要特征就是可以进行能量压缩,将众多泛音以多对一的方式映射到少数的音级上。例如,考虑一个具有 20 个元素的和声序列被映射成了 10 个不同的音级值,并且 20 个元素中的 13 元素 仅仅映射为四个不同的音级值,并将该音级分布作为了和声的一系列的和弦模版。因此我们能够很容易地想到使用这个特性来代替音频信号,从而取识别一个特定信号的音级值。

在一些情形中,MFCC 特征是音级特征的一种补充,最初 MFCC 应用在音频信号处理中,后来应用到了不同的音乐分析任务重,其中就包括有音乐类型分类和乐器识别等,一般认为低频处的 MFCC 系数跟音色相关,当忽略这种信息是,我们在一定程度上可以获取相对固定的音色,这样就会增加对不同乐器种类相同音级特征的鲁棒性。对此可以引进来对信号音高系数 PFCC(Pitch Frequency Cepstral Coefficients)的处理。

本作品采用《CC 协议》,转载必须注明作者和本文链接

不要试图用百米冲刺的方法完成马拉松比赛。

计算机算法音乐专业,音乐信号分析算法的乐理简说(非音乐专业的乐理)相关推荐

  1. python关联规则apriori算法_Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战...

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. 这次呢,我们会在上次的基础上,讲讲如何分析物品的关联规则得出关联 ...

  2. JVM——引用计数算法与可达性分析算法

    前几篇博客我们一起认识了JVM的内存模型(程序计数器.虚拟机栈.本地方法栈.方法区与堆),了解了它们的内存结构与分配,同时也略带提到关于内存的回收. JVM--内存模型(一):程序计数器 JVM--内 ...

  3. 编译原理简单优先分析算法

    简单优先分析算法 编译原理简单优先分析算法是一种自下而上的分析算法,本例是编译原理第三版何炎祥中一个简单优先分析算法的例子,未给出分析过程分析代码,读者可以参考我的语法分析器中输出代码,写出此算法的输 ...

  4. 【音频处理】Melodyne 导入音频 ( 使用 Adobe Audition 录制音频 | 在 Melodyne 中打开录制的音频 | Melodyne 对音频素材的操作 | 音频分析算法 )

    文章目录 一.使用 Adobe Audition 录制音频 二.在 Melodyne 中打开录制的音频 三.Melodyne 对音频素材的操作 四.Melodyne 音频分析算法 一.使用 Adobe ...

  5. 链接挖掘算法之PageRank算法和HITS算法

    参考资料:http://blog.csdn.net/hguisu/article/details/7996185 更多数据挖掘算法:https://github.com/linyiqun/DataMi ...

  6. 大学计算机英语专业感想感知,非英语专业大学生英语感知学习风格研究

    摘要: 最近几年,研究者越来越注重研究学习者的心理因素和个性差异.学习风格作为个性差异的一部分对学习者的影响很大. 作者使用Reid(1987)<感知学习风格偏好问卷>调查研究了西华大学1 ...

  7. Python编曲实践(九):如何计算并估计音乐的调性(大/小调+主音)?Krumhansl-Schmuckler调性分析算法的原理与实现

    前言 之前,我在 Python编曲实践(五)中记录了构建MIDI数据集Free MIDI Library的过程,其中预处理阶段十分重要的一个步骤是移调,即把所有音乐的调性调整为C大调或A小调,这样会使 ...

  8. 【计算机毕业设计】Java基于协同过滤算法的音乐推荐系统

    毕设帮助.开题指导.源码交流,联系方式见文末.. 音乐检索系统的开发目的是使音乐检索模式转变成信息管理,为音乐检索人员提供方便条件.对音乐检索的实际情况进行调研之后,进行详细的需求分析,对现有的管理模 ...

  9. 声音信号基音提取算法基频和谐波处理分析

    1.内容简介 略 293-可以交流.咨询.答疑 2.内容说明 略 一. 实验原理: 傅里叶变换建立了信号频谱的概念.所谓傅里叶分析即分析信号的频谱(频率构成).频带宽度等.要想合成出一段音乐,就要了解 ...

最新文章

  1. 自动布局按钮排列平均分布
  2. “编程能力差的程序员,90%会输在这点上”谷歌AI专家:其实都是瞎努力
  3. 马斯克在线“求逮捕”:美国县政府不让特斯拉复工,钢铁侠彻底怒了
  4. 纯CSS3实现宽屏二级下拉菜单
  5. 解决:adb 提示adb server version(31) doesn‘t match this client(41) 解决办法
  6. 用计算机KADIO算方差,KADIO计算器怎样算方差
  7. 08.update_by_query操作
  8. basename php 中文,php basename不支持中文怎么办
  9. [Dart] Flutter开发中的几个常用函数
  10. 第三讲 配置SCCM客户端并添加角色
  11. Amaze UI后台管理模板 v2.7.2
  12. telink BDT 工具使用说明
  13. busboy文件上传遇到的坑,已解决
  14. android模拟器 权限管理,Android模拟器上未授予权限
  15. mac虚拟摄像头插件_VCam虚拟摄像头(电脑虚拟摄像头视频软件)V5.4.2 官方最新版...
  16. 笔记本电脑f11功能键_笔记本电脑按键功能详细图解_笔记本电脑键盘功能详细介绍是什么-win7之家...
  17. 郑厂长系列故事——排兵布阵 状态压缩DP
  18. CorelDRAW x4提示非法软件产品被禁用解决方法教程
  19. ionic Android编译打包出错:Failed to install 'cordova-plugin-code-push'
  20. 如何检测机器是否支持TPM

热门文章

  1. 使用 Exceptionless 作为 Log Server 搭配 NLog 记录系统日志
  2. C#工业物联网和集成系统解决方案的技术路线
  3. python读取oracle数据库性能_用python对oracle进行简单性能测试
  4. 【ArcGIS微课1000例】0015:ArcGIS如何创建/自定义快捷键?
  5. 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》
  6. C语言基于dag的基本块优化,基于dag的基本块优化参考.docx
  7. android模拟器无法拍照,为什么dafault相机无法在android模拟器中工作?
  8. php ftp 创建文件夹失败,PHP使用FTP函数创建目录
  9. 单身的原因终于找到了!原来是这几个......
  10. 高一被清华姚班录取,高三委拒谷歌offer,一个重度网瘾少年到理论计算机科学家的蜕变...