在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音、QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里。

注意:

  • 需要播放的音频文件不能超过30秒
  • 必须是IMA/ADPCM格式[in linear PCM or IMA4(IMA/ADPCM) format]
  • 必须是.caf  .aif .wav文件

1、自定义系统声音

    // 要播放的音频文件地址
NSString *urlPath = [[NSBundle mainBundle] pathForResource:@"end_refreshing" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:urlPath]; // 声明需要播放的音频文件ID[unsigned long]
SystemSoundID ID; // 创建系统声音,同时返回一个ID
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &ID);

2、根据自定义系统声音时传入的ID,播放自定义系统声音

    // 根据ID播放自定义系统声音
AudioServicesPlaySystemSound(ID);

3、有时候我们需要在完成播放的时候做一些事情,比如继续播放下一个音频或者提示用户,或者决定以后都不再使用该音频ID了,可以在下面的函数中移除该音频ID

    // 播放完成后执行的操作
/*
*参数说明:
* 1、刚刚播放完成自定义系统声音的ID
* 2、回调函数(playFinished)执行的run Loop,NULL表示main run loop
* 3、回调函数执行所在run loop的模式,NULL表示默认的run loop mode
* 4、需要回调的函数
* 5、传入的参数, 此参数会被传入回调函数里
*/
AudioServicesAddSystemSoundCompletion(ID, NULL, NULL, &playFinished, (__bridge void *)(self));
}

@implementation与@interface外部自定义一个函数,然后传入这个函数名的地址

void playFinished(SystemSoundID  ssID, void* clientData)
{
unsigned long ID = ssID; // ssID 不能直接作为参数打印出来,需要中转一次 NSLog(@"播放完成-传入ID为-%lu,传入的参数为%@", ID, clientData); // 移除完成后执行的函数
AudioServicesRemoveSystemSoundCompletion(ID); // 根据ID释放自定义系统声音
AudioServicesDisposeSystemSoundID(ID);
}

这样就可以实现播放完成后调用预先定义好的函数playfinished(),继续做一些你希望的事情,但是别忘了,ARC中C语言函数需要自己管理内存,所以这里,我们需要回调完成后移除刚刚添加的操作 ,并且确认当你以后不再需要播放该ID的音频时,清理该ID音频对应的所有资源

4、完成以上步骤就可以进行简单的通过自定义系统声音来播放简单且频繁的音频文件了。

  注意:

  1 > 必须等到播放完成才能清理该ID对应的所有资源,也就是说,如果我们打算不再使用该音频,可以在完成后调用的函数(playFinished)里清理资源,如上例所示。 不过一般情况下,既然加到系统声音里的多是频繁使用的,可以在程序结束或者某个控制器销毁的时候再清理。

  2 > 如果在AudioServicesPlaySystemSound(ID)之后马上调用AudioServicesDisposeSystemSoundID(ID),你将听不到任何声音,并且也不会调用播放完成后的函数, 这是因为,系统音频播放的所有操作都是放到主线程之外执行的,当主线程执行到清理的时候,该音频如果试图播放ID对应的音频,将无法找到。

5、哦,还有震动~ 一句话

    // 播放系统预定义的音效,kSystemSoundID_Vibrate代表震动,如果有其它需求可以点进头文件里去找相应的提示音类型
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

以上内容纯属个人理解,如有不当之处欢迎留言。

ios开发小技巧之提示音播放与震动的更多相关文章

  1. iOS开发小技巧 - UILabel添加中划线

    iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...

  2. iOS开发小技巧 - runtime适配字体

    iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...

  3. 【转】IOS开发小技巧

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  4. iOS开发小技巧 -- tableView-section圆角边框解决方案

    [iOS开发]tableView-section圆角边框解决方案 tableView圆角边框解决方案 iOS 7之前,图下圆角边框很容易设置 iOS 7之后,tableviewcell的风格不再是圆角 ...

  5. iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...

  6. iOS开发小技巧--利用苹果官方API播放视频(方法已经过时,了解一下)

  7. iOS开发小技巧--iOS程序进入后台运行的实现

    iOS程序进入后台运行的实现 视频中看到老师用的iOS7,代码中有开启timer,无限请求数据的功能,但是切换到后台,代码就不打印了 自己用的iOS9,进入后台还是可以打印的,再次进入前台也可以正常运 ...

  8. iOS开发小技巧

    1. 解析详情页(是webView)遇到的3个问题: 1.图片太大,超出屏幕范围 2.怎么在webView上面添加一行文字 3.文字太小 1.解决方法 webView.scalesPageToFit ...

  9. iOS开发小技巧--字典和数组的中文输出

    一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...

随机推荐

  1. .NET XML文件增删改查

    查询 采用的是DataSet 的 ReadXML方法. DataSet ds = new System.Data.DataSet(); ds.ReadXml("bdc.xml"); ...

  2. Cocos2d-JS加速度计与加速度事件

    在很多移动设备的游戏使用到了加速度计,Cocos2d-JS引擎提供了访问加速度计传感器的能力.本节我们首先介绍一下加速度计传感器,然后再介绍如何在Cocos2d-JS中访问加速度计.加速度计加速度计是 ...

  3. iOS 触摸的位置放一个大头针

    iOS 触摸的位置放一个大头针 UITapGestureRecognizer *mTap = [[UITapGestureRecognizer alloc] initWithTarget:self a ...

  4. (转)LR监控Linux系统性能计数器详解

    从LR里面add measurement,填写linux机器的IP,出现所有unix/linux的计数器,包括cpu的,mem的,disk,network的.这里介绍几个常用的: (对于如何监控Lin ...

  5. JDK 与 JRE (转)

    很多程序员已经干了一段时间java了依然不明白jdk与jre的区别.JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. ...

  6. nginx配置多个网址

    实战Nginx与PHP(FastCGI)的安装.配置与优化:http://ixdba.blog.51cto.com/2895551/806622 Nginx配置文件详细说明:http://www.cn ...

  7. Raphael画圆弧

    paper.path([pathString]) A  椭圆 (rx ry x-axis-rotation larg-arc sweep-flag x y) 参数 rx 椭圆的横轴 ry 椭圆的纵轴 ...

  8. Windows Server 2003 IIS支持ASP

    1.ASP支持是很简单的  这里简单的说一下 2.安装IIS服务   这里就不多演示了  很简单的 3.安装完成后打开IIS的扩展功能 ASP代码测试页为: <% response.write( ...

  9. 如何修改 Discuz 门户文章页默认视频大小

    在 Discuz 系统中,论坛插入 Flash 等可以输入自定义的尺寸,但是门户文章页不可以修改.经过一番研究,找到了修改门户文章页默认视频大小的方法如下,希望对你有用:找到:/source/func ...

  10. 关于JS异步加载方案

    javascript延迟加载的解决方案: 1.使用defer标签 <span style="font-size: small;"><script type=&qu ...