探索iOS之AudioUnit音效框架

news2024/11/22 16:38:27

iOS的AVAudioUnit提供的音效包括:混响、延迟、均衡器、失真、变速、变调等。按照类型划分为Audio Effect和Time Effect,其中Audio Effect包括混响、延迟、均衡器和失真,而Time Effect主要是变速、变调。

一、音效应用层框架

音效的应用层框架以AVAudioUnit作为核心抽象类,如下图所示:

二、音效HAL层

1、音效与HAL层关系图

音效的HAL硬件抽象层属于CoreAudio框架,而AUHAL即AudioUnit的HAL层,用于连接I/O Kit与Mixer Unit的桥梁。如下图所示:

2、音效HAL层核心类

音效硬件抽象层的相关头文件如下:

  •  AUComponent.h: 定义AudioUnit类型.
  • AudioComponent.h: 定义音频组件的接口.
  • AudioOutputUnit.h: 定义输出单元开关的接口.
  • AudioUnit.h: 涵盖AudioUnit框架类.
  • AudioUnitParameters.h: 预定义AudioUnit的参数常量.
  • AudioUnitProperties.h: 预定义AudioUnit的属性类型.

三、Audio Effect

1、均衡器

AVAudioUnitEQ均衡器提供EQ滤波器参数,用于设置频率、增益、滤波器类型,具体如下:

  • bandwidth:均衡器频宽,范围[0.05, 5.0]
  • bypass:频带的触发状态,true代表激活
  • filterType:滤波器类型,包括lowPass、highPass、bandPass等
  • frequency:频率,有效值为20Hz~采样率/2
  • gain:默认为0 dB,范围[-96 dB, 24 dB]

2、失真

AVAudioUnitDistortion失真可以设置预失真、干湿比。干湿比指的是干声音和湿声音的比例,干声音代表直达声,湿声音代表反射声。具体如下:

  • pregain:失真前的增益,默认-6 dB,范围[-80 dB, 20 dB]
  • wetDryMix:干湿比,默认50%,范围[0%, 100%]

3、延迟

AVAudioUnitDelay延迟可以实现回声效果,可设置参数包括延迟时间、衰减系数等,具体如下:

  • delayTime:延迟时间,默认为1s,范围[0, 2]
  • feedback:衰减系数,默认为50%,范围[-100%, 100%]
  • lowPassCutoff:低通截断,默认为15000Hz,范围为10Hz~采样率/2
  • wetDryMix:干湿比,默认100%,范围[0, 100],0代表全为干声音

4、混响

AVAudioUnitReverb混响可以增强音质,混响支持preset预设环境,具体如下:

  • smallRoom:小房间
  • mediumRoom:中房间
  • largeRoom:大房间
  • mediaHall:中走廊
  • largeHall:大走廊
  • plate:平面
  • mediaChamber:中会议厅
  • largeChamber:大会议厅
  • cathedral:大教堂

四、Time Effect

iOS音频底层提供音质较好的变速变调、变速不变调。而Android往往要依赖第三方库SoundTouch或Sonic实现变速不变调,否则在实现变速功能时声调也发生变化。

1、变调

AVAudioUnitTimePitch变调提供设置混叠、音调、速率参数。具体如下(一度等于1200cents):

  • overlap:混叠,默认值8.0,范围[3.0, 32.0]
  • pitch:音调,默认值0,单位cents,范围[-2400, 2400]
  • rate:速率,默认值1.0,范围[1/32, 32.0]

2、变速

AVAudioUnitRarispeed变速,用于设置播放速率,默认值1.0,范围[0.25, 4.0]。

音调计算公式:

pitch = 1200 * log2(rate)

速率计算公式:

rate = pow(2, cents/1200)

五、AVAudioEngine

AVAudioEngine用于管理音频节点,实现各种音效混合输出播放,处理链架构如下:

我们来看看使用AVAudioEngine实现均衡器音效播放,示例代码如下 :

let audioFile   = AVAudioFile ()
let audioEngine = AVAudioEngine()
let playerNode  = AVAudioPlayerNode()
let effectNode  = AVAudioUnitEQ()

// Attach player node
audioEngine.attach(playerNode)

// Attach effect node
audioEngine.attach(effectNode)

// Connect player node to effect node
audioEngine.connect(playerNode, 
                    to: effectNode, 
                    format: audioFile.processingFormat)

// Connect effect node to output node
audioEngine.connect(effectNode, 
                    to: audioEngine.outputNode, 
                    format: audioFile.processingFormat)

启动AVAudioEngine:

do {
    try audioEngine.start()
    playerNode.play()
} catch {
    // handle error
}

停止AVAudioEngine:

playerNode.stop()
audioEngine.stop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kali-linux使用Metasploit基础

Metasploit是一款开源的安全漏洞检测工具。它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报。当用户第一次接触Metasploit渗透测试框架软件(MSF)时,可能…

限速神器RateLimiter源码解析 | 京东云技术团队

作者:京东科技 李玉亮 目录指引 限流场景 软件系统中一般有两种场景会用到限流: •场景一、高并发的用户端场景。 尤其是C端系统,经常面对海量用户请求,如不做限流,遇到瞬间高并发的场景,则可能压垮系统…

优秀的产品经理需要具备的能力和素质

1. 适应性强。市场不断发展,用户的需求也在不断变化。如果产品不能满足需求,那就改变路线;如果会议不再有效,取消它;如果你需要更多的帮助,尽管开口。了解沉没成本,并采取措施使产品朝着正确的方…

Nature Neuroscience:焦虑为何导致“社恐”?李晓明团队揭示相关脑机制

焦虑是一种常见的负面情绪,也是当今社会的一个热词。在刚刚落幕的《脱口秀大会第五季》中,鸟鸟以一句“躺的时候想卷,卷的时候想躺,永远年轻,永远左右为难,一切都是最不好的安排。”戳中了无数观众的“焦”…

服务器架构-架构图(三)

前言 项目不同,架构自然也不同,所以没有唯一的架构,只有合适项目的架构。 这章以休闲类手游为例。 1:架构图 2张差别,就是中间件 用中间件 主要 异步化提升性能、降低耦合度、流量削峰 根据需求选择一种服务器间的消息…

Sui NFT应用实例:将NFT变成咖啡!

近期在台北智慧城市峰会和博览会中,展示了使用NFT购买咖啡的系统。 在2023年3月28–31日举行的台北智慧城市峰会和博览会中,参与者向大家演示了如何使用NFT兑换一杯香醇的咖啡。此系统由Sui基金会、MomentX以及Suia共同创建,演示了如何使用在…

【牛客网面试必刷TOP101】链表篇(一)

【牛客网面试必刷TOP101】链表篇(一) 前言刷题网站刷题!BM1 反转链表思路一:用栈解决思路二:双链表求解思路三:递归解决 总结 BM2 链表内指定区间反转思路一:头插法迭代思路二:递归 …

几乎涵盖微服务所有操作,阿里2023最新SpringCloudAlibaba实战进阶笔记太强了

近两年,“大厂裁员”总是凭实力冲上各大媒体头条,身在局中的我们早已习以为常。国内的京东,阿里,腾讯,字节,快手,小米等互联网公司都以不同程度的裁员比例向社会输送人才。大量有大厂经验的卷王…

常用性能指标、性能指标评估及性能测试通过标准

一、常用性能指标 1、并发用户数: 指同一时间点对系统进行操作的用户数。准确说为"同时向服务器发送服务请求,给服务器产生压力的用户数量" 并发用户数和注册用户数、在线用户数的概念不同: 并发用户数一定会对服务器产生压力的&#xff0…

Mac FortiClient VPN一直连接不上?正确的安装步骤来了!

Mac FortiClient完整版安装 1、下载FortiClient 这里使用FortiClient 7.0.7的版本。登录fortiClient 7.x 网站下载FortiClient_7.0.7.0245_macosx.dmg。 2、当然要是不想注册,也可以点击这里! 3、或者安装我这里的固定版本【百度网盘】提取码&#xff…

极狐GitLab as Code,全面升级你的 GitOps 体验

💡 近日,由微软和英特尔联合发起的第二届开源云原生开发者日(Open Source Cloud Native Developer Day)上海站顺利落幕。极狐(GitLab) 资深云原生架构师郭旭东在会上进行了《深度探索 GitOps 平台的更多可能》主题演讲&#xff0c…

关于wxapkg路径的一些问题

1 下载安装夜神模拟器。 官网地址:https://www.yeshen.com在模拟器中安装微信,可以下载apk后拖进去,也可在里面下载。不需要RE文件管理器,目前夜神自带Amaze文件管理器,一样的。路径地址为: /data/data/c…

Ubuntu16.04布置CenterFusion记录

安装细节 CenterFusion/src/tools/convert_nuScenes.py内容修改 如果你用的是nuscenes数据集中的Mini部分,那就把convert_nuScenes.py第27行内容中的其他部分注释掉 convert_nuScenes.py在56行处,将数量修改为3 nuscenes-devkit下载 将nuscenes-dev…

计算机网络实验(ensp)-实验1:初识eNSP仿真软件

目录 实验报告: 实验操作 1.建立网络拓扑图并开启设备 2.配置路由器 1.输入命名:sys 从用户视图切换到系统视图 2.输入命名:sysname 姓名 修改路由器名字 3.输入命名:interface g0/0/0 进入端口视图g0…

开源同城跑腿系统(PHP版)

同城跑腿系统的优点在于,它可以为用户提供方便快捷的服务,避免了用户自己跑腿的麻烦和时间成本,同时也为跑腿人员提供了一种灵活的兼职方式 此系统是一款基于likeadmin-php开发的跑腿小程序系统,提供全部前后台无加密源代码&…

知乎高赞回答|只需5分钟,一文教你理解结构化和非结构化数据!

什么是结构化数据? 结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。 什么是非结构化数据? 非结构化数据:指数据结构不…

el-tree饿了么elementUI tree树结构插件设置全部展开折叠

效果如上图↑ // 折叠所有节点 foldAllNodes(type) {let treeNodes this.$refs[type _tree].store._getAllNodes()for (var i 0; i < treeNodes.length; i) {treeNodes[i].expanded false;} }, // 展开所有节点 expandAllNodes(type) {let treeNodes this.$refs[type …

Centos7使用for循环语句批量修改文件名

O、前言 虽然单个文件更名&#xff0c;我们可以使用mv命令进行更名。那几百个文件更改&#xff0c;这个工程量比较大&#xff0c;下面介绍一下如何使用for循环语句来批量修改文件名。 一、环境介绍 1.Centos版本:Centos7-X86_64-Eeverything2009 二、命令介绍 这里主要用到ba…

企业电子商务系统 b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家…

语音常识与基本概念

img { margin: auto; display: block } 数字信号 连续时间信号&#xff1a;在连续时间范围内定义的信号&#xff0c;信号的幅度可以是连续的(模拟信号)&#xff0c;也可以是离散的 离散时间信号&#xff1a;时间为离散变量的信号&#xff0c;即独立变量时间被量化了&#xff0c…