音乐信号分析算法的乐理简说(非音乐专业的乐理)

前言

这篇文章不是讲乐理知识的,那是音乐制作人,编曲人员所需要钻研的学问,不过你要有兴趣也可以看看专业的乐理知识。
这里仅仅是说在音乐信号分析的项目中,我们需要知道的一些参数的意义。

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

音乐形式简述

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

  • 声音文件类型
    声音通过录音设备采样后的一种文件类型,以二进制采样数据的形式直接记录了那些真实的音乐或者语音音频文件,是世界上目前应用最普遍的音频表示形式。这种声音文件类型的存储方式有很多中,常用的有压缩格式和非压缩格式两种。压缩格式包括 mp3rm 等,而非压缩的格式包含了 pcmwav 等。但这种文件类型的缺点是需要比较大的存储空间。
  • 符号文件类型
    MIDI(Musical Instrument Digital Interface)文件格式类型是最常见的结构化符号的音乐表示,记录了丰富的音乐信息:音乐演奏的方式、音符以及音调等语义信息。MIDI 文件实际是一种能够描述音乐乐谱的音乐节奏指令序列。此外还有 GUIDO(一位音乐理论家的名字)、SMDL(Standard Music Description Language)、NIFF(Notation Interchange File Format)等类型。
  • 模块文件类型
    实际包含了 MIDI 和数字音频两种文件类型的特性。它除包含有乐器演奏指令和声音的数字采样信号外,对音频硬件的依赖性并不大。根据编码方式的不同,模块文件的格式有 MODXMMTMKARIT

音级轮廓特征提取

根据音乐作品内容的差异性,可以通过不同层次对音乐进行研究。一般来讲,音乐可分为 Low-Level、Mid-Level、High-Level 三个层次。根据音乐理论以及音乐的表现形式,这三个层次的音乐特征可以分别描述为基本特征、部分特征和整体特征。
音乐的基本特征通常包括音高、音色、音强等,它们代表了音频信号的一些固有特征。按照相关的音乐理论将一种或者几种基本特征详解后就组成了部分特征,包括节奏、音程、和弦等。同基本特征相比,部分特征具有一定的语义特性,是统计模型和机器学习中常用的方法。
音乐的和弦特征是音乐信号处理中广泛使用的一种信号特征,并且和弦识别在计算机自动伴奏,歌曲翻唱识别以及音频匹配等领域具有重要作用。特征提取和和弦识别分类是音乐和弦自动识别研究中两个最重要的截断。和弦识别系统可以看另一篇文章基于 SVM 和增强型 PCP 特征的和弦识别了解。

节拍跟踪

音乐的节奏作为音乐的灵魂,在表达音乐美中始终保持着重要的地位。没有节奏就失去了表达音乐思维的能力。
“拍”是节奏的一个方面,同时也是计量音乐演奏快慢的一种度量单位。
一般用节奏来表示音乐每分钟的拍数,单位为 BPM,表示每分钟的节拍个数。节奏较快的音乐,节拍值大;节拍较慢的音乐,节拍值小。一般情况下,音乐的速度集中在每分钟 20300 节拍数之间。用某一个节拍出现的时间点来表示节拍点位置。将相邻两个节拍点之间的间隔称为节拍间隔。它们时间的关系表达式:

\displaystyle B_v=\frac{60}{B_r}\\{}\\ B_v=节拍值\\{}\\ B_r=节拍间隔

节拍跟踪用于获取音乐信号中的节拍信息,确定每个节拍在信号中的大致时间位置。它是自动伴奏及转录、计算机辅助音频编辑以及音乐相似性等应用的基础,同步节拍特征也是归一化不同音乐版本之间速率变化的一种很好的途径。
此外,由乐理知识可知,音乐中和弦的改变往往发生在节拍处,因此进行和弦识别时先对相应的音频进行节拍的跟踪检测,之后再进行音频分割,优点就是可以有效避免将同一个和弦分割在不同的音频段或者是同一音频段中包含有多个和弦的情况。在音乐信号处理中增加节拍跟踪的方法可以很好的提高和弦的识别率。
比如动态节拍跟踪算法,包括起始点能量包络、自相关最佳速率估计和节拍检测三部分组成。
音乐信号预处理:主要是对信号进行去燥。将完成预处理的音乐全部转化成 mp3 格式,采样率为 11025Hz,单声道标准音乐文件。
将音频信号进行 FFT,通过一个权重矩阵将傅里叶频谱变成 40 维 Mel 频谱。计算每一维频谱沿时间轴的一阶拆分(只有起始点信息),然后将整个频谱内的值相加,滤除直流后得到起始能量包络。
对整个信号的能量进行起始自相关运算,然后加高斯窗,在其对数域上取单一主峰值,将自相关中最大的滞后值作为最佳的速率估计。
最后将起始能量包落和全局速率输入节拍检测模块,通过同台规划算法获取节拍的时间位置信息,完成节拍跟踪。

PCP 特征介绍

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

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

8kw0CsVEy1.png!large

在这样的表示中,随着音符音高的增加,比如说从 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 协议》,转载必须注明作者和本文链接
不要试图用百米冲刺的方法完成马拉松比赛。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!