在iOS中,音效我们是使用AudioToolbox.framework框架实现。
将短音频注册到系统声音服务(SystemSoundService), 音效框架,导入AudioToolbox.framework框架,添加头文件:
#import <AudioToolbox/AudioToolbox.h>
AudioToolbox.framework框架是一套基于C语言的框架
它的实现原理是将短音频注册到系统声音服务(SystemSoundService)
示例:
回调
- (void)viewDidLoad{
[super viewDidLoad];
[self playSoundEffect:@"bellTone.wav"];
}
pragma mark -音效
音效播放完成的回调函数,这个是C语言函数,第一个参数是音效ID,第二个是万能参数
void soundCompleteCallBack(SystemSoundID soundID, void *clientData) {
NSLog(@"播放完成");
}
- (void)playSoundEffect:(NSString *)name {
//获取音效文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:nil];
//创建音效文件URL
NSURL *fileUrl = [NSURL URLWithString:filePath];
//音效声音的唯一标示ID
SystemSoundID soundID = 0;
//将音效加入到系统音效服务中,NSURL需要桥接成CFURLRef,会返回一个长整形ID,用来做音效的唯一标示
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
//设置音效播放完成后的回调C语言函数
AudioServicesAddSystemSoundCompletion(soundID,NULL,NULL,soundCompleteCallBack,NULL);
//开始播放音效
AudioServicesPlaySystemSound(soundID);
}
注意事项:
- 添加进系统声音服务,获得系统声音ID,ID是区分不同音效的唯一标示
/* 音效文件URL,需要把NSURL桥接成CGURLRef */
void AudioServicesCreateSystemSoundID(
CFURLRef inFileURL, SystemSoundID *outSystemSoundID /* 返回音效唯一标示ID */
);
-
开始播放,有两种播放模式
/* 开始播放音效 */ void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID); /* 开始播放音效并带震动 */ void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID);
音频播放时间不能超过30s
数据必须是PCM或者IMA4格式,现在的基本都符合
音频文件必须是CAF、AIF、WAV的一种,实际上有些MP3格式也可以播放。
参考博客:http://www.jianshu.com/p/4a3d0152913a