AudioToolbox.framework框架学习
http://quding0308.iteye.com/blog/1596710
AudioFile
AudioFileStream类
提供了一个接口,用来解析一个流音频文件。
//创建一个new stream parse
AudioFileStreamOpen(self, AudioFileStream_PropertyListenerProc inPropertyListenerProc, AudioFileStream_PacketsProc inPacketsProc, AudioFileTypeID inFileTypeHint, AudioFileStreamID *outAudioFileStream);
//aquire some data
AudioFileStreamParseBytes(<#AudioFileStreamID inAudioFileStream#>, <#UInt32 inDataByteSize#>, <#const void *inData#>, <#UInt32 inFlags#>);
//设置从流文件中读取data时的offset
AudioFileStreamSeek(<#AudioFileStreamID inAudioFileStream#>, <#SInt64 inPacketOffset#>, <#SInt64 *outDataByteOffset#>, <#UInt32 *ioFlags#>);
//获取完数据后,关闭该流对象
AudioFileClose(<#AudioFileID inAudioFile#>)
AudioServices
AudioQueue
使用一个缓冲队列来存储data,用来播放或录音。播放或录音的时候,数据以流的形式操作,可以边获取数据变播放,或者边录音,边存储。
Resources:https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html
-------------------------------------------------------------------------
NSFileHandle 用来从文件、socket中读取数据
CFReadStream 用来读取一个字节流byte stream,该字节流可以来自于内存、一个文件、一个socket。在读bytes之前,流stream需要被打开。
CFWriteStream用来写一个字节流
AudioQueueRef 定义的一个不透明的数据类型,专门用来代表一个audio queue
AudioQueueBufferRef 是AudioQueueBuffer的别名,表明该参数为一个AudioQueueBuffer对象
AudioFileID 定义一个不透明的数据类型,代表一个audiofile的对象
反思:以ref结尾的对象名称,一般是在参数中使用,表明这个参数的数据类型
//===============
AudioStreamBasicDescription
音频数据流格式的描述.Callback Method 回调函数,系统规定好了回调函数的参数,以及调用的地方,你只需要保证参数的格式正确,向函数里添加代码即可,函数的方法名称可以随便写,没有强制的规定。
AudioQueueNewOutput的第三个参数:inUserData 这是由用户来自定义的,数据的来源。只需要传递一个对象进去即可。使用,当系统自动调用回调函数MyAudioQueueOutputCallback或者MyAudioQueueInputCallback时候,返回的第一个参数inUserData就是你在AudioQueueNewOutput中设置的第三个参数。然后,你需要在回调函数中使用这个对象填充buffer(播放音频,当一个buffer为空时自动调用)或者读取buffer的数据(录音,当一个buffer满时自动调用)。
AudioFileStream_PropertyListenerProc
当在audio stream中找到一个property value后,回调该方法。
AudioFileStream_PacketsProc当在stream中找到audio data后回调该方法。
在参数中的in和out个代表的意思:in代表的是这个参数需要你在外面得到然后传递进去,在这个方法中要使用;out开头的参数表示这个参数是这个方法返回的值,你一般只需要定义一个引用,然后传递进去,执行完这个方法后,这个参数就实例化了。oh,my god!坑爹的苹果。
AudioFile类
一个c编程接口,使用AudioFile可以从内存或硬盘中读取或写入多种格式的音频数据。
AudioFileStream类
提供了一个借口,用来解析流音频文件。功能:从网络中读取数据流,把数据流解析成音频文件。
音频文件流是不容易获取的。当需要从stream中读取data时,以前的data可能已无法使用,而新的data还没有到达,而从网络中获取的data可能还包含packets数据。为了解析audio stream,parser必须记着已经获取的数据,等待剩余的数据。
缓冲区是在哪设置的?
AudioQueue类
一个c编程接口,是Core Audio的一部分。功能:录音、播放音频。
AudioQueue类播放音频时,在内存中维护着一个buffer queue。只要buffer中有数据就可以播放,因此,一般使用AudioQueue对象来播放音频流,这样可以“边下载边播放”。
播放音频的方法:
AudioQueueNewOutput
1、用来创建一个播放音频队列的对象AudioQueueRef,然后就是对该audioqueue对象进行操作。
2、用来添加一个回调方法AudioQueueOutputCallback,调用该方法时会返回一个audioqueue的buffer,该buffer中的数据已经被使用,需要在这个方法中填充新数据。
3、
AudioQueueEnqueueBuffer
想缓冲区中添加新的数据(数据一般从file或网络中获取)
//====下载=====
CFReadStream
CFReadStreamClientCallBack回调函数在CFReadStreamSetClient中调用,是第三个参数。CFReadStreamClientCallBack只有在满足CFReadStreamSetClient中添加的streamEvents发生时才会别回调。
CFReadStreamScheduleWithRunLoop方法把stream加到一个线程中。然后,CFReadStreamSetClient在设置的东西就起作用了。当各种streamEvent发生时,client都会得到通知,client判断是否执行回调方法CFReadStreamClientCallBack。
AudioSession类
一个c接口,用来管理应用中audio的行为。
线程的操作,暂停后可能是县城就停止了。
对线程的操作 让某一个线程停下来。
AudioQueue
一个c编程接口,是Core Audio的一部分。功能:录音、播放音频。
AudioQueue类播放音频时,在内存中维护着一个buffer queue。只要buffer中有数据就可以播放,因此,一般使用AudioQueue对象来播放音频流,这样可以“边下载边播放”。
audioqueue中的方法都是静态方法,使用时传递进去的参数前缀是in,传递出来的参数前缀是out播放音频的方法:
AudioQueueNewOutput
1、用来创建一个播放音频队列的对象AudioQueueRef,然后就是对该audioqueue对象进行操作。
2、用来添加一个回调方法AudioQueueOutputCallback,调用该方法时会返回一个audioqueue的buffer,该buffer中的数据已经被使用,需要在这个方法中填充新数据。
3、
AudioQueueEnqueueBuffer
想缓冲区中添加新的数据(数据一般从file或网络中获取)
AudioQueueAllocateBuffer
为一个audioqueue分配一个queueBuffer,每调用一次创建一个缓冲区,最后所有的缓冲区组成一个缓冲队列。
AudioQueueCreateTimeline
创建一个与audioqueue相关的时间轴。如果想要显示audio的时间,需要熟悉uyutimeLine相关的方法。
audioqueue的属性操作:
具体属性类型见官方文档:https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/c/func/AudioQueueAddPropertyListener
AudioQueueSetProperty
用来设置某一个audioqueue对象的属性,具体属性以 kAudioQueueProperty_*开头
AudioQueueGetProperty
获取audioqueue对象的某一个属性值。首先应该先调用AudioQueueGetPropertySize方法获取value的大小(byte形式)
AudioQueueAddPropertyListener
添加一个属性监听器。当一个audioqueue的对应属性值改变时,会回调这个监听器。
audioqueue的参数操作:
AudioQueueSetParameter
AudioQueueGetParameter
对参数的修改和获取,具体参数parameter包括:音量的调节、声道的调节、以及音量的渐变设置
转载于:https://www.cnblogs.com/itlover2013/p/5098988.html
AudioToolbox.framework框架学习相关推荐
- 【安卓Framework学习】Wifi框架学习之热点评分机制
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...
- 【安卓Framework学习】Wifi框架学习之核心类
系列文章目录 [安卓Framework学习]Wifi框架学习之开启与关闭流程 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开 ...
- 【安卓Framework学习】Wifi框架学习之wifi状态机
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类. [安卓Framework学习]Wifi框架学习之开启与关闭流程. [安卓Framework学习]Wifi框架学习之连接与断开流程 ...
- 【安卓Framework学习】Wifi框架学习之开启与关闭流程
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...
- .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系
.Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...
- php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 以实例程序invo为例(invo程序放在网站根目录下的invo文件夹里,推荐php版本>=5.4) 环境不支持伪静态网址时的配置 第一步: 在app\con ...
- [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP
上一章:[Spring+SpringMVC+Mybatis]框架学习笔记(三):Spring实现JDBC 下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(五):SpringA ...
- 开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)
开源鸿蒙南向嵌入学习笔记--NAPI框架学习(一) 前言--系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些 ...
- 苹果框架学习(二) Metal
文章目录 苹果框架学习(二) Metal Metal简介 1. Essentials 1.1 基本任务和概念 1.2 将OpenGL代码迁移到Metal 1.3 将您的Metal代码移植到苹果Arm芯 ...
最新文章
- 淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)
- SAP MM MI01界面上的‘Freeze book inventory’标记初探
- Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
- [USACO1.5]数字三角形 Number Triangles
- python学习-类(global、nonlocal、继承、多态)
- 黑暗爆炸OJ 3028. 食物 生成函数
- 迷你linux操作系统,自己动手做一个迷你型Linux操作系统
- c++ 读取html,C++ 使用MSHTML分析html 转发
- 3DMAX、MAYA、C4D区别
- VC密码正确无法登陆。证书过期。处理。
- 文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测
- git 常见用法及遇到的问题
- 计算机上设置通讯参数,西门子s7-200plc通讯口参数设置方法
- 游戏封网卡mac地址后修改网卡mac地址
- linux桌面应用软件,ubuntu16.04-18.04 桌面应用软件推荐系列(一)
- 社保账号按身份证查询
- 设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
- jquery加载页面的几种方法(页面加载完成就执行)
- springboot基于vue焕心眼镜商城的设计与实现毕业设计源码091546
- 组态王与西门子1200通信,读取温湿度数据
热门文章
- Codeforces 1114C(数论+唯一分解)
- oracle 手动执行作业,ORACLE 作业操作
- java将数组加上千分号_PHP实现对数字分隔加千分号的方法
- 如何创建MySQL连接器_如何安装mysql连接器
- The 2021 ICPC Asia Regionals Online Contest (I)
- linux 内核 3.3.8,Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8
- maters鸿蒙系统,Flutter入门进阶之旅(十)DialogToast
- linux初级命令行
- 架构师能力升级:掌握JVM科学调优
- 使用Redis的有序集合实现排行榜功能