音效检查流程-audio importer
总结一下我在现在这个项目里所用的音效检查是如何实现的吧,主要涉及到audio importer的使用。
在Unity中加工具菜单,方便策划美术使用,用的是MenuItem[]
主要的步骤是:
- 拿到项目里所有的音效文件
- 修改其meta文件
具体流程如下:
1. 找到音效文件
1 | Directory.GetFiles(AssetsChecker.AudioRoot, "*.*" , SearchOption.AllDirectories).Where(s => s.EndsWith( ".wav" ) || s.EndsWith( ".mp3" )); //遍历所有root目录底下所有音效文件,并保存在dictionary里 |
2. 导入音效文件
有几个重要的importer可以了解
- AudioImporter:可以改变AudioClip的importer设置
- AssetImporter:可以改变asset bundle的设置
- TextureImporter: 可以改变texture的设置
1 | AudioImporter importer = AudioImporter.GetAtPath(file) as AudioImporter; |
3. 音效标准
LoadType
- Compressed In Memory: 音频剪辑将存储在 RAM 中,播放时将解压缩,播放时不需要额外的存储,但会占用更多内存
- Streaming:音频永久存在设备上 (硬盘或闪存上) ,播放流媒体方式。不需要 RAM 进行存储或播放,但是会占占用更多的CPU资源和I/O吞吐量
- Decompress On Load: 未压缩的音频将存储在 RAM 中。这个选项需要的内存最多,但是播放它不会像其他选项那样需要太多的 CPU 电源
CompressionType
- PCM :提供高品质但牺牲文件大小最适合使用在很短的音效上,因为无需解压
- ADPCM: 这种格式适用于大量音效上如脚步爆破和武器,需要解压,但解压速度比vorbis快很多,内存占用它比 PCM 小 3.5 倍
- Vorbis/MP3: 比 PCM 小但是品质比 PCM 低,比 ADPCM 消耗更多 CPU。但大多数情况下我们还是应该使用这种格式。
建议:小文件音频建议使用预加载,大文件音频建议使用将 Load Type 修改为 Streaming , 这样在播放完毕后会自动释放对应文件。
在我们项目中都统一成一种类型,目的就是为了减少内存
- 压缩格式都为Vorbis
- loadType都是Streaming
- Enable forceToMono:没有双声道的需求,所以都设置为单声道
AudioImporterSampleSetting
This structure contains a collection of settings used to define how an AudioClip should be imported.
This structure is used with the AudioImporter to define how the AudioClip should be imported and treated during loading within the Scene.
1 2 3 4 5 6 7 | AudioImporterSampleSettings sampleSettings = new AudioImporterSampleSettings(); ampleSettings.loadType = AudioClipLoadType.Streaming; sampleSettings.compressionFormat = AudioCompressionFormat.Vorbis; ampleSettings.quality = importer.defaultSampleSettings.quality; sampleSettings.sampleRateSetting = importer.defaultSampleSettings.sampleRateSetting; sampleSettings.sampleRateOverride = importer.defaultSampleSettings.sampleRateOverride; sampleSettings.conversionMode = importer.defaultSampleSettings.conversionMode; |
4. 音效的meta文件里面的设置就会被相应改变
资源加载另一种方式
- 加载:举例texture2D:Texture2D image = AssetDatabase.LoadAssetAtPath(ssss, typeOf(Texture2D)) as Texture2D
- EditorUtility.SetDirty()函数来标记已被修改的资源,
- 然后调用AssetDatabase.SaveAssets()来保存修改。
- 调用Resources.UnloadAsset()来清理资源时,只是标记该资源需要被GC回收,但不是立刻就被回收的。
Reference:
- https://www.tamsiree.com/Software/Unity/Unity%E9%9F%B3%E9%A2%91%E5%8E%8B%E7%BC%A9%E4%BC%98%E5%8C%96/#%E6%AD%A3%E6%96%87
- https://blog.csdn.net/qq_18995513/article/details/51955609
- https://docs.unity3d.com/Manual/class-AudioClip.html
__EOF__

本文作者:cancantrbl
本文链接:https://www.cnblogs.com/cancantrbl/p/16053579.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cancantrbl/p/16053579.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律