使用软件调节音量时如果音量之间的步进太大,声音突变,就能听到明显的爆音,尤其以单音音频更为明显,类似的问题还在声音起播、暂停、结束、快进快退时经常会出现,这个时候一般需要对音频进行渐入渐出的效果处理。

先来看一个典型的爆音音频示例,播放一个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提出,再次感谢膜拜大神!

音频淡入淡出效果——解决音频突变的爆音问题相关推荐

  1. 今日份安利:音频淡入淡出效果如何制作?

    淡入淡出是在影视音乐作品中,经常会使用到的一种处理技巧.它能够让渐渐引入音乐,又移除音乐,不会给人产生很突兀的感觉.小伙伴们在制作短视频的时候,也可以使用这种技巧,这能够让短视频产生不错的效果.那你们 ...

  2. an怎么做淡入_Pr怎么给字幕、视频、音频做淡入淡出效果

    用pr软件给视频或字幕或音频添加淡入淡出效果 92素材网小编推荐: 注意:视频和字幕文件的淡入淡出方法一致,为方便看各写了一种方法,两个方法可以通用 一.给视频添加淡入淡出效果 11.打开pr,在&q ...

  3. 音频淡入淡出怎么设置?淡入淡出效果如何制作方法合集

    不知道小伙伴们是否和我一样,喜欢用一首歌的高潮部分来作为手机铃声.如果在嘈杂的环境下,这个铃声听起来就不会觉得很大声,但如果在比较安静的环境下,就很容易被铃声吓到.所以为了防止这一情况的发生,我们可以 ...

  4. html背景音乐淡入,音乐淡入淡出软件 音乐淡入淡出什么意思 给视频的背景音乐做淡入淡出效果...

    看到今天的这个标题可能大家就有点蒙圈了哈,肯对大多都在想一个问题:"什么叫音乐淡入淡出呢".哈哈,其实所谓音乐淡入淡出的意思就是开始的时候音乐声音是缓缓变大,不会突然很大.结束的时 ...

  5. 【UE Sequencer系列】07-创建慢镜头、粒子效果、淡入淡出效果、添加音乐

    目录 一.创建慢镜头 二.创建粒子效果 三.创建淡入淡出效果 四.添加音乐 一.创建慢镜头 1. 添加时间膨胀轨迹 2. 设置一开始的播放速率为1 通过减少时间膨胀系数来制作慢镜头 二.创建粒子效果 ...

  6. 《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果

    M_Studio的教程:[<迷失岛2>游戏框架开发01:实现场景转换|Unity教程] 搭建场景 使用下载好的素材搭建场景H1-H4和H2A.永久的场景Persistent,将场景都拖拽到 ...

  7. 004_淡入淡出效果

    1. jQuery淡入淡出方法 1.1. 通过jQuery, 您可以实现元素的淡入淡出效果. 1.2. jQuery拥有下面四种fade方法: fadeIn().fadeOut().fadeToggl ...

  8. 淡入淡出效果 || 高亮显示案例

    淡入淡出效果 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF- ...

  9. C# 仿金山毒霸启动和关闭淡入淡出效果

    C# 仿金山毒霸启动和关闭淡入淡出效果 原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02   03 #region 私有方法 04 [DllImportAttri ...

最新文章

  1. (转)HTTP 协议之压缩
  2. sqlserver的基本介绍
  3. VC小技巧汇总之对话框技巧
  4. 铁路售票系统_铁路资讯:复兴号动车、智能京张高铁…中国最高端铁路装备看这里...
  5. DCL双检查锁机制实现线程安全的单例设计模式
  6. 怎么安装python环境和编译器_Python环境安装以及PyCharm编译器的安装
  7. ArcGIS Server Help 之 Geodatabase and ArcSDE 学习笔记
  8. 数据库技术与应用习题2
  9. python 绝对值最小值的 正数_找出有序数组中绝对值最小的数
  10. unity响应键盘的组合键
  11. This generated password is for development use only. Your security configuration must be updated bef
  12. 教你在word中为一句话同时加上横线和波浪线
  13. npm ERR! Error: tunneling socket could not be established的解决问题
  14. 现在都在考华为认证,含金量高不高呢?该如何备考?
  15. Quartz定时器的时间设置
  16. 推荐一个资料:数学之美-by-吴军.pdf
  17. 软件人力外包的运作流程
  18. 通过EndNote插入参考文献
  19. OGC服务接口一张图
  20. Tomcat进程假死问题排查

热门文章

  1. unity2D学习(11)角色受伤弹开、用UI Text显示血量
  2. Windows查看电脑的IP地址
  3. java彩虹雨_Java字符串分割
  4. import提升导致Fundebug报错:“请配置apikey” 1
  5. app接入支付宝api,支付宝付款踩坑记录
  6. BMP格式图像文件详析
  7. 使用内网云+GitHub Pages免费部署动态网站
  8. 快速计算三极管放大电路增益的技巧-晶体管共射极放大电路
  9. 图像分割之水平集(Level Set)分割
  10. speedoffice中Word文档如果自动编号