AVFoundation连续系列之四添加音效

AVFoundation连续系列之四添加音效

这一部分我觉得是咱们这一系列中比较有意思的地方,如果你再懂一些音乐,会更好玩一些。这季咱们讲音效-AVAudioUnitEffect。

一.简介

咱们上节课介绍了下非常重要的一个东西,叫做节点。其中有一个节点叫做AudioUnit,它是咱们音频的单元,在音频单元的下边又有一个分支,叫做AudioUnitEffect,效果单元。这个效果单元下面又划分出四个分支,分别是四种音效,或者咱们直接把他看成是咱们的效果器,(效果器就是你去KTV里面唱歌,你的声音从话筒进去,经过一个给你声音添加效果的硬件,哪些硬件就是咱们的效果器)如图:


咱们分别看下这四种音效:

1.AVAudioUnitReverb:混响,混响可以模拟咱们在一个空旷的环境,比如教堂、大房间等,这样咱们在说话的时候,就会有回音,并且声音也比较有立体感。

混响里面又给咱们区分了下具体的效果,咱们可以见识下:

publicenumAVAudioUnitReverbPreset :Int{

caseSmallRoom 小房间

caseMediumRoom 中等房间

caseLargeRoom 大房间

caseMediumHall 中等大厦

caseLargeHall 大型的大厦

casePlate 光面墙

caseMediumChamber 中等会议厅

caseLargeChamber 大型会议厅

caseCathedral 教堂

caseLargeRoom2 大型房间2

caseMediumHall2 中等大厦2

caseMediumHall3 中等大厦3

caseLargeHall2 大型大厦2

}

这些效果 自己都可以去试一下,体验下每一种效果的不同,当然你还可以去调节它里面一些细微的参数。

2.AVAudioUnitEQ:均衡器,咱们可以使用均衡器来调节咱们音频的各个频段,比如,我想让我的低音更加浑厚,我就可以调节EQ的20-150HZ的频段,如果你想让你的声音更加明亮,那可以调节500-1KHZ的频段,我说的这些都是一些笼统的范围值,具体的可以去查阅一些均衡器设置的教程,这里一定要注意,在设置不同乐器、不同人声、或者环境音的时候,咱们的均衡器调节也是不一样的,一定要根据你的需求去调节。

值得庆幸的是,苹果也提供给了咱们bands,在这个所谓的乐队里面,咱们可以选择一些预设的效果,如下:

publicenumAVAudioUnitEQFilterType :Int{

caseParametric 参量均衡器 可以通过设置一些参量,来调节咱们均衡器的频点

caseLowPass 低通滤波器 衰弱高频

caseHighPass 高通滤波器 衰弱低频

caseResonantLowPass  可以引发共鸣的 低通滤波器

caseResonantHighPass 可以引发共鸣的  高通滤波器

caseBandPass 带通滤波器  提升某一频率附近的信号 忽略过高 或 过低的 部分

caseBandStop 与上面的相反  忽略某一频率附近的信号

caseLowShelf 低架 降低整体

caseHighShelf 高架 提升整体

caseResonantLowShelf  可以引发共鸣的 低架

caseResonantHighShelf可以引发共鸣的 高架

}

当然,你也可以调节一些细微的参数。

3.AVAudioUnitDistortion:失真,玩过电吉他的同学,这个肯定不会陌生,哪怕你仅仅是刚刚接触的。失真是可以把声音变得沙哑的效果器。失真效果器也有很多很多种,咱们直接看下苹果给咱们预设的吧:

publicenumAVAudioUnitDistortionPreset :Int{

caseDrumsBitBrush 轻微的小鼓刷

caseDrumsBufferBeats 鼓点

caseDrumsLoFi 低保真

caseMultiBrokenSpeaker 多通道 破裂的嗓音

caseMultiCellphoneConcert 老式电话机的声音

caseMultiDecimated1 削波失真

caseMultiDecimated2 削波失真

caseMultiDecimated3 削波失真

caseMultiDecimated4 削波失真

caseMultiDistortedFunk  扭曲的funk效果失真

caseMultiDistortedCubed 扭曲的立方体效果

caseMultiDistortedSquared 扭曲的正方体效果

caseMultiEcho1 回声

caseMultiEcho2  回声

caseMultiEchoTight1 紧密的回声

caseMultiEchoTight2 紧密的回声

caseMultiEverythingIsBroken 破碎的失真

caseSpeechAlienChatter 外星人喋喋不休的声音

caseSpeechCosmicInterference 宇宙电子干扰的声音

caseSpeechGoldenPi 金属声音

caseSpeechRadioTower 收音机的声音

caseSpeechWaves 波形的声音

}

这些失真解释起来可真是费劲,官网没任何提示,只能依靠我对效果器的一点点认识猜测推断的,不过最终知道中文翻译也没多大的用处,还是需要真实的去使用才可以真正去理解的。

4.AVAudioUnitDelay:延迟,延迟就是 发出一个声音之后,过段时间再次发出,一直衰减到听不见。类似咱们的回声。可以通过里面的属性去细微的调节延迟的时间、速度等。

二.使用

估计很多同学都迫不及待的想来体验一把了,在咱们体验这些效果器之前,再次把咱们讲音频引擎时候的一张图片拿过来再次看下:


通过这张图,咱们可以看出,咱们音频的一个执行流程:

input(Mic或者音频文件) ->效果器->output

如果有多个效果器呢?

那就继续在效果器那一部分继续添加:

input(Mic或者音频文件) ->效果器1->效果器2->output

咱们在编程的时候,也是一样这个流程的,只不过,咱们多了一个音频引擎来控制整个流程。

咱们上节课还讲到节点的概念,每一个在音频引擎中的元素都是一个音频节点,这些节点都需要附着到咱们的音频引擎上,才可以去连接这些节点,实现音频整个流程的贯穿。最后开启引擎。

好了,咱们知道流程是什么样的了,咱们写一个实时给拾取的音频添加音效的例子吧!

//创建音频引擎

lazyvarengine =AVAudioEngine()

//创建混响效果

lazyvarreverb =AVAudioUnitReverb()

overridefuncviewDidLoad() {

super.viewDidLoad()

//音频输入口

letintput =engine.inputNode!

//音频输出口

letoutput =engine.outputNode

//设置混响效果器为教堂的效果

reverb.loadFactoryPreset(.Cathedral)

//设置混响的干湿比是从0-100的值干湿比影响到咱们混响与原声的一个混合比例

reverb.wetDryMix=30

//把混响附着到音频引擎

engine.attachNode(reverb)

//使用音频引擎连接各个节点

//        1.输入口连接效果器可对比咱们的图来看

//        Format:格式是咱们输入口在主线的一个格式

engine.connect(intput, to:reverb, format: intput.inputFormatForBus(0))

//        2.效果器连接输出口

engine.connect(reverb, to: output, format: intput.inputFormatForBus(0))

//所有节点都连接好了,那咱们可以开启引擎,享受咱们的效果器了

try!engine.start()

}

接下来咱们再看个EQ的案例:

letintput =engine.inputNode!

letoutput =engine.outputNode

//创建设置只有一组EQ

leteq =AVAudioUnitEQ.init(numberOfBands:1)

//获得EQ效果的参数

letfiler = eq.bands.first

//设置低通效果

filer?.filterType= .LowPass

//设置频宽

filer?.bandwidth=10

//设置增益

filer?.gain=20

//将EQ附着到音频引擎

engine.attachNode(eq)

//开始连接各个节点

engine.connect(intput, to: eq, format: intput.inputFormatForBus(0))

engine.connect(eq, to: output, format: intput.inputFormatForBus(0))

//开启引擎

try!engine.start()

}

关于失真的案例:

importAVFoundation

classViewController:UIViewController{

lazyvarengine =AVAudioEngine()

overridefuncviewDidLoad() {

super.viewDidLoad()

letintput =engine.inputNode!

letoutput =engine.outputNode

//创建设置失真

letdistortion =AVAudioUnitDistortion()

distortion.loadFactoryPreset(.SpeechRadioTower)

distortion.preGain=4

distortion.wetDryMix=80

//将distortion附着到音频引擎

engine.attachNode(distortion)

//开始连接各个节点

engine.connect(intput, to: distortion, format: intput.inputFormatForBus(0))

engine.connect(distortion, to: output, format: intput.inputFormatForBus(0))

//开启引擎

try!engine.start()

}

关于延迟的案例:

lazyvarengine =AVAudioEngine()

overridefuncviewDidLoad() {

super.viewDidLoad()

letintput =engine.inputNode!

letoutput =engine.outputNode

//创建设置延迟

letdalay =AVAudioUnitDelay()

//延迟时间的范围是0-2秒默认值是1

dalay.delayTime=0.5

//延迟的反馈值范围-100到100默认值50直接影响到咱们回音的时长

dalay.feedback=20

dalay.wetDryMix=80

//将distortion附着到音频引擎

engine.attachNode(dalay)

//开始连接各个节点

engine.connect(intput, to: dalay, format: intput.inputFormatForBus(0))

engine.connect(dalay, to: output, format: intput.inputFormatForBus(0))

//开启引擎

try!engine.start()

}

关于连接多个效果器的案例:

lazyvarengine =AVAudioEngine()

overridefuncviewDidLoad() {

super.viewDidLoad()

letintput =engine.inputNode!

letoutput =engine.outputNode

letdistortion =AVAudioUnitDistortion()

distortion.loadFactoryPreset(.SpeechGoldenPi)

distortion.preGain=1

distortion.wetDryMix=40

//将distortion附着到音频引擎

engine.attachNode(distortion)

letreverb =AVAudioUnitReverb()

//设置混响效果器为教堂的效果

reverb.loadFactoryPreset(.LargeRoom)

//设置混响的干湿比是从0-100的值干湿比影响到咱们混响与原声的一个混合比例

reverb.wetDryMix=40

//把混响附着到音频引擎

engine.attachNode(reverb)

//开始连接各个节点

engine.connect(intput, to: distortion, format: intput.inputFormatForBus(0))

engine.connect(distortion, to: reverb, format: intput.inputFormatForBus(0))

engine.connect(reverb, to: output, format: intput.inputFormatForBus(0))

//开启引擎

try!engine.start()

}

好了,咱们的音效就到这里吧,估计实时音效应该都会玩了。代码在这里:

Reverb

EQ

Distortion

Delay

多种效果器的混合使用


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容