iOS 9以来,相关音频编程的框架越来越趋于完善,较之前版本有很大变化,至iOS 10,大量主要Framework已经全部用swift语言实现,性能优越,编程效率大大提高,现整理总结相关内容如下:
主要音频相关API框架
底层CoreAudio因为大量C风格代码,基础保持不变的前提下,之上AudioToolBox部分功能移动至AVFoundation,并用swift重新封装成OOP风格,特别强化完善了AVAudioEngine的高效性能,使得复杂的音频操作不再完全依赖C代码。
AVAudioSession
AVAudioSession完全取代旧版AudioSession,使得App可以创造出更好的用户体验。
AVAudioSession 编程要点
- 注册系统notifications
- AVAudioSessionInterruptionNotification
- AVAudioSessionRouteChangeNotification
- AVAudioSessionMediaServicesWereResetNotification
- 为不同的应用需求设置category, mode, and options
- 设置并激活Session状态
- 响应并处理notifications
- Interruptions 中断
- Route changes 路由改变
- Media services were reset
AVAduioPlayer 简单播放音频文件(低延时)
- 支持 wav, caf, m4a, aac, mp3, aif 格式的解码
- 允许控制音量、进度、音相、循环和速率,
- 多个AVAudioPlayer对象可以同步播放
AVAudioRecorder 简单录音
- 支持录音和定时录音
- 监控录音峰值表
- 支持AAC, HE-AAC, HE-AACv2, ALAC, LPCM格式编码
AVPlayer 播放器
支持播放控制的UI类,包含AVPlayerView / AVPlayerViewController
可以同时播放音频和视频
AVAudioEngine 高级的音频播放和录制
AVAudioEngine是一套由Objective-C/Swift重新封装的功能丰富,性能强大的API,可以用简洁的方式处理实时音频(延时在5-20ms以内),管理AudioUnit,配置AUGraph节点,用流程化的方式配置、组合音频路由,还支持3D空间定位。
- 播放或录制文件(files),缓冲区(buffers)内容
- 音频处理:效果器effects, 混音mixing
- 3D环境音效
相关工具类
- AVAudioFormat(格式)
- AVAudioBuffer(缓冲区)
- AVAudioFile(文件)
- AVAudioConverter(格式转换)
CoreMIDI
MIDI相关的内容在iOS9以后也得到了充分的完善,不仅可以支持外部MIDI设备,还加入了AVAudioSequencer音序器,控制MIDI数据更加简洁了。
更多详细内容请参考WWDC 2016 507 - Delivering an Exceptional Audio Experience