AudioToolbox 是 Apple 提供的音频框架,用于在 iOS、macOS、watchOS 和 tvOS 设备上进行音频处理。它提供了底层 API 以处理音频流、音效、音乐播放等功能。
AudioToolbox 的主要功能
1、播放系统音效
例如震动、UI 按键点击音、提示音等:
import AudioToolbox
AudioServicesPlaySystemSound(1000) // 播放系统音效(1000是音效 ID)
常见系统音效 ID
1000:新邮件提示音
1304:相机快门音
4095:震动
2、播放短音效
AudioServicesPlaySystemSound 适用于短时间音效:
var soundID: SystemSoundID = 0
let soundURL = Bundle.main.url(forResource: "click", withExtension: "wav")!
AudioServicesCreateSystemSoundID(soundURL as CFURL, &soundID)
AudioServicesPlaySystemSound(soundID)
3、播放长音频文件
用于背景音乐或较长的音频播放,需使用 AVAudioPlayer(推荐):
import AVFoundation
var player: AVAudioPlayer?
func playSound() {
if let url = Bundle.main.url(forResource: "music", withExtension: "mp3") {
player = try? AVAudioPlayer(contentsOf: url)
player?.play()
}
}
4、录音功能
需要 AVAudioRecorder 进行录音:
import AVFoundation
let settings = [
AVFormatIDKey: kAudioFormatMPEG4AAC,
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 2
]
let url = FileManager.default.temporaryDirectory.appendingPathComponent("recording.m4a")
let recorder = try AVAudioRecorder(url: url, settings: settings)
recorder.record()
什么时候用 AudioToolbox?
短音效(如 UI 按键、警告音):用 AudioServicesPlaySystemSound
震动反馈:用 AudioServicesPlaySystemSound(4095)
背景音乐、长音频:推荐用 AVAudioPlayer
录音:用 AVAudioRecorder
AudioToolbox 相关问题
AudioServicesPlaySystemSound 无效?
1、检查设备静音(iPhone 物理静音开关)
2、检查音量
3、确保使用的是 .caf / .wav / .aiff 格式
4、使用物理设备测试(模拟器可能无效)
AudioToolbox 崩溃?
如果遇到 AudioToolbox 相关的 EXC_BAD_ACCESS 或 SIGABRT,可能是:
SystemSoundID 释放前被调用
AudioSession 没有正确初始化
总结
AudioToolbox 主要用于短音效和系统音
对于长音频播放或录音,推荐用 AVFoundation
震动反馈也可以通过 AudioToolbox 处理
如果崩溃日志和 AudioToolbox 无关,那它可能只是加载的一个系统库,实际崩溃点应该还是 clearFullRowsAndColumns() 方法。
相关文章
Apple播放音频的AVAudioPlayer:https://fangjunyu.com/2025/03/09/apple%e6%92%ad%e6%94%be%e9%9f%b3%e9%a2%91%e7%9a%84avaudioplayer/
扩展知识
常见系统音效ID
在 iOS/macOS 开发中,使用 AudioToolbox 框架的 SystemSoundID 可以播放系统提供的内置音效。常见的系统音效 ID 包括:
