Unity开发抖音小游戏使用长音频和短音频

server/2024/11/24 5:32:20/

抖音小游戏使用长音频和短音频

  • 介绍
  • WebGL对Unity音频的限制
  • 优化建议
  • Iphone静音不同策略
  • Unity中播放长音频无法播放可以使用以下方法
  • 总结

介绍

最近好久没有更新文章了,最近在研究抖音小程序也在帮公司做抖音小游戏这块,正好之前遇到了一个比较困扰的问题就是小程序长音频的问题,这个问题开始没有认为是个问题,因为我使用的是Unity2021.3.14f做的开发,所以下载了抖音开发工具包如下图是我下载的相关插件和版本(这个我就不放链接了,抖音开放平台的文档会有他们自己连接)。
在这里插入图片描述

WebGL对Unity音频的限制

官方文档

功能限制​
Unity WebGL 仅支持有限的音频功能:​

  • 由于 Unity 在 WebGL 平台音频实现与原生平台存在较大差异,其本身仅支持有限的音频功能,这些限制也存在于小游戏 WebGL 环境中。​
  • 具体支持范围可参考 Unity 官方文档

在小游戏环境中,还存在以下额外的特性或限制:​

  • AudioSource
    1. 音频固定按默认音调、1 倍速播放。不支持调整音调和播放速率相关属性:pitch。​
    2. 音频组件均视为 2D Audio,在空间中的位置关系不会对音频效果产生影响。不支持空间音频相关属性:dopplerLevel、maxDistance、minDistance、rolloffMode、velocityUpdateMode。
  • AudioClip
    1. LoadType 仅支持 Decompress on Load、Compressed In Memory,不支持 Streaming。​
    2. 实际的 LoadType 会根据音频 Buffer 的大小、以最小内存占用为目标动态适配决定,无需开发者适配。​
      • 具体来说,我们以 AudioClip 资源构建后压缩产生的 AAC 二进制数据是否大于 128k 为标准,将其区分为短音频和中长音频。​
      • ​短音频会视为 Decompress on Load,在 AudioClip 加载时解码,解码后的 32 位浮点线性 PCM 数据将一直占用内存直到该资源释放;​
      • ​中长音频会视为 Compressed In Memory,自动切换至调用 StarkAudio 音频接口本地播放,流式解码以优化内存占用。​
      • ​32 位线性 PCM 数据内存占用量(字节) = 时长(秒) x 通道数量 x (32 / 8) x 44100Hz​

在设计游戏音频体验或相关玩法时,开发者应避免使用不受支持的能力。​

优化建议

对于音频性能,还有以下优化建议:​

  • ​双声道音频内存占用比单声道多一倍,如无必要建议使用单声道的 AudioClip。​
  • 建议对同时处于播放状态的 AudioSource 音效数量做出合理限制。

Iphone静音不同策略

如果要用Iphone玩的话一定要打开静音键,因为关掉静音键短音频不播放。
iOS 处于静音模式且未连接耳机时,短音频和中长音频会遵循的不同的静音策略。

Unity中播放长音频无法播放可以使用以下方法


var op = new StarkAudioManager.InnerAudioContextOptions
{src = "http://127.0.0.1/sound/Battle.mp3", // 音频资源的 url 地址autoPlay = true,loop = false,needDownload = true
};
var ctx = StarkAudioManager.CreateInnerAudioContext(op);
ctx.Play();

注意事项​

  • StarkAudio 同时支持 Native 和 WebGL 方案。​
  • 仅支持 wav、mp3、m4a、aac 格式,推荐使用 44100 hz 采样率。​
  • 音频资源会根据 url 缓存,更新音频文件时请改变 url 或 query string,否则可能因缓存导致不生效。​
  • 尽量避免高频创建 InnerAudioContext,建议用对象池管理并复用 InnerAudioContext 实例,一定时间内不使用的实例及时销毁。​
    更多使用方式可参考 StarkAudioManager 接口注释。​

总结

感谢大家支持!


http://www.ppmy.cn/server/144454.html

相关文章

【H2O2|全栈】JS进阶知识(八)ES6(4)

目录 前言 开篇语 准备工作 浅拷贝和深拷贝 浅拷贝 概念 常见方法 弊端 案例 深拷贝 概念 常见方法 弊端 逐层拷贝 原型 构造函数 概念 形式 成员 弊端 显式原型和隐式原型 概念 形式 constructor 概念 形式 原型链 概念 形式 结束语 前言 开篇语…

纯CSS 写的一个树状触摸菜单

wordpress菜单调用 <!-- main nav --><?php wp_nav_menu(array(theme_location>main)) ?> 最终解析出来的HTML代码 <div class"menu-main-container"> <ul id"menu-main" class"menu"> <li id"menu-…

环形缓冲区

什么是环形缓冲区 环形缓冲区,也称为循环缓冲区或环形队列,是一种特殊的FIFO(先进先出)数据结构。它使用一块固定大小的内存空间来缓存数据,并通过两个指针(读指针和写指针)来管理数据的读写。当任意一个指针到达缓冲区末尾时,会自动回绕到缓冲区开头,形成一个"环"。…

Windows Pycharm 远程 Spark 开发 PySpark

一、环境版本 环境版本PyCharm2024.1.2 (Professional Edition)Ubuntu Kylin16.04Hadoop3.3.5Hive3.1.3Spark2.4.0 二、Pycharm远程开发 文件-远程-开发 选择 SSH连接&#xff0c;连接虚拟机&#xff0c;选择项目目录即可远程开发

第1章 初识SpringMVC

第一章 初识SpringMVC 1.1 什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff08;模型&#xff09;V&am…

leetcode2650. 设计可取消函数 generator和Promise

题目描述&#xff1a; 有时候你会有一个长时间运行的任务&#xff0c;并且你可能希望在它完成之前取消它。为了实现这个目标&#xff0c;请你编写一个名为 cancellable 的函数&#xff0c;它接收一个生成器对象&#xff0c;并返回一个包含两个值的数组&#xff1a;一个 取消函…

.net 7.0 解决“The keyword field is required”的问题

在 .net 3.1项目的时候&#xff0c;使用 keyword 做 API 接口的模糊匹配&#xff0c;能够传入keyword “” 进行整表查询。但当我在 .net 7.0 项目中这么使用的时候&#xff0c;传入 keyword 不为空时能够进行匹配&#xff0c;但是当我传入 keyword “” 的时候就报错 “The …

Consumer Group

不&#xff0c;kafka-consumer-groups.sh 脚本本身并不用于创建 Consumer Group。它主要用于管理和查看 Consumer Group 的状态和详情&#xff0c;比如列出所有的 Consumer Group、查看特定 Consumer Group 的详情、删除 Consumer Group 等。 Consumer Group 是由 Kafka 消费者…