当前课程知识点:计算机音乐 > 第二章 时域音频处理 > 2.5 振幅包络 > 振幅包络
同学们大家好
接下来我们要介绍一下振幅 包络
上节课介绍的MS曲线
可以很好地描述一个声音的波形的整体轮廓
那么反过来我们也可以用波形的轮廓
来制作类似乐器的声音
这种从整体上对一个波形进行修整的方法
我们也叫做振幅包络
跟封装处理这种整体分割部分的
这样的处理的方法不同
振幅包络的思路是从
波形的整体上进行处理的
假如我们有一个输入的信号叫做xn
如果我们把它乘上另外的一个信号
叫做yn
做了这样一个处理之后
它这样的xn就会
获得某种乐器的特定的轮廓特征
当然我们要求另外的信号yn必须是
一个真实的或者说一个设计好的MS曲线
实际上这样的一个操作
是将两个信号相乘的一个结果
这样XN就会具有YN所描述的某种
振幅轮廓的特征
接下来我们来观察一下
一个钢琴声音按键的振幅轮廓的特征
我们先听一下
可以看到钢琴声的音量会从一开始的
0极速的增加到一个非常大的一个值
接下来会
较快的一个衰减到一个比较稳定的数值
从而持续一段时间
最后会回归到零
钢琴的振幅轮廓很好的描述了一段乐器声
在四个阶段上的一个特点
这四个阶段分别是
激励期Attack
衰减期Decay
持续期Sustain
以及释放期Release
那么这四个阶段的组合方式
又称之为ADSR结构
在人工设计一个ADS结构的时候
我们会关注七大参数
首先是这个声音是何时开始的
何时结束的
也就是on跟off这两个时间点
当然如果我们没有实时处理的一个需求的话
我们可以设定一个总的时间长度
这样话我们就可以用一个时间长度来代替
on跟off的位置
除此之外
就是最重要的四个阶段的声音
他们分别是Attack激励期的声音的长度
Time of Attack Ta
以及衰减期的时间长度Td
那么由于时间总长度是设定的
所以我们只要知道剩下的Release期
也就是释放期的声音的长度
我们就能够确定
这个Sustain持续期的长度
所以一般来说我们只去关注
Ta Td Tr这三个阶段
除了这三个重要的声音长度之外
我们还需要去确定
ADSR 结构当中的峰值level
也就是通过Attack期
激励期所能达到的最大的这个音量
以及在持续期所能够保持的一个音量
Level of Sustain Ls
这就是有关ADSR结构中的七大参数
接下来让我们来看一下
用计算机程序如何设计ADSR曲线
并且用于包络正弦波信号
接下来就让我们来完成
振幅包络函数的编写
那么我们来定义一个振幅包络函数adsr
那么当然它要输入的参数
有我们刚才所说的
时间的长度T
还有Attack的时间长度Ta
Decay的时间长度Td
以及Release的时间长度Tr
那么还有它能够达到的最高的
最高的值level
以及下降下来之后的值Level Sustain
以及我们把采样率也作为一个输入
那么现在我们默认输入参数
都是以时间为单位的参数
那么为了能够产生一个数字的
振幅包络函数
我们第一件事情就是要
进行时间点的
时间以及采样点的一个转换
比如说T我们就给它变成T乘R
当然他最后必须需要是一个整数
然后我们去生成
一个长度为T的空的一个列表
用来作为最后的输出
那么Ta同样我们也给它进行转换成采样点
那么Td
我们这里的Td跟原始的Td
做一个概念上的一个转换
原始的Td是指Decay的长度
现在的Td我们把它定义成是
Td所在的时间所在的采样点
所以他要在原来的进行完
整数的采样点转换之后
再加上Ta
这样的话我们比较容易
去根据Ta Td等这些值来决定
来对这个时间进行分段
同样Tr也要做类似的处理
那么接下来我们就可以去完成分段函数了
那么首先是在第一段
就是在零到TA这一段
那么它就是一个线性的函数
最大的值是level
然后再乘上一个斜率就可以了
Ta减1这是它的一个斜率
那么第二段是在Ta跟td之间
同样也是一个线性的函数
那么它最大值是level
然后减去我们再乘上一个
再减去一个最小值是level
减去La再乘上一个斜率
I减Ta除以Td减Ta减1
这是第二段
那么第三段是完全平整的一段函数
那么也就是从Td到Tr
是完全平整的一段函数 就是Yi等于Ls
最后一段又是一段线性的函数
Tr到T之间是一段线性的函数
那Yi等于LS
就是最大的值乘以斜率
t减i除以t减tr减1
好 做完这些事情之后
我们再把Y进行return就可以了
那么我们首先来测试一下
比如说我们采样率是44100
然后我们生成一段ADSR曲线
比如说这样曲线的记做A
那么我们用ADSR曲线
这个函数去生成一段时间长度是1
那么它的Attack的时间是零点一秒
Decay的时间是0.1秒
那么Release的时间
我们设置成0.3秒
那么level设置成最大值是1
这个Level Sustain设置成0.3
它的采用率是R
我们可以把这一段曲线
给plot出来看一眼
好
运行一下我们看一下结果
这应该是a
这样我们就看到
这是我们生成的这段ADSR的曲线
那么我们可以用这一段ADSR的曲线
去包络各种各样的信号
来获得一个听觉的效果
比如说我们就用这一段ADSR曲线
去包络一个正弦波的信号
这时候我们首先要生成一个正弦波
我们生成一个一秒的正弦波
所以我们需要
t是一秒正弦波的采样点序号
用44100这样的产生一个序号的序列
然后我们去用np.cos来产生一个正弦波
我们产生这个正弦波用440赫兹
那么需要把这个频率转换成角频率
就是2pi
2piF除以R
pi乘以F这是440除以R
最后再乘上时间的标签
那当然这时间标签我们用N更加确切一点
然后对这段信号我们去乘上
刚才生成的这段ADSR的振幅包络
最后我们也可以去把这段信号给plot一下
运行一下看一下结果
我们看到通过这段代码之后
我们就生成了一段
具有一个ADSL包络结构的正弦波
能看到里面的细节
其实是一个正弦波
但它的振幅具有一个ADSR的包络的结构
我们可以把它写下来
听一下是什么样的声音
那么在写这个文件之前
我们需要对值域进行转换
因为现在这个Y是从-1到1之间的
我们需要给它转换成16位整数的一个范围
那我们给它乘上2的14次方
这样能保证它是比较小的一个值
不会超出16位整数的一个范围
同时还要进行一个类型转换
转换成16位的整数
然后写到一个文件里面
比如说叫adsr sine wav运行一下
运行完之后我们可以来听一下这个声音
我们听到这个声音是具有ADSR结构的
它在0.1秒时间能够达到它最大值
用0.1秒时间缩小到原来的0.3
然后最后花了0.3秒时间进行消退
那么这就是有关振幅包络的一个
详细的说明
这就是有关振幅包络的讲解
-欢迎辞
-1.1 计算机音乐导言
--计算机音乐导言
-1.2 计算机音乐课程主要内容
-1.3计算机音乐课程资源
-1.4 音乐的基本表达
--音乐的基本表达
-第一章作业
-2.1时域音频处理概述
--时域音频处理概述
-2.2 分窗处理1:OLA叠放
-2.3 分窗处理2:音量计算
-2.4 端点检测
--端点检测
-2.5 振幅包络
--振幅包络
-2.6 音频信号相乘
--音频信号相乘
-2.7 环形调制
--环形调制
-2.8 频率调制
--频率调制
-2.9 频率调制在音乐上的应用
-第二章作业
-3.1 频谱概述
--频谱概述
-3.2 傅里叶变换
--傅里叶变换
-3.3 短时傅里叶变换
--短时傅里叶变换
-3.4 加法合成
--加法合成
-3.5 线性滤波器
--线性滤波器
-3.6 京剧锣鼓经分析
--京剧锣鼓经分析
-第三章作业
-4.1 音色合成概述
--音色合成概述
-4.2 质点弹簧阻尼模型
--质点弹簧阻尼模型
-4.3 双线性滤波器
--双线性滤波器
-4.4 Modal合成
--Modal合成
-第四章测试
-5.1 一维振动模型概述
--一维振动模型概述
-5.2 弦振动模型
--弦振动模型
-5.3 达朗贝尔的行波解
--达朗贝尔的行波解
-5.4 梳状滤波器
--梳状滤波器
-5.5 Karplus Strong算法
-5.6 管状气鸣乐器模型
--管状气鸣乐器模型
-第五章作业
-6.1 音高跟踪概述
--音高跟踪
-6.2 时域音高跟踪
--时域音高跟踪
-6.3 频域音高跟踪
--频域音高跟踪
-6.4 K歌评分
--K歌评分
-第六章作业
-7.1 音频同步概述
--音频同步概述
-7.2 音乐特征提取 CQT
-7.3 音乐特征提取 Chroma
-7.4 动态时间规划概述
--动态时间规划概述
-7.5 动态时间规划实现
--动态时间规划实现
-第七章作业