AVFoundation-AVAudioPlayer简介

使用System Sound Service播放音效

参考

步骤

  1. 调用AudioServicesCreateSystemSoundID( CFURLRef inFileURL, SystemSoundID* outSystemSoundID)函数获得系统声音ID。
  2. 如果需要监听播放完成操作,则使用AudioServicesAddSystemSoundCompletion( SystemSoundID inSystemSoundID, CFRunLoopRef inRunLoop, CFStringRef inRunLoopMode, AudioServicesSystemSoundCompletionProc inCompletionRoutine, void* inClientData)方法注册回调函数。
  3. 调用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID) 方法播放音效(后者带有震动效果)。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#import <AudioToolbox/AudioToolbox.h>

/**
* 播放完成回调函数
*
* @param soundID 系统声音ID
* @param clientData 回调时传递的数据
*/
void soundCompleteCallback(SystemSoundID soundID,void * clientData){
NSLog(@"播放完成...");
}

/**
* 播放音效文件
*
* @param name 音频文件名称
*/
-(void)playSoundEffect:(NSString *)name{
NSString *audioFile=[[NSBundle mainBundle] pathForResource:name ofType:nil];
NSURL *fileUrl=[NSURL fileURLWithPath:audioFile];
//1.获得系统声音ID
SystemSoundID soundID=0;
/**
* inFileUrl:音频文件url
* outSystemSoundID:声音id(此函数会将音效文件加入到系统音频服务中并返回一个长整形ID)
*/
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
//如果需要在播放完之后执行某些操作,可以调用如下方法注册一个播放完成回调函数
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);
//2.播放音频
AudioServicesPlaySystemSound(soundID);//播放音效
// AudioServicesPlayAlertSound(soundID);//播放音效并震动
}

AVAudioPlayer播放和录制音频

主要通过 AVAudioPlayer 和 AVAudioRecorder 类来实现。

AVAudioPlayer 简介

创建

一般通过 使用本地音频文件的 NSURL 或者包含音频的内存的 NSData。

1
2
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
- (nullable instancetype)initWithData:(NSData *)data error:(NSError **)outError;

使用 prepareToPlay 方法 可以取得需要的音频硬件并预加载 Audio Queue 的缓冲区。在创建的时候调用可以降低调用 play 方法和听到声音输出之间的延迟。

对播放进行控制

常见的 playstoppause的播放暂停功能。
其中 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 则播放无限次直到被停止。
  • 音频计量: 可以读取音量力度的平均值和峰值。