声音的向量表示

原理

  1. 向量x ∈ R N x\in R^Nx∈RN表示时间区间上的音频信号,x i x_ixi​表示t = h i t=h_it=hi​时的声压x i = α p ( h i ) , i = 1 , . . . , N x_i=\alpha p(h_i),i=1,...,Nxi​=αp(hi​),i=1,...,N
  2. 每个x i x_ixi​称为样本
  3. h(>0)为采样时间
  4. 1/h为采样率,典型的采样率为1 / h = 44100 / s e c 1/h=44100/sec1/h=44100/sec或48000 / s e c 48000/sec48000/sec
  5. α \alphaα被称为比率因子

使用python的librosa库可以读取音频信号,并用matplotlib显示波形

y,sr = librosa.load("MUSIC STEM.wav",sr=None)    #y为长度等于采样率sr*时间的音频向量
plt.figure()
librosa.display.waveplot(y, sr) #创建波形图
plt.show()  #显示波形图

结果

分析

音频信号每一位分别对应一个采样点,其位数等于“采样率*音频时长(以秒为单位)”,记录了每个样本上音频的振幅信息

缩放音频信号

原理

音频的响度由音频信号每个样本的数值绝对值大小决定,因此对音频信号作代数乘法运算,可以增减音频的响度

numpy数组提供的代数乘法功能可以用于增减音频响度,并利用librosa库将音频向量写回文件

y=2*y   #增加一倍振幅
y=0.5*y    #减小振幅为原来一半
y=-y   #翻转振幅
y=10*y #大幅增加振幅
librosa.output.write_wav(dir,y,sr)  #将音频向量写回文件

结果

四种操作结果的波形分别如图所示

  1. y=2*y时,得到的音频响度略大于原音频
  2. y=0.5*y时,得到的音频响度略小于原音频
  3. y=-y时,得到的音频响度与原音频一致
  4. y=10*y时,得到的音频响度远大于原来音频

分析

  1. 音频信号每个样本的数值反应了振动离开平衡点的距离,即振幅,振幅越大,声音具有的能量越大,声音听起来响度就越大
  2. 对样本数值进行倍增,若倍增系数绝对值大于1则声音响度增加,若倍增系数绝对值小于1则声音响度下降
  3. 由于振动离开平衡点的距离是一个绝对值,因此倍增系数为负数时效果与倍增系数是其相反数时一致

线性组合和混音

原理

  1. 对多个音频信号进行线性运算y = a 1 x 1 + a 2 x 2 + . . . + a k x k y=a_1x_1+a_2x_2+...+a_kx_ky=a1​x1​+a2​x2​+...+ak​xk​可以实现混音

  2. 此时每个音频信号x k x_kxk​称为音轨

  3. 混合后的结果y称为混合

  4. 每个系数a k a_kak​是音轨在混合中的权重

numpy数组提供的线性运算功能可以用于实现混音

再尝试人声与伴奏的混合,取一段人声轨和一段伴奏轨,分别赋予权重(0.25,0.75)、(0.5,0.5)、(0.4,0.6)进行线性混合

y=0.25*x1+0.75*x2
y=0.5*x1+0.5*x2
y=0.6*x1+0.4*x2
  • 1
  • 2
  • 3

结果

波形图如下所示:

得到的音频为在伴奏上加上人声的效果

分析

  1. 音频是线性相加,得到的波形图中无法直观分出人声和伴奏,但由于人声和伴奏中各频率谐波分量与伴奏中不同,线性相加在频域被分配到了各频率谐波上,所以可以在频谱图上清晰区分出来

  2. 为了得到足够清晰的混音音频,需要不断更改每个混音音轨的权重以得到最适合的混合模式

拓展

虽然人声和伴奏中谐波分量基本不同,但相同频率上的相加也容易导致撞频的发生,使得混合的人声和伴奏难以区分,因此对于双声道音频,我们常常采用偏置的方法,为两个声道中人声和伴奏设不同的权重(通常一个声道人声大,一个声道伴奏声大)

形状为(2,n)的numpy数组可以用于容纳双声道音频信号。两个声道分别取权重(0.4,0.6)、(0.6,0.4)进行混合,波形如下:

乐音

  1. 对于声音信号p(t),若满足p ( t + T ) ≈ p ( t ) p(t+T)\approx p(t)p(t+T)≈p(t),其中周期T取值在0.0005秒到0.01秒之间,则p被视为乐音
  2. 周期长短(决定频率并)决定音高
  3. 每个周期内波形的特点决定了音色
  4. 乐音的能量决定了响度,即声压

音高

原理

  1. f = 440 H z f=440Hzf=440Hz是中央A
  2. 一个八度在频率上翻了一倍
  3. 十二平均律中,每个半音在频率上翻了2 1 / 12 2^{1/12}21/12倍
  4. 每个半音的距离就是黑白键上两个键之间的距离,从do到升do,各白键之间的差音为全全半全全全半,而每个全音中的半音被分到了黑键上
  5. 任意两个音之间的距离称为音程,音程的单位是,相同单音之间音程为1度,之后每差一个音级增加1度

实验步骤:

  1. 设置基频f为440Hz,用numpy以440Hz生成正弦函数
  2. 每隔1/44100s设置一个采样点,每间隔1s生成1s的440Hz正弦波
  3. 在这基础上,第n次生成时再生成1s频率为440 ⋅ 2 ( n − 1 ) / 12 H z 440·2^{(n-1)/12}Hz440⋅2(n−1)/12Hz的正弦波,与原正弦波线性相加进行和弦,从而模拟小二度到纯八度的所有音程
x=np.empty((0,))    #生成空数组
for i in range(0,13):x1=np.linspace(0,1, num=44100, endpoint=True, dtype=float) #生成采样点x1=5*np.sin(2*np.pi*440*np.power(2,i/12)*x1)+5*np.sin(2*np.pi*440*x1)   #生成波形与和弦x2=np.zeros((44100,))  #留空部分x=np.concatenate((x,x1,x2),axis=0)   #连接数组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果

生成的26s音频中有13段不同音程的和弦,有的和弦听起来和谐,有的和弦听起来不和谐

分析

  1. 小二度音程(相差一个半音)、大七度音程(相差五个全音一个半音)是极不协和音程
  2. 大二度音程(相差一个全音)、小七度音程(相差五个全音)、三全音(三个全音)是不协和音程
  3. 小三度音程(相差一个全音一个半音)、大三度音程(相差两个全音)、小六度音程(相差四个全音)、大六度音程(相差四个全音一个半音)是不完全协和音程
  4. 纯四度音程(相差两个全音一个半音)、纯五度音程(相差三个全音一个半音)是完全协和音程
  5. 纯八度音程(相差六个全音)是极完全协和音程

音色

  1. 对于周期性信号p ( t ) = ∑ k = 1 K ( a k c o s ( 2 π f k t ) + b k s i n ( 2 π f k t ) ) p(t)=\displaystyle \sum_{k=1}^K (a_kcos(2\pi fkt)+b_ksin(2\pi fkt))p(t)=k=1∑K​(ak​cos(2πfkt)+bk​sin(2πfkt)),每个分解信号为谐波泛音

  2. f为频率

  3. a与b为谐波系数

  4. 在K足够大时,任意周期性信号都可以通过积分变换为这种形式

  5. 谐波振幅的配比决定了音色,对于每个频率由k决定的谐波,其谐波振幅为c k = a k 2 + b k 2 c_k=\sqrt{a_k^2+b_k^2}ck​=ak2​+bk2​​,因此谐波振幅可以组成一个长度为k的向量c = ( 0.3 , 0.4 , . . . ) c=(0.3,0.4,...)c=(0.3,0.4,...),足够多的谐波以不同振幅数值混合可以组成不同音色

在220-11000Hz之间分别生成1、5、10、20、50个频段的正弦、余弦信号,随机生成谐波系数

结果

五种情况下混合波形图如下所示:


得到一段每隔1s播放1s不同音色音频的音频文件

分析

  1. 使用不同足够多的谐波以不同谐波系数混合可以组成不同音色音频
  2. 现实中已知乐器也可以利用频谱分析提取音色特征,供计算机再现
  3. 利用谐波原理可以制作各种各样的电子合成器,供作曲家使用

LIBROSA实现音频基本处理+乐音三要素原理解析相关推荐

  1. 视音频数据处理入门:FLV封装格式解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  2. librosa@soundFile音频读取和绘图@声道@通道@包络

    文章目录 librosa.load的返回的时间序列如何理解 soundFile librosa vs soundFile 音频的声道和通道 5.1声道 通道数量 librosa@soundFile常见 ...

  3. 使用librosa对音频进行加载拼接截取叠加等操作

    注意:librosa只能读取wav格式音频文件 代码如下 import numpy as np import librosa# 1.加载音频文件 audio_path1 = './audio1.wav ...

  4. 音频焦点(AudioFocus)应用与源码解析

    音频焦点(AudioFocus) 基础介绍 在我们的Android设备中会安装不止一个多媒体应用,如果不制定一个有效合理的规则,应用程序各自为政,那么可能就会出现各种音视频软件的混音,这是非常影响用户 ...

  5. html5中怎么设置音频的位置,HTML5中音频的详细解析

    摘要 腾兴网为您分享:HTML5中音频的详细解析,智慧医疗,榛果民宿,猿辅导,优酷等软件知识,以及虚拟视频,天正建筑tarch8.5,跟谁学登录,照片回收站,医学生简历模板,重复文件删除,卡农社区,招 ...

  6. 浏览器下载图片 前端下载图片/音频/视频/PDF等所有浏览器可以解析的文件格式;解决通过window.open打开链接后是新标签页面而不是下载文件;

    拷贝走 放上文件路径 直接使用(存在跨域的处理下跨域问题即可) this.$axios.get('要下载的文件路径', { responseType: 'blob'}).then(res=>{ ...

  7. librosa 音频处理

    目录 序言 一.libsora安装 pypi conda source 二.librosa常用功能 核心音频处理函数 音频处理 频谱表示 幅度转换 时频转换 特征提取 绘图显示 三.常用功能代码实现 ...

  8. 音频特征提取——librosa工具包使用

    转载:http://www.cnblogs.com/xingshansi/p/6816308.html 前言 本文主要记录librosa工具包的使用,librosa在音频.乐音信号的分析中经常用到,是 ...

  9. python音频特征提取_音频特征提取——librosa工具包使用

    作者:桂. 时间:2017-05-06  11:20:47 前言 本文主要记录librosa工具包的使用,librosa在音频.乐音信号的分析中经常用到,是python的一个工具包,这里主要记录它的相 ...

最新文章

  1. 不只翻译机,搜狗将在半年内推数款智能硬件产品
  2. 网友脑洞大开 用 Emoji 开发“俏皮”编程语言
  3. tensorflow2.X安装及使用
  4. mysql repo_centos7下使用wget命令安装mysql
  5. 电影院票务管理系统数据库设计(1)
  6. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1080:余数相同问题
  7. Linux 档案权限概念
  8. rman 备份后恢复整个数据库文件的操作
  9. 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
  10. UI设计干货素材|轻松搞定页面分页符(指示器)的设计
  11. linux服务进程文件,[Linux实用命令]-6-服务与进程管理
  12. java数据流无法输出验证码
  13. UC伯克利超酷研究:舞痴和舞王之间,只差一个神经网络
  14. freebsd 6.2 安装配置笔记[转]
  15. java opencv 计算滑块横移距离
  16. Spring Cloud (6)config 客户端配置 与GitHub通信
  17. 小程序长列表优化,解决数据过多白屏问题
  18. PMP学习笔记 第5章 项目范围管理
  19. 八皇后问题python_八皇后问题 Python实现
  20. QQ心跳包格式分析 监听局域网QQ号代码

热门文章

  1. Portainer-docker可视化工具
  2. 哪些赛道适合程序员创业?
  3. 线性差分方程及其通解的一般求法
  4. 【Qualcomm高通音频】如何使用QXDM、QCAT、CoolEditor音频日志抓取、解析和分析?
  5. git -- git emoji列表(github commit 前面的小icon)
  6. 关于floor函数与ceil函数与round函数
  7. 读书笔记-高调做事低调做人 把握好度
  8. r语言抓取维基百科表格数据
  9. Angular入门到精通系列教程(5)- 第三方UI库(Angular Material)
  10. DEM数据知识介绍-数字高程模型