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

前言

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

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

在诸多信号处理,或图像处理算法的博客中,我没有找到有人能把一个算法说清楚的,比如给出一堆复杂公式,但没有说明参数代表的意义,这一点是非常浪费阅读者的时间的。或者说公式里的参数字母表示经常更换,在不同的场景中,更换很多种字母,以及公式的变形。这是对学习者非常不利的。包括编程语言实现一些算法的博客,比如写一个算法的 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)两项来分别代表垂直和弧度维:

61045d5d629e87a4a6ec5f37780c4f4a.png

在这样的表示中,随着音符音高的增加,比如说从 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 协议》,转载必须注明作者和本文链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码改变世界,也改变了我

愿2021的你,可以勇敢的踏出那一步,可以去追求自己想要的东西。脑图版代码版using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp14 {internal class Program{pr…

计算机基础与应用教程计算机硬件,计算机基础系列一:计算机硬件

1、编程语言的作用及与操作系统和硬件的关系一个完整的计算机系统包括硬件、操作系统、软件(即程序员开发的各种软件)三部分组成。各程序员开发的软件若直接调用计算机的硬件,如硬盘读取、音频播放等,则软件不仅编写复杂同时影响开发效率,因此…

宝塔mysql远程链接_宝塔apache启动失败:报错 AH00526: Syntax error on line 解决方案

错误信息:AH00526: Syntax error on line 54 of /www/server/apache/conf/httpd.conf:Cannot define multiple Listeners on the same IP:port朋友网站突然访问不了,进入宝塔后查看Apache服务器没运行,重启Apache时提示这个错误信息打开Apach…

Amazing 2020

Amazing 2020Intro2020 转眼即逝,2020 是比较艰辛的一年,因为疫情原因,很多人的工作以及生活都多多少少受到了一些影响。引用网上盛传的一句话——2020 实“鼠”不易, 2021 “牛”转乾坤。希望大家 2020 立的没有完成的 Flag 在 2…

游戏设计与计算机,RPG游戏设计与实现-数学与计算机系.doc

RPG游戏设计与实现-数学与计算机系XX学院毕业论文(设计)RPG游戏设计与实现院 系 :数学与计算机系专业(班级):计算机科学与技术专业2班姓名:XXX学号:20084011023指导教师:XXX职称:讲师完成日期: 2012 年 5月…

C#-WinForm跨线程修改UI界面

背景在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的操作一般都会使用异步的方式去执行,不影响主线程(UI线程)与用户间…

1w存银行一年多少利息_如果你有1000万存入银行,一年能有多少利息?刺激!

如果你有1000万存入银行,一年能有多少利息?刺激!每个人都想一夜暴富,世界上用钱可以解决90%的问题,还有剩下10%可以用钱去缓解,有钱男子汉,没钱汉子难,何以解忧,惟有暴富…

长春工业大学计算机科学与技术录取分数,2021年长春工业大学各省各专业最低投档录取分数线统计(文科 理科)...

2018年长春工业大学各省各专业最低投档录取分数线统计(文科 理科)同学们2019年高考是你们人生旅途的第一个加油站,它意味着你们的希望,你们的前途,甚至是命运,挑战六月就是挑战命运和未来,希望你们在高考中脱颖而出&am…

.NET 5 开源工作流框架elsa技术研究

编者注: 工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-core ,今天给大家推荐MVP 周国庆写的这篇详细文章。今…

php 清空一个数组_PHP工程师学Python数据类型

一、背景继上篇文章比较了PHP与Python语法之后,这周又学习了Python数据类型,准备从通过这篇文章给自己进行一些总结,也给其他读者一些参考。二、内容概要字符串(str)列表(list)元组(tup)字典(dict)数据操作三、字符串(str)Python中字符串操作…

“开源、共享、创新” 2020 中国.NET开发者大会小结

大会的新闻稿在2020年12月31日正式发布:开源共享创新|2020年中国.NET开发者大会圆满收官! , 本文是这篇新闻的补充性文章,仅代表个人对大会的各方面分享内容的一个小结。在2019年上海中国.NET开发者大会的基础上,2020年12月19日 继…

maya的颤动怎么做_必看!新手学习MAYA的几个建议

“学习是没有捷径可言的,唯一的捷径就是不断的学习和练习,只有这样才能学到真功夫”Maya设计刚刚开始接触Maya的同学都会有这些疑问,我适不适合学习Maya,学习Maya可以赚到钱吗?怎样才可以学好Maya,今天给大…

nginx lua以html显示,nginx 支持lua及lua脚本格式化日志

1.安装LuaJIT-2.0.4链接:http://luajit.org/download.htmltar -xf LuaJIT-2.0.4.tar.gzcd LuaJIT-2.0.4make PREFIX/usr/local/luajitmake install PREFIX/usr/local/luajit2.修改环境变量vim /etc/profileexport LUAJIT_LIB/usr/local/luajit/libexport LUAJIT_INC…

我的2020年终总结:新的角色,新的开始

【年终总结】| 作者/Edison Zhou又到了一年一度的年终盘点时刻,熟悉我的朋友应该都知道,这个时候我都会写一篇推文盘点一下这一年来的得失。1也谈2020关键事件回顾(1)扯证了,结婚了要说2020年我个人的最大里程碑&#…

docker es持久化_使用docker数据卷对容器数据持久化

volume是用于对Docker容器生成和使用的数据持久化的首选机制。如果您的容器生成非持久状态数据,请考虑使用 tmpfs挂载以避免将数据永久存储在任何地方,并通过避免写入容器的可写层来提高容器的性能。默认容器的数据存储在这里我们在容器中创建一些模拟的…

求职信计算机工程师英语作文,开发工程师英文求职信范文

开发工程师英文求职信范文respected leaders:hello:first salute you sincere thanks, thank you for taking the time to consult the of my application letter!i am aptech a student, now already graduated from junior year. major in.net direction, and ismitted to be…

微信适配国产操作系统:原生支持 Linux

喜欢就关注我们吧!据 ZOL 报道,统信软件官方近日宣布上线适配统信 UOS 的微信桌面客户端,并称该微信版本为原生支持 Linux 的版本,同时支持龙芯、鲲鹏、麒麟等国产 CPU。据悉,统信 UOS 版的微信桌面客户端由腾讯公司研…

oracle拆分分区语法详解大全_Oracle hash的分区方法详解

hash的原理虽然简单,但是它在数据库中可以说是无处不在。其中hash partition是hash在数据库中一个简单的应用,虽然它没有range partition那么常用,但是我们在做数据库水平拆分时,其实就是利用了hash partition的原理,利…

计算机专业的吸引力,计算机专业文献翻译-面向对象编程具有多方面的吸引力.doc...

英文文摘Why has object-oriented programming had such a sweeping impact on the software development communityObject-oriented programming appeals at multiple levels. For managers, it promises faster and cheaper development and maintenance. For analysts and d…

ML.NET生成器带来了许多错误修复和增强功能以及新功能

ML.NET是一个开源的跨平台机器学习框架,适合 .NET 开发人员。它允许将机器学习集成到 .NET 应用中,而无需离开 .NET 生态系统,甚至拥有 ML 或数据科学背景。ML.NET工具(Visual Studio 中的 UI 模型生成器和跨平台 ML.NET CLI&…