AVFoundation连续系列之六混音(OC/Swift)

前言:

咱们如果希望保存下来的文件是带有音效的音频文件,那就需要把原声和音效同时录制下来,咱们先来张图看下。

AVFoundation连续系列之六混音(OC/Swift)_第1张图片

通过图咱们可以直观的看到如果想要录制带有音效文件的步骤,咱们第三步,录制那步,其实就是咱们混音的那一步。

这季咱们就主要讲混音这一块。

混音:AVAudioMixerNode

简介:

音频混音节点,主要用于将同一音频引擎上的音频混合成一轨音频。他没有实际效果的作用,可以理解成他是一个工具类。

混音节点是一个遵守了混音协议(AVAudioMixing)的音频节点,那咱们在看混音节点之前先了解下混音协议。

AVAudioMixing音频混合协议继承了两个协议,分别是AVAudioStereoMixing、AVAudio3DMixing。

这个协议定义了输入总线可用属性的混合器节点。

它可以改变在它出现之前所有的节点。

AVAudioStereoMixing:音频立体声混合协议 里面定义了关于左右声道平衡方法。

AVAudio3DMixing:3D音频环境混合协议  里面包含了音频环境的枚举 音频的播放速率  混响的比例  声音穿透的阻碍力度  音频吸收的比例 发声点的中心点

咱们的混音协议可以调控输出音频的大小。他又继承上面的两个协议,所以他也就具备了上面的功能。

如果你需要更细微的调节音频,可以使用协议里面的方法。比如你去做一个更专业的音频制作软件,需要调节几轨音频更精准的声道位置、或者调节某一个乐器发生的位置,就需要继续去研究这些协议了。当然你最好有一定的电子音乐编曲的功底。

混音节点又是一个音频节点,他继承自AVAudioNode,音频节点具备录制、检测、观察输出音频节点的功能,咱们就可以使用这个功能来把带有音效的音频录制下来。

直接上代码:

mixer.installTap(onBus:0, bufferSize:8192, format: input.inputFormat(forBus:0)) { (buffer, when)in

try! audioFile.write(from: buffer)

}

这基本就搞定了,但有一点特别需要注意,就是在录制完成之后,需要把tap移除掉

mixer.removeTap(onBus:0)

这样咱们录制带有音效的音频就搞定了!

剩下的结合咱们之前讲过的内容和Demo来看吧!


Swift版

OC版


如果转载需要经过我的同意!

你可能感兴趣的:(AVFoundation连续系列之六混音(OC/Swift))