快手 · 移动端音视频开发实战
展晓凯
快手回森技术负责人
12246 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
快手 · 移动端音视频开发实战
15
15
1.0x
00:00/00:00
登录|注册

10|iOS平台音频采集:如何使用AudioQueue和AudioUnit采集音频?

你好,我是展晓凯。今天我们来一起学习 iOS 平台的音频采集。
iOS 平台提供了多套 API 来采集音频,分别是 AVAudioRecoder,AudioQueue 以及 AudioUnit。这三种方法各有优缺点,适用于不同的场景,我们一起看一下。
AVAudioRecorder,类似于 AVAudioPlayer,属于端到端的 API,存在于 AVFoundation 框架中。当我们想指定一个路径将麦克风的声音录制下来的时候,就可以使用这一个 API。优点是简单易用,缺点是无法操控中间的数据。
AudioQueue,之前我们使用 AudioQueue 渲染过音频,其实 AudioQueue 也可以录制音频,也是对 AudioUnit 的封装,它允许开发者获取、操控中间的数据(按照配置的数据格式)。优点是灵活性较强,缺点是上手难度较高。
AudioUnit,是音频最底层的 API 接口,之前我们使用 AudioUnit 渲染过音频,和 AudioQueue 一样,我们也可以使用它录制音频。当我们需要使用 VPIO(VoiceProcessIO)等处理音频的 AudioUnit、需要使用实时耳返或在低延迟场景下,必须使用这一层的 API。优点是灵活性最强,缺点是上手难度更高。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

iOS平台音频采集涉及多种API,包括AVAudioRecorder、AudioQueue和AudioUnit。这三种方法各有优缺点,适用于不同场景。AVAudioRecorder简单易用,但无法操控中间数据;AudioQueue灵活性较强,但上手难度较高;AudioUnit是最底层的API接口,灵活性最强,但上手难度更高。本文重点讲解了如何使用AudioQueue与AudioUnit来采集音频,并介绍了设置AVAudioSession的步骤。在学习如何使用AudioQueue采集音频时,文章详细介绍了整个流程图和核心使用方法,包括创建采集音频类型的AudioQueue、为AudioQueue分配buffer以及启动AudioQueue的方法。文章内容简洁明了,适合读者快速了解iOS平台音频采集的技术特点。 文章还介绍了如何使用AudioUnit实现音频采集和监听耳返功能。通过构造AUGraph并启用RemoteIO的InputElement,实现了音频采集和耳返功能。同时,使用MultiChannelMixer和AudioConvert连接各个AudioUnit,最终将声音送到耳机或扬声器中。另外,文章还介绍了如何将采集的音频存储为文件,使用ExtAudioFile来写文件,并给出了相应的代码示例。总结了AVAudioRecorder、AudioQueue和AudioUnit三种接口的特点和适用场景,以及在实际应用中的选择建议。 通过本文的总结,读者可以快速了解iOS平台音频采集的技术特点,以及如何使用AudioQueue和AudioUnit进行音频采集和处理。同时,文章还提出了思考题,引发读者对音频采集和处理的进一步思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快手 · 移动端音视频开发实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • keepgoing
    老师一直没有介绍audio unit录制音频的方式,请问用audiounit来录制音频是需要给audiounit的input element设置回调,像audioqueue一样按时回调数据保存到自己的队列里,还是有特定的api可以从audio unit 的input element 中获取呢,多谢老师解答

    作者回复: 说实话现在没太有直接使用AudioUnit的了,使用比较多的是AUGraph,这个和裸用AudioUnit非常类似,具体用法可以参考源码。还有就是苹果官方推荐的AVAudioEngine这个相当于对AUGraph的再一次封装。

    2022-12-13归属地:北京
    2
  • 晓龙
    1. 这个 App 是如何实现启动录音的时候音乐作品可以流畅地播放的呢? A: 播放音乐的过程中录音是启动的。只不过塞的是空白帧,开始录制时,填充录制帧? 2. 使用蓝牙耳机的情况下,在保证录制高音质音频的同时,音乐作品如何保持声音的流畅性呢? A: 采集用手机Mic,播放用蓝牙耳机?

    作者回复: 1 其实不是开启录制,而是将Category设置为playAndRecord 2 你的回答是对的,设置Category为PlayAndRecord,然后蓝牙设置A2DP模式就可以使用蓝牙耳机播放,但是录音采集使用机身麦克风

    2022-10-25归属地:北京
  • peter
    请教老师一个问题: Q1:关于“混音”功能,是的,这个功能有点类似于回森App的弹幕功能。其实就是一个音乐编辑的功能。音乐编辑的APP,我搜到并下载了“音乐剪辑”、“音频音乐”这两个APP,都具有“混音”、“变速”、“变调”等功能。关于“混音”功能,从实现的角度,安卓上应该怎么做?基于安卓的MediaPlayer来开发吗? (我感觉MediaPlayer不能实现该功能,就是说没有API可以调用)。是基于OpenSL ES或AAudio来开发吗? 也许OpenSL ES、AAudio有音频合并方面的API,调用即可。(甚至,需要采用FFmpeg来开发?)。针对安卓平台的“混音”开发,请老师从架构、技术方案层面给我一点指导,非常感谢! (“混音”也可能只是一种叫法,或者叫“音频合并”?)

    作者回复: 可以分为几个模块: 1 音频渲染,可以选用讲解的技术来实现; 2 解码模块推荐使用ffmpeg解码为PCM,并且放入队列中 3 自己书写控制模块来进行多轨PCM的Mix,这时候要根据PCM的时间戳来进行对齐

    2022-08-16归属地:北京
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部