使用到的库:
均为IOS自带库,为了深入学习,我首先从Audio库开始操作学习,
而不是AVAudioPlayer/AVPlayer(AVFoundation)这一个高级库,
首先我定制的任务是:简单实现缓存下录音播放,简单完成文件读写下的录音播放
均适用AudioQueue机制(如下图):
原理就是利用buffer存储内容,将buffer放入queue进行执行:
期间缓存读写更加灵活易于处理,文件读写要求写入结束后进行读取,本职一样,只是读取内容的方法不同。
首先;先看Recorder:
定义了一个结构体对audio参数进行保存
另外,可能还要用到其它内容就另外作为Recorder类的成员就行了,因为从官方demo我们可以看到参数设置是一个很关键的地方,错误或者遗漏的时候就会有问题。
首先,核心的内容在于,看到刚才第一张图片中:
我们是通过Callback进行对数据操作的,而且通过了解audio机制以后,我们
可以看到:
加载queue的时候,需要向函数提供一个callback接口
在这里我提供的是:
在这个callback 中我们需要实现数据buffer插入到Queue之中执行,(之后 另外利用AudioQueueStart就能够使得queue执行)
需要注意的地方是:不论从文件读写还是从缓存获取数据,都要注意一些问题,callback函数一般设置为static void的静态函数,使用内存复制等操作最好放在另一个实现函数当中,不然会出现内存访问溢出等问题,当然你也可以讲static取消掉,把它当成普通函数使用,这样虽然方便,但是对于整个Audio处理来说并不是最好的,因为并不能保证callback一直监听,每次都必须调用一次callback函数,减慢了一定的读取速度。
这里我提供文件读取(static方式)和缓存读取(非static):
其它的使用就剩下调用queue操作函数了,包括:
AudioQueueStart、AudioQueueStop、AudioQueuePause、AudioQueueDispose这几个常用的
还有AudioQueueFlush、AudioQueueReset等一些不常用的函数,可以参考文章后面的链接学习:
最后,Player的操作也是相似的,大家可以通过对比类推,函数的调用可能存在差异,可以看下链接进行学习,另外,我提供一个Demo给大家。
DEMO:http://download.youkuaiyun.com/detail/atomic123/9302345