从 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 里面有一个包,含有多少字节

非压缩文件,计算比较简单,每个包 packet 的大小都相等,

采样数据分布是线性的,

使用 AudioFileReadBytes, 一次读取一个包的数据,

将读取到包里面数据的头指针,分配一块内存,

### 如何在不同平台上安装 Audio Toolbox #### MATLAB 中的 Audio Toolbox 安装方法 对于希望在MATLAB环境中使用Audio Toolbox进行音频处理的情况,可以通过MATLAB自带的功能来完成安装。启动MATLAB后,在主页选项卡中找到并点击“附加功能”,这将打开Add-On Explorer窗口[^2]。在此界面内搜索“Audio Toolbox”。一旦找到了对应的工具包,则可以选择免费试用或是购买以获取使用权,并按照提示完成安装过程。 #### iOS 开发中的 AudioToolbox Framework 添加方式 针对iOS开发而言,如果目标是在Xcode项目里集成AudioToolbox框架来进行底层音频操作的话,那么应该先创建一个新的或打开现有的Xcode工程。接着前往项目的构建设置页面,在“Link Binary With Libraries”部分添加`AudioToolbox.framework`到链接库列表当中[^3]。这样就可以利用该框架所提供的API实现更复杂的音频管理逻辑了。 #### 使用 FFmpeg 处理 PCM 文件的方法 当涉及到直接播放PCM格式的声音数据时,可以借助FFmpeg提供的ffplay命令行工具轻松达成目的。首先需确认已通过Homebrew成功安装了ffmpeg软件包;如果没有,请执行如下Shell指令: ```bash brew install ffmpeg ``` 随后即可运用简单的ffplay命令加载指定路径下的pcm文件进行回放[^4]: ```bash ffplay -f s16le -ar 44100 -ac 2 /path/to/file.pcm ``` 这里假设采样率为44.1kHz、声道数为立体声双通道以及编码格式为无压缩短整型线性量化(Signed 16-bit Little Endian)。实际应用过程中可能需要依据具体情况进行相应调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值