音频淡入淡出效果——解决音频突变的爆音问题
使用软件调节音量时如果音量之间的步进太大,声音突变,就能听到明显的爆音,尤其以单音音频更为明显,类似的问题还在声音起播、暂停、结束、快进快退时经常会出现,这个时候一般需要对音频进行渐入渐出的效果处理。
先来看一个典型的爆音音频示例,播放一个1k hz的正玄波,并调节音量,可以看到波形幅度增大
由于幅度跳变太大,过渡不连续,造成爆音,从频谱图来看这条竖直的亮线处,就是产生爆音的位置
为解决这个问题,就需要引入渐入渐出处理了,声音由大变小时需要做渐出处理,由小变大时需要做渐入处理
所谓渐入渐出处理就是需要一个平滑的过渡,比如从0到1,可以在中间插几个点,平缓的过渡到1,插多少点和每个点的值带来的效果也不一样。这种处理也应用在各种动画过渡场景中,原理相通。
动画效果中经常用到的缓动公式,有兴趣的同学可以深入研究一下其中的数学原理,有几个相关的资料网页:
http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm
这个网页十分强大,可以手动设计缓动效果并生成对应的函数接口
http://blog.moagrius.com/actionscript/jsas-understanding-easing/
这个网页详细解释了函数公式的意义:
These functions are usually written with 4 arguments [2]:function noEasing (t, b, c, d) {return c * t / d + b;
}
@t is the current time (or position) of the tween. This can be seconds or frames, steps, seconds, ms, whatever – as long as the unit is the same as is used for the total time [3].
@b is the beginning value of the property.
@c is the change between the beginning and destination value of the property.
@d is the total time of the tween.
这里的解释是针对动画效果而言,翻译成音频来说,我们的音量假设从0增大到1.0
b就代表起始音量0,c表示目标音量到起始音量的差即1.0
d意味着需要对多少样本做处理,一般我们会以时间来计算,比如我要200ms内的音频数据缓动处理,那么这么样本总值就是:
d = 200*sr(采样率)/1000 ,因为左右声道是同时处理,我们以frame为单位,48000采样率,d的大小为9600
t就是处理的frame计数了,从0到9600增加,返回值就是当前的frame需要的当前音量,参考代码如下:
vol_delta = target_volume - current_volume;
for (j = 0; j < nframes; j++) {if (ease_frames == 0) {current_volume = target_volume;} else if (ease_frames_elapsed < ease_frames) {current_volume= floatEaseNext((float)ease_frames_elapsed,start_volume, vol_delta, (float)(ease_frames - 1));ease_frames_elapsed++;}for (i = 0 ; i < ch; i++) {data[j * ch + i] = data[j * ch + i] * current_volume;}}
公式有很多种,每种公式处理的过渡效果不一,这是两种ease in和ease out的处理公式
EaseInCubic:
floatEaseFunc( float t, float b, float c, float d) {t /= d;return c * t * t * t + b;
}
EaseOutCubic:floatEaseFunc( float t, float b, float c, float d) {t = t / d - 1;return c * (t * t * t + 1) + b;
}
来看一下实际对音频突变的处理效果,这是系统在播放1Khz时不断调整音量时dump的pcm数据
我们从频谱图上来看
整段音频非常干净,没有任何杂音爆破音,处理的相当完美。
据了解缓动公式由大神robert penner提出,再次感谢膜拜大神!
音频淡入淡出效果——解决音频突变的爆音问题相关推荐
- 今日份安利:音频淡入淡出效果如何制作?
淡入淡出是在影视音乐作品中,经常会使用到的一种处理技巧.它能够让渐渐引入音乐,又移除音乐,不会给人产生很突兀的感觉.小伙伴们在制作短视频的时候,也可以使用这种技巧,这能够让短视频产生不错的效果.那你们 ...
- an怎么做淡入_Pr怎么给字幕、视频、音频做淡入淡出效果
用pr软件给视频或字幕或音频添加淡入淡出效果 92素材网小编推荐: 注意:视频和字幕文件的淡入淡出方法一致,为方便看各写了一种方法,两个方法可以通用 一.给视频添加淡入淡出效果 11.打开pr,在&q ...
- 音频淡入淡出怎么设置?淡入淡出效果如何制作方法合集
不知道小伙伴们是否和我一样,喜欢用一首歌的高潮部分来作为手机铃声.如果在嘈杂的环境下,这个铃声听起来就不会觉得很大声,但如果在比较安静的环境下,就很容易被铃声吓到.所以为了防止这一情况的发生,我们可以 ...
- html背景音乐淡入,音乐淡入淡出软件 音乐淡入淡出什么意思 给视频的背景音乐做淡入淡出效果...
看到今天的这个标题可能大家就有点蒙圈了哈,肯对大多都在想一个问题:"什么叫音乐淡入淡出呢".哈哈,其实所谓音乐淡入淡出的意思就是开始的时候音乐声音是缓缓变大,不会突然很大.结束的时 ...
- 【UE Sequencer系列】07-创建慢镜头、粒子效果、淡入淡出效果、添加音乐
目录 一.创建慢镜头 二.创建粒子效果 三.创建淡入淡出效果 四.添加音乐 一.创建慢镜头 1. 添加时间膨胀轨迹 2. 设置一开始的播放速率为1 通过减少时间膨胀系数来制作慢镜头 二.创建粒子效果 ...
- 《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果
M_Studio的教程:[<迷失岛2>游戏框架开发01:实现场景转换|Unity教程] 搭建场景 使用下载好的素材搭建场景H1-H4和H2A.永久的场景Persistent,将场景都拖拽到 ...
- 004_淡入淡出效果
1. jQuery淡入淡出方法 1.1. 通过jQuery, 您可以实现元素的淡入淡出效果. 1.2. jQuery拥有下面四种fade方法: fadeIn().fadeOut().fadeToggl ...
- 淡入淡出效果 || 高亮显示案例
淡入淡出效果 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF- ...
- C# 仿金山毒霸启动和关闭淡入淡出效果
C# 仿金山毒霸启动和关闭淡入淡出效果 原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02 03 #region 私有方法 04 [DllImportAttri ...
最新文章
- (转)HTTP 协议之压缩
- sqlserver的基本介绍
- VC小技巧汇总之对话框技巧
- 铁路售票系统_铁路资讯:复兴号动车、智能京张高铁…中国最高端铁路装备看这里...
- DCL双检查锁机制实现线程安全的单例设计模式
- 怎么安装python环境和编译器_Python环境安装以及PyCharm编译器的安装
- ArcGIS Server Help 之 Geodatabase and ArcSDE 学习笔记
- 数据库技术与应用习题2
- python 绝对值最小值的 正数_找出有序数组中绝对值最小的数
- unity响应键盘的组合键
- This generated password is for development use only. Your security configuration must be updated bef
- 教你在word中为一句话同时加上横线和波浪线
- npm ERR! Error: tunneling socket could not be established的解决问题
- 现在都在考华为认证,含金量高不高呢?该如何备考?
- Quartz定时器的时间设置
- 推荐一个资料:数学之美-by-吴军.pdf
- 软件人力外包的运作流程
- 通过EndNote插入参考文献
- OGC服务接口一张图
- Tomcat进程假死问题排查