系统提示音

//
//  RootViewController.m

#import "RootViewController.h"
#import <AudioToolbox/AudioToolbox.h>
@interface RootViewController ()

@end

@implementation RootViewController


-(void)createUI
{
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    imageView.image = [UIImage imageNamed:@"cat_angry0001.jpg"];
    
    //开启imageView的交互权限
    imageView.userInteractionEnabled = YES;
    
    //为imageView添加点击手势
    UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    [imageView addGestureRecognizer:tap];
    [self.view addSubview:imageView];
}

//系统提示音播放结束的方法
//这个方法必须是C语言函数
//这个方法的返回值类型以及参数类型都是固定的
void finishSound (SystemSoundID SID,void * info)
{
    //向系统注销刚刚注册的SoundID
    AudioServicesDisposeSystemSoundID(SID);
    NSLog(@"提示音播放结束");
}

-(void)tapAction:(UITapGestureRecognizer *)tap
{
    //添加系统提示 需要导入AudioToolbox.framework 并且导入这个头文件
    //系统提示音设置到的所有方法都是AudioServices开头
    //这种方法创建的音频有一定的局限性
    /*
     1、音频的播放时间小于30s
     2、播放的音频格式:wav aif caf格式
     3、只要触发该音频 就会立即播放
     4、这种样式的音频不能暂停也不能循环播放
     */
    
    //<1>获取音频路径
    NSString * path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"];
    //<2>本地路径转化成NSURL
    //转化本地地址
    NSURL * url = [NSURL fileURLWithPath:path];
    //转化网络地址
    // NSURL * url = [NSURL URLWithString:网络地址];
    //<3>开始创建系统音频
    //1、CFURLRef 与 NSURL原理相同 只是表现的形式不同而已 这两种类型可以相互转换
    //2、创建系统提示音 必须向系统注册一个系统音频ID号 如果不注册的话 音频播放不成功
    SystemSoundID SID = 0;
    AudioServicesCreateSystemSoundID((CFURLRef) url, &SID);
    //<4>播放系统提示音
    AudioServicesPlaySystemSound(SID);
    //<5>音频播放结束以后会触发一个方法
    AudioServicesAddSystemSoundCompletion(SID, NULL, NULL,finishSound, NULL);
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self createUI];
   
}

原文地址:https://www.cnblogs.com/sayimba/p/5712009.html