在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. jqure全选/取消

    平时我们会遇到全选/全取消, 前台效果: <div class="fix pb40 mt32 ml30 lh22"> <div class="l mr2 ...

  2. hdu 2501 Tiling_easy version 递推

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2501 题目分析:已知有2*1,2*2,两种型号的瓷砖,要求铺满2*n的格子有多少种方法.可以考虑最左边 ...

  3. 判断Featureclass的类型

    一个Featureclass可以是Shapefile Feature Class.Personal Geodatabase Feature Class.File Geodatabase Feature ...

  4. 51nod1269 B君的圆锥

    1629 B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 B君要用一个表面积为S的圆锥将白山云包起来.   B君希望包住的白山云体积尽量 ...

  5. Hibernate之HQL总结

    hibernate运行过程: Hibernate作用 1.hibernate是java应用和关系数据库之间的桥梁,她负责java对象和关系数据库之间的映射. 2.hibernate内部封装了通过JDB ...

  6. AJAX请求和跨域请求详解(原生JS、Jquery)

    一.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数 ...

  7. C# 获得手机归属地功能

    今天通过查资料了解到web的页面抓取功能,应用HttpWebRequest和HttpWebResponse功能,从http://www.showji.com网站中抓取归属地信息 应该说这个方法是从别的 ...

  8. Microsoft Press Free eBook

    微软的免费的电子书, 都是Microsoft Press 出版的 有以下价格方面 Windows Server(大体上都是Windows Server 2012 ) Microsoft Azure(好 ...

  9. 删除或清空具有外键约束的表数据报-ERROR 1701 (42000)

    OS:  centos 6.3 DB:5.5.14 mysql> select database();+------------+| database() |+------------+| sa ...

  10. 从word中提取图片的三种方法

    方法1:使用截图方法来提取并保存图片,如果你安装了QQ并且运行了的话,你可以使用Ctrl+Alt+A来截图,然后在QQ聊天框中按CTRL+V来保存图片,当然你可以在PS新建文档按CTRL+V来粘贴图片 ...