iOS开发之多媒体篇-音效

音效就是时间比较短的音频,如斗地主游戏中打牌的声音,魂斗罗游戏中打枪的声音等

================================================================================================

播放音效需要用到"  <AVFoundation/AVFoundation.h> 框架


播放音效只需要2步:

1.根据音效资源的URL得到与之对应的SystemSoundID

/**

 *  根据音效资源的URL返回对应的SystemSoundID

 *

 *  @param _Nonnull 本地音效资源的URL-->需要CFURLRef类型,用NSURL自动桥接即可

 *

 *  将创建好的SystemSoundID传入;会根据URL返回对应的值

 */

AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);

"   这里的soundID前面一定要加&符号,地址传递后系统才能找到soundID对应的内存去修改它的值!


2.根据URL对应的soundID播放音效

/**

 *  播放音效 不带震动效果

 */

AudioServicesPlaySystemSound(soundID);


/**

 *  播放音效  带震动效果(需要真机演示)

 */

AudioServicesPlayAlertSound(soundID);


补充:

/**

 *  销毁soundID

 */

AudioServicesDisposeSystemSoundID(soundID);

================================================================================================


工具类的使用

在项目中大量使用的公共方法,我们通常会考虑封装一个工具类,减少重复代码。方便开发和后续维护

由于soundID在播放音效时会重复创建,所以可以考虑做一个类似于UITableViewCell缓存池的功能


自定义soundID缓存池思路

>1. 首先创建一个可变字典 字典的key是要播放音效文件的名称   字典的value存放根据音效文件创建的soundID

>2. 从字典中根据音效文件名(如fileName)取出soundID

    SystemSoundID soundID = [_soundIDDict[fileName] unsignedIntValue];

>3. 判断soundID是否存在(是否为0)

    if (!soundID)

    3.1如果不存在,再根据音效文件名去创建soundID,并将此soundID以文件名为key加入字典中(这样下次就能直接从字典中取出soundID,不需要重新创建) --> 然后播放音效--> AudioServicesPlaySystemSound(soundID);

    3.2如果存在,则直接播放音效--> AudioServicesPlaySystemSound(soundID);


注意:由于工具类在项目中到处可用,并且使用者可能什么奇葩都有,所以一定要保证代码的健壮性(如判断文件名若为空直接return).不然有可能不是你代码问题,而且使用者传入格式不对导致出错,闪退等情况,依然会有损你大牛的光辉形象。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值