草庐IT

Unity 之 音频类型和编码格式介绍

陈言必行 2023-08-04 原文

Unity 之 音频类型和编码格式介绍

Inspector窗口显示多个导入设置。这些设置决定了:加载行为,压缩行为,质量,采样率,以及是否支持双声道音频。

一,加载音频文件

Unity可通过以下3中设置可以指定音频文件的加载方式:

  • Preload Audio Data(预加载音频数据):开启则音频数据在场景初始化期间自动加载,禁用则键加载推迟到需要使用音频文件时。
  • Load In Background (在后台加载):开启则在后台加载完成之前是阻塞主线程,关闭则是后台异步加载。
  • Load Type(加载类型):通过加载类型近一步控制加载音频文件,后面会详细说。

二,Load Type:加载类型

  • Decompress On Load(加载时解压缩): 此设置压缩磁盘上的文件以节省空间,并在首次加载时将其解压到内存中。这是加载音频文件的标准方法,应该在大多数情况下使用。

    解压文件需要一段时间,这会导致加载过程中的额外开销,但会减少播放音频文件时所需的工作量。

  • Compressed In Memory(内存中保持压缩状态):此设置在加载音频时只是将其从磁盘复制到内存中。只有在播放音频文件时,才会在运行期间对其进行解压缩。

    这将在播放音频剪辑是牺牲运行时CPU,但在音频剪辑保持休眠状态是,提高了加速度,减少了运行时内存消耗。

    因此,此选项最适合频繁使用的大型音频文件,或者在内存上晕倒难以置信的瓶颈,并且愿意牺牲一下CPU周期来播放音频剪辑

  • Streaming(流): 此设置将在运行时加载,加密和播放文件,具体做法是逐步将文件推过一个小缓冲区,在缓冲区中一次只存在整个文件的一小部分。

    此方法对特定音频剪辑使用的内存量最小,但运行时CPU使用的内存量最大。由于文件的每个回放实例都需要自己的缓冲区,因此此设置有一个不幸的缺点,即多次引用音频剪辑,会导致内存中同一音频剪辑的多个副本必须单独处理,如果胡乱使用,会导致运行时CPU成文。因此此选项最后用于定期播放的单实例音频剪辑,这种音频剪辑不需要与自身的其他实例或甚至与其他流式音频剪辑重叠。例如,此设置最后与背景音乐和环境音效一起使用,这些音效需要在场景的大多数时间里播放。

小结: 默认情况下,弃用Preload Audio Data,禁用Load In Background以及使用Decompress On Load的加载类型会导致场景加载时间过长,但可以确保在需要时理解准备好场景中的每个音频剪辑。当需要音频剪辑时,不会有加载延迟,音频剪辑将在调用Play()时播放。缩短场景加载时间的一个很好的折中方法是,为以后才需要的音频剪辑弃用Load In Background,但这不应该用于场景初始化后不久就需要的音频剪辑。然后通过AudioClip.LoadAudioData()AudioClip.UnloadAudioData()手动控制音频数据加载的时间。可以在一个场景中使用所有方法,已达到最佳性能。


三,编码格式与品质级别

Unity 支持3种音频剪辑编码格式,在Inspector面板汇总查看音频剪辑属性是,由Compression Format选项决定哪种格式:

Compressed :压缩算法取决于使用目标平台

  • Vorbis:有损压缩。Ogg全称应该是OGG Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的
  • MP3:有损压缩。同样位速率(Bit Rate)编码的OGG与MP3相比听起来更好一些。MP3格式是受专利保护的。
  • PCM:无损未压缩,提供接近模拟音频效果。它以更大的文件大小换取更高的音频质量,适用于极短且需要高清晰度是。
  • ADPCM:有损压缩,此格式在大小和CPU消耗方面比PCM高效的多,但压缩会产生相当大的噪声。适用于爆炸,冲击声音,则可以忽略噪声。

有关Unity 之 音频类型和编码格式介绍的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  5. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  8. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  9. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  10. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

随机推荐