使用System Sound Service播放音效
步骤
- 调用
AudioServicesCreateSystemSoundID( CFURLRef inFileURL, SystemSoundID* outSystemSoundID)
函数获得系统声音ID。 - 如果需要监听播放完成操作,则使用
AudioServicesAddSystemSoundCompletion( SystemSoundID inSystemSoundID, CFRunLoopRef inRunLoop, CFStringRef inRunLoopMode, AudioServicesSystemSoundCompletionProc inCompletionRoutine, void* inClientData)
方法注册回调函数。 - 调用
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
方法播放音效(后者带有震动效果)。
示例:
1 |
|
AVAudioPlayer播放和录制音频
主要通过 AVAudioPlayer 和 AVAudioRecorder 类来实现。
AVAudioPlayer 简介
创建
一般通过 使用本地音频文件的 NSURL 或者包含音频的内存的 NSData。
1 | - (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; |
使用 prepareToPlay 方法 可以取得需要的音频硬件并预加载 Audio Queue 的缓冲区。在创建的时候调用可以降低调用 play 方法和听到声音输出之间的延迟。
对播放进行控制
常见的
play
、stop
和pause
的播放暂停功能。
其中 stop 和 pause 的区别是 stop 方法会撤销调用 prepareToPlay时所做的设置,而 pause 方法不会。
除此之外还有:
- 修改播放器的音量 (volume):从0.0(静音)到1.0(最大音量之间)。
- 修改播放器的 pan 值:允许使用立体声播放声音,从 -1.0(极左)到 1.0(极右)。默认 0.0(居中)。
- 调整播放率 (rate):需要配合 enableRate 使用。范围从 0.5(半数)到2.0(2倍数)。
- 无缝循环 (numberOfLoops): 播放 n+1次,若 n<-1 则播放无限次直到被停止。
- 音频计量: 可以读取音量力度的平均值和峰值。