IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity音频基础知识 -> 正文阅读

[游戏开发]Unity音频基础知识

Unity音频基础知识


前言

之前一直没有细研究过Unity的音频策略和优化机制,在此学习完过后作下笔记。


基础知识

所谓音频采样率,即每秒采样多少次,人们常说的音频音质就是采样率。采样率越高,音质越好,大小越大。一般来说,CD的采样率/音质是44100HZ。

所谓音频采样精度,即每次采样的结果用多少位存储。最常见的是用16位,即2个字节来存储。

所谓音频采样时间,即音频的播放时间。

所谓音频声道,即采样的位置数量,从几个位置进行采样就是几声道。

所谓音频解码,即压缩音频的解压缩。音频必须解码之后才能进行播放。

所谓码率,即采样率 * 采样精度 * 通道数。

一个未压缩的音频大小在内存中所占 = 采样率 * 采样精度 * 通道数 * 采样时间 = 码率 * 采样时间


音频格式

Unity支持以下四种音频格式:

.aif:苹果开发的一种音频格式。

.wav:Windows开发的一种音频格式。

.mp3:一种有损压缩音频格式。

.ogg:一种有损压缩音频格式。


音频设置

Force To Mono:将多声道的音频在打包前强制混合成为单声道。为什么要强制混合成单声道呢?官方的解释是:混合的过程一般会产生更安静的信号,因此峰值归一化的信号给了更多调整音量大小的空间。但是我觉得更多的应该是极大程度上减少了音频文件的大小。试想一下,直接从双声道减少一个声道变为单声道,可以减少多少数据。

Normalize:在Force To Mono的混合过程中使用音频标准化。所谓的音频标准化可以参考wiki

Load In Background:音频加载时将在单独的线程上延迟进行,不会阻止主线程。即异步加载音频,可能会导致播放音频出现细微的延迟。默认情况下是关闭的。

Preload Audio Data:音频会在加载场景之前进行加载。默认情况下是打开的。所以说,如果音频文件设置是Unity默认的状态,即打开Preload Audio Data,关闭Load In Background,那么当场景加载完成时,场景中所需要的音频文件就已经完全加载完成了。但是需要注意的是,只有Unity知道的需要用到的音频,也就是场景中引用到的音频,才能采取上述的预加载机制。对于那些没有进底包,放在AB包中动态加载的音频,Unity没法帮使用者自动加载。如果是关闭的状态,音频数据只有在调用播放接口前或者主动加载才会进行加载。

Ambisonic:环绕立体混响声,即开启3D音频。


压缩格式

PCM:无压缩,速度最快,适合小音频。

ADPCM:压缩率小,速度较快,适合需要大量播放的不追求品质的音频。

Mp3:压缩率较大,速度较慢。

Vorbis:压缩率大,速度最慢,适合中长音频。在Unity中可以自主调节压缩率。


采样率设置

Preserve Sample Rate:原始采样率。

Optimize Sample Rate:自动优化设置采样率。

Override Sample Rate:手动设置采样率。


加载方式

Decompress On Load:整个音频文件加载到内存中后对其立即进行解压,最终内存占用为解压后的音频大小,即未压缩的音频大小。播放的时候没有延迟,但是一般来说,大音频文件由于未压缩版本占用内存过大,所以尽可能地减少对大音频文件应用此机制。

Compressed In Memory:整个音频文件加载到内存中后不立即进行解压,当音频播放的时候进行解压,最终内存占用的是压缩后的音频大小。但是相比上面一种机制来说,这种机制在播放时会有一丢丢延迟,解压速度不同,播放的延迟也就不同。所以说这种机制应用于大音频文件是比较合适的,既不会占用过多内存,又能接受解压带来的CPU开销和细微播放延迟。

Streaming:直读直放的模式。这种模式使用尽可能小的内存来缓存从磁盘中逐渐读取的数据,并且立刻解码播放音频,播放完后及时释放。但是这种模式的CPU开销是最高的,音频的播放延迟取决于频繁I/O的开销,所以说算是CPU换内存的一种方式。所以说,对内存压力比较大的项目,首选这种模式是不错的选择。除此之外,这种模式也比较适合大音频,或者只需要播放一次的音频。


音频优化

如果没有必要使用多声道,请一定要勾选强制转换为单声道的选项,这会使得音频大小减少很多。

如果对音效质量要求没有那么高,那么采样率可以适当降低一点,压缩格式可以选择压缩率高的选项。

如果对播放延迟特别敏感,那么最好选择Decompress On Load机制,虽然内存占用会大一点,但是一般来说需要无延迟播放的音效都不会很大。可以接受延迟的话,就最好选择Compressed In Memory来减小内存开销。

虽然不太建议使用Streaming方式,如果项目的内存是主要问题的话,尝试使用Streaming方式用CPU换内存也是不错的选择。


音频引擎

待补充…


小结

音频虽然在一个项目中看上去微不足道,但是音频优化确实还是有很多东西可以学习和了解的,比如对内存、对CPU等。

最近家里添了新成员,耽误了一会学习。

总之,学就完事了。


参考

https://docs.unity3d.com/cn/2020.2/Manual/class-AudioClip.html

https://blog.csdn.net/chenfujun818/article/details/81710895

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:34:25  更:2021-07-27 16:35:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/30 17:23:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码