ios音效播放

概述:

AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service)。System Sound Service是一种简单、底层的声音播放服务。

一. 音效限制:

  1. 音频播放时间不能超过30s.
  2. 数据必须是PCM或者IMA4格式.
  3. 音频文件必须打包成.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 

@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(@"播放完成...");
}

你可能感兴趣的:(ios音效播放)