概述:
AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service)。System Sound Service是一种简单、底层的声音播放服务。
一. 音效限制:
- 音频播放时间不能超过30s.
- 数据必须是PCM或者IMA4格式.
- 音频文件必须打包成.caf、.aif、.wav中的一种.
二. 音效调用:
. 调用如下函数获得系统声音ID。
AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID* outSystemSoundID)
. 如果需要监听播放完成操作,则使用如下方法注册回调函数。
AudioServicesAddSystemSoundCompletion(SystemSoundID inSystemSoundID,CFRunLoopRef inRunLoop, CFStringRef inRunLoopMode, AudioServicesSystemSoundCompletionProc inCompletionRoutine, void* inClientData)
.调用
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
方法播放音效(后者带有震动效果)。
.代码如下
#import "ViewController.h"
// 导入系统框架
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *callButton = [UIButton buttonWithType:UIButtonTypeCustom];
[callButton setTitle:@"paly" forState:UIControlStateNormal];
[callButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
callButton.backgroundColor = [UIColor grayColor];
callButton.center = self.view.center;
callButton.bounds = CGRectMake(10, 0, self.view.bounds.size.width-10, 44);;
[self.view addSubview:callButton];
[callButton addTarget:self action:@selector(playButtonEvent:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)playButtonEvent:(UIButton *)sender {
NSString *audioFile=[[NSBundle mainBundle] pathForResource:@"sound" 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);//播放音效并震动
//3.销毁声音
AudioServicesDisposeSystemSoundID(soundID);
}
/**
* 播放完成回调函数
*
* @param soundID 系统声音ID
* @param clientData 回调时传递的数据
*/
void soundCompleteCallback(SystemSoundID soundID,void * clientData){
NSLog(@"播放完成...");
}