一.介绍

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

音频播放时间不能超过30s
数据必须是PCM或者IMA4格式
音频文件必须打包成.caf、.aif、.wav中的一种(注意这是官方文档的说法,实际测试发现一些.mp3也可以播放)

音效处理对应的框架是AudioToolbox,只不过AVFoundation框架包含了此框架

二.使用

使用System Sound Service 播放音效的步骤如下:

 方法播放音效(后者带有震动效果)

2.使用对应的API,开始播放音效:

  (1)根据音效文件,来生成SystemSoundID

    

  (2)根据SystemSoundID,播放音效

    调用AudioServicesCreateSystemSoundID(CFURLRef  inFileURL, SystemSoundID*  outSystemSoundID)函数获得系统声音ID

    如果需要监听播放完成操作,

    则使用AudioServicesAddSystemSoundCompletion(SystemSoundID inSystemSoundID, CFRunLoopRef  inRunLoop, CFStringRef  inRunLoopMode

    或者使用 AudioServicesSystemSoundCompletionProc  inCompletionRoutine, void*  inClientData)方法注册回调函数。

    如果不需要监听播放完成的操作,

    则调用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) 

    或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

  (3)根据SoundID释放内存

    AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID),(如果是不需要监听播放完成的方法,则不需要这句代码)

   

代码如下:

//获取路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"2018-11-27 10_36_51 1.wav" withExtension:nil]; //根据音效文件创建systemSoundId
SystemSoundID soundID = ;
AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID); //根据soundId播放音效一:
// AudioServicesPlaySystemSoundWithCompletion(soundID, ^{
// NSLog(@"play finish");
// //当音效播放完成时,我们需要根据SystemSoundID 释放内存资源
// AudioServicesDisposeSystemSoundID(soundID);
// }); // 根据soundId播放音效二:播放音效时,手机会跟着震动;
AudioServicesPlayAlertSoundWithCompletion(soundID, ^{
NSLog(@"play finish");
AudioServicesDisposeSystemSoundID(soundID);
});

OC-系统音效播放的更多相关文章

  1. iOS - AudioServicesPlay 短频音效播放

    前言 extern void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID) __OSX_AVAILABLE_STARTING(_ ...

  2. Android点赞音效播放

    /** * 音效播放 */ private SoundPool mPool; /** * 音效id */ private int voiceID; voiceID = initSoundPool(); ...

  3. iOS开发,音效的播放简单实现以及音效播放的简单封装

    一.音效的播放简单实现 二.音效播放的封装 -- 封装思路:将生成的SystemSoundID存放到字典中,每次播放的时候从字典中取出对应的SystemSoundID,没有的话再创建 头文件中定义类方 ...

  4. Unity3d之音效播放和调用手机震动

    http://blog.csdn.net/sunshine_1984/article/details/12943979 今天研究了下Unity3d音效播放相关内容,整理下实现细节. 1,添加音效文件到 ...

  5. 吴裕雄--天生自然python学习笔记:python 用pygame模块制作一个音效播放器

    用 Sound 对象制作一个音效播放器. 应用程序总览 程序在执行后默认会把 WAV 音频文件加载到清单中,单击“播放”按钮可开始 播放,同时显示 “正在播放 xxx 音效”的信息 . 播放过程中,可 ...

  6. Android 音乐(音效)播放方式总结

    一.音效的分类 音效按照作用的不同,可以将音效分为即时音效和背景音乐.两种音效在Android中的实现技术是不同的. 主要的实现方式为:SoundPool.MediaPlayer. 区别在于,Medi ...

  7. ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案

    遇到问题: 在做计算机视觉课程作业,运动目标检测与跟踪时,在ubuntu系统下用kazam录制了一小段运动目标检测的视频,然后在课上展示时播放不出来,想着Mp4格式的不应该播放不出来啊.网上寻求了一番 ...

  8. cocos2d安卓android长音效播放不完全

    是因为安卓限制了音效的内存,一般把mp3的比特率压缩一下.就可以搞定了.

  9. HTML5 精灵8方向移动+背景滚动+音效播放+鼠标事件响应

    如何清空画布 通过调用函数 ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);   如何实现背景滚动 首先我们准备了一张2532*940 ...

随机推荐

  1. 综合5项百度大脑AI技术,快速构建智能交通方案

    一.整体方案:思路:整合百度AI功能,通过百度AI解决.优化在公交运行过程中遇到的运营.管理.安全等方面的问题.具体如下: 安全方面:通过驾驶员检测+语音合成,对驾驶员状态进行实时检测,跟踪,告警.  ...

  2. JavaWeb学习——web.xml文件说明

    JavaWeb学习——web.xml文件说明 摘要:本文主要学习了web.xml文件的作用以及如果配置. 是什么 web.xml文件是用来在JavaWeb项目里面初始化配置信息的,比如:访问的首页.S ...

  3. report for PA2

    目录 说明 Report for PA 2(writed with vim) Part i - pa2.1 Steps: instr(seperately) Part ii - 2.2 Part ii ...

  4. JSP的介绍

    JSP概念 JSP全称java server page,中文含义为java服务端页面.对于jsp的理解需要和另外几个相似的概念连接起来:Html和Servlet.常规的html作为一个静态文本传输,具 ...

  5. Dotnetcore或owin程序启用SSL的方法

    https端口需要绑定SSL证书 操作方法与步骤如下: 在IIS中创建证书 查看证书的指纹 使用命令行绑定端口与证书 上述第三步也可以更换为创建一个新的空网站,绑定https端口为相同端口并绑定证书, ...

  6. 12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1)

    12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1) APPLIES TO: Oracle Databas ...

  7. Java8_map新增方法

    参考博客 https://irusist.github.io/2016/01/04/Java-8%E4%B9%8BMap%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95/#ge ...

  8. vue.set( target, key, value ) this.$set(对象获数组,要更改的具体数据,重新赋值)用法

    调用方法:Vue.set( target, key, value ) target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据 value :重新赋的值 具体用法js代码: //设 ...

  9. MASMPlus连接出错:error LNK2001: unresolved external symbol _WinMainCRTStartup

    坑:汇编语言第三版使用的是masm5.0,网上找到了一个masm32,一看名字,不就是masm的32位版本吗.然也..这是另外一个软件 MASM32并非是指Microsoft的MASM宏汇编器.MAS ...

  10. java之可变个数的形参

    //采用数组形参来定义方法 public static void test (int a, String[] books); //采用可变个数形参来定义方法 public static void te ...