AVFoundation连续系列之六混音(OC/Swift)
前言:
咱们如果希望保存下来的文件是带有音效的音频文件,那就需要把原声和音效同时录制下来,咱们先来张图看下。
通过图咱们可以直观的看到如果想要录制带有音效文件的步骤,咱们第三步,录制那步,其实就是咱们混音的那一步。
这季咱们就主要讲混音这一块。
混音: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来看吧!
如果转载需要经过我的同意!