Sucha's Blog ~ Archive for March, 2025

25年3月23日 周日 21:04

AUGraph (1)

说到 iOS 的音频播放,以及录音部分,之前我从未接触过,之前的音视频处理简单点说,其实就是纯 MP4 流的播放,要么是 AVPlayItem 用 https URL 的 mp4、要么是 HLS,反正都是其他组同事封装好的库。

现在遇到的是纯音频的处理,好不容易网上搜到了 2 篇相关的介绍:

但是总有些限制,比如因为更倾向于 8KHz 的输出(低质量的人声),导致 AudioQueue 其实要处理起来也复杂,反正按照网上的东拼西凑的教程,没能搞好从 48KHz 转 8KHz 的 PCM 流。

倒是在 github 上找到了使用 AUGraph 的方案,使用 AUGraph 串联起一个 AudioUnit(貌似不需要 AUGraph 也是可以的),每个 AudioUnit 包含 input(录音)、output(播放)两个 path(大概意思)。

每个 path 又涉及到输入、输出,比如对于播放,输入就是提供 PCM 流,输出则是连接到硬件喇叭、耳机、蓝牙等等。对于录音,输入则是硬件录音,输出则是转频率后的 PCM 流。

这样就很方便了。

当然细节上,还有 AVAudioSession 的处理,其实算是一个独占或者公用音频硬件资源的配置管理类,大概意思。

但仅仅这样是不够的,因为如果距离较近,则环境音、人声都可能导致回音,苹果硬件给提供了一个降人声回声的处理,但感觉没啥用;另外就是很容易就遇到啸叫的问题,而苹果是没有提供这方面的处理的。

有些声音处理的第三方库貌似对啸叫有抑制的作用,但我看了一下源码,其实也是 AUGraph 组的,没能看出如何处理啸叫的,让人头痛。

还有就是硬件转码 48KHz 到 8KHz,感觉质量有点差,原因不清楚。

反正效果一般般,大概这样吧。