LIBROSA实现音频基本处理+乐音三要素原理解析
声音的向量表示
原理
- 向量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
- 每个x i x_ixi称为样本
- h(>0)为采样时间
- 1/h为采样率,典型的采样率为1 / h = 44100 / s e c 1/h=44100/sec1/h=44100/sec或48000 / s e c 48000/sec48000/sec
- α \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则声音响度增加,若倍增系数绝对值小于1则声音响度下降
- 由于振动离开平衡点的距离是一个绝对值,因此倍增系数为负数时效果与倍增系数是其相反数时一致
线性组合和混音
原理
对多个音频信号进行线性运算y = a 1 x 1 + a 2 x 2 + . . . + a k x k y=a_1x_1+a_2x_2+...+a_kx_ky=a1x1+a2x2+...+akxk可以实现混音
此时每个音频信号x k x_kxk称为音轨
混合后的结果y称为混合
每个系数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
结果
分析
音频是线性相加,得到的波形图中无法直观分出人声和伴奏,但由于人声和伴奏中各频率谐波分量与伴奏中不同,线性相加在频域被分配到了各频率谐波上,所以可以在频谱图上清晰区分出来
为了得到足够清晰的混音音频,需要不断更改每个混音音轨的权重以得到最适合的混合模式
拓展
形状为(2,n)的numpy数组可以用于容纳双声道音频信号。两个声道分别取权重(0.4,0.6)、(0.6,0.4)进行混合,波形如下:
乐音
- 对于声音信号p(t),若满足p ( t + T ) ≈ p ( t ) p(t+T)\approx p(t)p(t+T)≈p(t),其中周期T取值在0.0005秒到0.01秒之间,则p被视为乐音
- 周期长短(决定频率并)决定音高
- 每个周期内波形的特点决定了音色
- 乐音的能量决定了响度,即声压
音高
原理
- f = 440 H z f=440Hzf=440Hz是中央A
- 一个八度在频率上翻了一倍
- 十二平均律中,每个半音在频率上翻了2 1 / 12 2^{1/12}21/12倍
- 每个半音的距离就是黑白键上两个键之间的距离,从do到升do,各白键之间的差音为全全半全全全半,而每个全音中的半音被分到了黑键上
- 任意两个音之间的距离称为音程,音程的单位是度,相同单音之间音程为1度,之后每差一个音级增加1度
实验步骤:
- 设置基频f为440Hz,用numpy以440Hz生成正弦函数
- 每隔1/44100s设置一个采样点,每间隔1s生成1s的440Hz正弦波
- 在这基础上,第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段不同音程的和弦,有的和弦听起来和谐,有的和弦听起来不和谐
分析
- 小二度音程(相差一个半音)、大七度音程(相差五个全音一个半音)是极不协和音程
- 大二度音程(相差一个全音)、小七度音程(相差五个全音)、三全音(三个全音)是不协和音程
- 小三度音程(相差一个全音一个半音)、大三度音程(相差两个全音)、小六度音程(相差四个全音)、大六度音程(相差四个全音一个半音)是不完全协和音程
- 纯四度音程(相差两个全音一个半音)、纯五度音程(相差三个全音一个半音)是完全协和音程
- 纯八度音程(相差六个全音)是极完全协和音程
音色
对于周期性信号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(akcos(2πfkt)+bksin(2πfkt)),每个分解信号为谐波或泛音
f为频率
a与b为谐波系数
在K足够大时,任意周期性信号都可以通过积分变换为这种形式
谐波振幅的配比决定了音色,对于每个频率由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个频段的正弦、余弦信号,随机生成谐波系数
结果
分析
LIBROSA实现音频基本处理+乐音三要素原理解析相关推荐
- 视音频数据处理入门:FLV封装格式解析
===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...
- librosa@soundFile音频读取和绘图@声道@通道@包络
文章目录 librosa.load的返回的时间序列如何理解 soundFile librosa vs soundFile 音频的声道和通道 5.1声道 通道数量 librosa@soundFile常见 ...
- 使用librosa对音频进行加载拼接截取叠加等操作
注意:librosa只能读取wav格式音频文件 代码如下 import numpy as np import librosa# 1.加载音频文件 audio_path1 = './audio1.wav ...
- 音频焦点(AudioFocus)应用与源码解析
音频焦点(AudioFocus) 基础介绍 在我们的Android设备中会安装不止一个多媒体应用,如果不制定一个有效合理的规则,应用程序各自为政,那么可能就会出现各种音视频软件的混音,这是非常影响用户 ...
- html5中怎么设置音频的位置,HTML5中音频的详细解析
摘要 腾兴网为您分享:HTML5中音频的详细解析,智慧医疗,榛果民宿,猿辅导,优酷等软件知识,以及虚拟视频,天正建筑tarch8.5,跟谁学登录,照片回收站,医学生简历模板,重复文件删除,卡农社区,招 ...
- 浏览器下载图片 前端下载图片/音频/视频/PDF等所有浏览器可以解析的文件格式;解决通过window.open打开链接后是新标签页面而不是下载文件;
拷贝走 放上文件路径 直接使用(存在跨域的处理下跨域问题即可) this.$axios.get('要下载的文件路径', { responseType: 'blob'}).then(res=>{ ...
- librosa 音频处理
目录 序言 一.libsora安装 pypi conda source 二.librosa常用功能 核心音频处理函数 音频处理 频谱表示 幅度转换 时频转换 特征提取 绘图显示 三.常用功能代码实现 ...
- 音频特征提取——librosa工具包使用
转载:http://www.cnblogs.com/xingshansi/p/6816308.html 前言 本文主要记录librosa工具包的使用,librosa在音频.乐音信号的分析中经常用到,是 ...
- python音频特征提取_音频特征提取——librosa工具包使用
作者:桂. 时间:2017-05-06 11:20:47 前言 本文主要记录librosa工具包的使用,librosa在音频.乐音信号的分析中经常用到,是python的一个工具包,这里主要记录它的相 ...
最新文章
- 不只翻译机,搜狗将在半年内推数款智能硬件产品
- 网友脑洞大开 用 Emoji 开发“俏皮”编程语言
- tensorflow2.X安装及使用
- mysql repo_centos7下使用wget命令安装mysql
- 电影院票务管理系统数据库设计(1)
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1080:余数相同问题
- Linux 档案权限概念
- rman 备份后恢复整个数据库文件的操作
- 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
- UI设计干货素材|轻松搞定页面分页符(指示器)的设计
- linux服务进程文件,[Linux实用命令]-6-服务与进程管理
- java数据流无法输出验证码
- UC伯克利超酷研究:舞痴和舞王之间,只差一个神经网络
- freebsd 6.2 安装配置笔记[转]
- java opencv 计算滑块横移距离
- Spring Cloud (6)config 客户端配置 与GitHub通信
- 小程序长列表优化,解决数据过多白屏问题
- PMP学习笔记 第5章 项目范围管理
- 八皇后问题python_八皇后问题 Python实现
- QQ心跳包格式分析 监听局域网QQ号代码