音频处理
问题
iOS 音频播放和录制的核心 API?
答案
AVAudioSession
所有音频操作前必须配置 AudioSession:
import AVFoundation
// 配置音频会话
let session = AVAudioSession.sharedInstance()
try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker])
try session.setActive(true)
| Category | 说明 |
|---|---|
.ambient | 不打断其他音频(游戏背景音) |
.playback | 独占播放(音乐播放器) |
.record | 录音 |
.playAndRecord | 同时播放和录音(语音通话) |
AVAudioPlayer(简单播放)
let player = try AVAudioPlayer(contentsOf: audioURL)
player.prepareToPlay()
player.play()
AVAudioEngine(音频处理链)
let engine = AVAudioEngine()
let playerNode = AVAudioPlayerNode()
let reverb = AVAudioUnitReverb()
engine.attach(playerNode)
engine.attach(reverb)
// 连接节点链
engine.connect(playerNode, to: reverb, format: nil)
engine.connect(reverb, to: engine.mainMixerNode, format: nil)
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 50
try engine.start()
playerNode.scheduleFile(audioFile, at: nil)
playerNode.play()
常见面试问题
Q1: 后台音频播放怎么实现?
答案:
- 开启 Background Modes → Audio
- 设置
AVAudioSession.category为.playback - 设置
session.setActive(true) - 处理中断(来电、其他 App 播放):监听
AVAudioSession.interruptionNotification