大多数浏览器和
Developer App 均支持流媒体播放。
-
AVAudioEngine 新功能
AVAudioEngine 支持音频的实时捕捉、处理和播放。了解如何在您的音频 app 中利用这一强大 API 的增强功能,例如对语音处理和空间渲染模式选择的支持。
资源
-
下载
大家好 欢迎来到 Audio API Updates 会场 我是 Peter Vasil 是 Core Audio 团队的一名软件工程师
我们先来介绍 AVAudioEngine 中的新内容
我们在 AVAudioEngine 中 进行了一些改进 添加了新 API 现在支持语音处理
我们添加了两个新的节点 即 AVAudioSourceNode 和 AVAudioSinkNode 并且 我们还改进了空间音频渲染
现在 我们来谈谈其中的细节 AVAudioEngine 现在拥有语音处理模式 该模式的主要用例 为回音消除和 VoIP App
这意味着什么
启用时将对输入音频 进行额外信号处理 任何设备本身 产生的音频将被剔除 这需要输入和输出节点均处于 语音处理模式
因此 在输入或 输出节点上启用该模式后 引擎便可确保 输入输出节点均已存在 并已切换至语音处理模式
语音处理仅发生在 渲染至音频设备时 而不是在手动渲染
要启用或禁用 语音处理 我们可以在输入 或输出节点启用 setVoiceProcessingEnabled
语音处理无法 动态启用 也就是说 启用该模式时 引擎须处于停止状态 AVEchoTouch 示例代码项目 详细展示了 如何运用 AVAudioEngine 使用语音处理 我们再来看看 AVAudioEngine 中的新节点 AVAudioSourceNode 和 AVAudioSinkNode
两种节点都封装了用户定义的块 App 可以借此 从 AVAudioEngine 收发音频
渲染至音频设备时 块操作受到实时限制 实时限制 在块内部 不应存在任何阻塞调用 包括内存分配 调用 libdispatch 或 使用互斥锁阻塞
我们使用 AVAudioSourceNode 将块传递或渲染至节点 节点将音频数据传递至输出
这就可以很方便地 创建生成节点 而无需 实现完整的音频单元 并将其与 AVAudio 单元封装
节点可用于 实时渲染和手动渲染两种模式
AVAudioSourceNode 支持 线性 PCM 转换 例如采样率 或位深转换 仅有一个输出且没有输入
这段代码片段展示了 如何使用 AVAudioSourceNode 可见 这个块 作为初始化参数值被传递 节点创建后 便可以像其他节点一样建立连接
更细致的示例 可以在我们的 Signal Generator 示例代码项目中找到
我们来看看 AVAudioSinkNode AVAudioSinkNode 与 AVAudioSourceNode 对应 它封装了用户定义的块 从节点链接收 输入音频 并连接至输出
AVAudioSinkNode 仅可用于输入链 换言之 它必须 连接至输入节点的下游
它不支持格式转换 块内的格式必须与 硬件输入格式一致
这个节点可以用于 VoIP App 因为此时输入需要实时处理 这种情形下 安装常规的 Tap 并不够 因为 Tap 无法实时运行
这段代码片段 展示了如何创建 AVAudioSinkNode 与创建 AVAudioSourceNode 非常类似 需要注意的主要步骤是 用一个块初始化节点 将其附加在 Engine 上 再将其连接至输入节点 下游的节点上
我们来看看空间渲染的改进
我们引入了自动 空间渲染算法 而且 AVAudioPlayerNode 现在支持 多声道音频内容空间化
自动空间 渲染算法是 当前路由下最适合的空间化算法 这意味着 开发者不需要 专门针对耳机 或不同的扬声器设置 找出最适合的算法
算法为耳机加入了 近场渲染和头内渲染 为内置扬声器加入了虚拟环绕 可以在 2018 年及之后的 iOS 设备和 MacBook 上 提供使用
这是 AVAudio3DMixing 协议中的新 API AVAudio3DMixingRenderingAlgorithm enum 有了新的条目 auto
此外 我们可以用 outputType 属性 指定输出类型 将属性设定为 auto 时 输出类型可以在 实时模式下被自动检测 但在手动渲染模式中则不然
能够空间化 多声道流 我们便可支持点声源渲染和环境声效渲染 我们也支持基于声道的格式 以及更高阶的 Ambisonics 最高可达三阶
我们为 AVAudio3DMixing 协议 添加了两个新的空间化属性 sourceMode 以及 pointSourceInHeadMode
spatializeIfMono 是过时行为 这与多声道流的 bypass 相同 代表直通或缩混至 输出格式
pointSource 下 音频被归为单声道 并在播放器节点渲染 ambienceBed 下 音频被锚定在三维世界中 并可根据播放器节点 相对听众朝向 所处的位置旋转
这个例子是 环境声效声源模式 自动渲染算法
设定属性后 很重要的一点是确保 连接播放器节点 和环境节点 所用的格式 要包含多声道布局
接下来 我们来看 AVAudioSession 中的新内容
AVAudioSessionPromptStyle 用于 播放语音提示的 App 可以修改 语音提示的样式 例如 如果 Siri 正在讲话 或者通话正在进行 言语导航提示便会 干扰用户体验 我们也不希望 Siri 录下导航提示 比方说 导航 App 应当多关注提示样式的变化 并修改提示 以改善用户体验 我们有三种提示样式 .none .short 和 .normal 我们可以指明 完全不播放提示 播放简短提示 或播放常规提示
我们再来看看 AVAudioSession 的其他改进
默认策略是 音频录制激活时 禁用触觉反馈和系统音效新属性 allowHapticsAndSystemSoundsDuringRecording 可以在会话正在 使用音频录制时 允许播放系统音效 和触觉反馈 它可以使用 set allowHapticsAndSystemSoundsDuringRecording 来设置
欲知更多信息 请访问开发者网站
谢谢收看
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。