AudioRecorder && AudioPlayer简单实现

本文详细介绍使用iOS的AudioQueue机制实现录音与播放的功能。通过自定义结构体保存音频参数,并利用callback接口处理数据缓冲区,实现了从文件及缓存读取数据的录音播放功能。此外还介绍了AudioQueue相关函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用到的库:


这里写图片描述

均为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给大家。

http://msching.github.io

DEMO:http://download.youkuaiyun.com/detail/atomic123/9302345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值