从 wav 播放器,学习 AudioToolBox 的 services

AudioToolBox 的工具分两类,

有处理音频数据的,播放即输出,录音即输入等,

主要用到的是 AVAudioEngine,

稍微底层一些,就是音频队列 Audio Queues

使用 Audio Queues 播放,即拿音频数据,注入 buffer, 将 buffer 提交给 Audio Queues

buffer 很好理解,

不用缓冲 buffer,逐个提交音频数据給声卡,也是可以的

坏处是,声卡消费数据慢,内存准备数据快,这是由计算机硬件决定的

使用 buffer, 采样数据注满到一个容量 capability, 即可以一起提交给声卡去消费

内存与声卡的性能,平衡了一些

buffer 大,声卡去消费的时间长,时间延迟 latency 大一些

buffer 小,声卡消费快,时延小

有文件相关的,协助音频处理的,各种服务 service

Audio File Services, 处理本地音频资源文件

Audio File Stream Services, 处理流媒体,

即网络上的音频资源文件


本文的例子,主要是开发一个本地的 wav 播放器

播放器的流程,套路 3 步走
  • 读取本地的音频资源文件,还原成 UInt8 的采样数据

例子中的文件是 wav 格式,非压缩格式,

采样率 16000,位深 bit depth 是16位 pcm_s16le,

一个 16 位的采样,需要两个 UInt8 数据来表达

  • UInt8 的采样数据,转化为 AVAudioPCMBuffer

  • 最后一步,播放

将 AVAudioPCMBuffer 交给 AVAudioPlayerNode, 启动 AVAudioEngine,

让 AVAudioPlayerNode 播放,就好了

第一步对应本文例子代码中的 Parser,

第二步,Reader

第三步, Streamer

本文着重第一步,把音频文件还原为采样数据,

其余见往期博客,GitHub repo 上面有索引的


使用 Audio File Services 来还原

拿文件地址,获取文件

使用 AudioFileOpenURL, 打开文件,通过文件 ID ( AudioFileID ), 使用资源

然后去获取音频文件的属性,

使用 kAudioFilePropertyAudioDataPacketCount, 知道有多少个包 Packet,

使用 kAudioFilePropertyDataFormat, 拿到 wav 文件的描述信息 ASBD, Audio Stream Basic Description.

ASBD 里面有一个包,含有多少字节

非压缩文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值