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

news/2024/11/25 16:38:11/

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

  • 介绍
  • 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/news/1549862.html

相关文章

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误,在清除缓存后首次刷新会显示此错误,重新渲染错误消失 解决方法: 在 iconfont 图标库选择项目设置 选中 Base64 保存,重新点击链接 -> 复制代码到项目中 操作步骤:

香港服务器安装Debian12操作系统有python环境嘛

香港服务器安装Debian 12操作系统后,通常会包含Python环境。 Debian作为一个广泛使用的Linux发行版,其操作系统版本通常会预装一些常用的软件和库,Python作为一种流行的编程语言,自然也被包括在内。 具体来说,Debian …

Docker 实践与应用举例:提升开发与运维效率的利器

Docker 是一个开源的容器化平台,用于自动化部署、扩展和管理应用程序。它通过将应用及其依赖打包成容器,能够使得开发、测试、部署和生产环境中的应用一致性得以保证。在本文中,我们将深入探讨 Docker 的基础知识、安装与配置,结合实际案例展示 Docker 在开发和运维中的强大…

BOM的详细讲解

BOM概述 BOM简介 BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。 BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准&#xff…

Spark SQL操作

Spark SQL操作 文章目录 Spark SQL操作一、DataFrame的创建与保存1.前提操作2.数据准备3.创建4.保存DataFrame 二、DataFrame的操作1.printSchema2.show3.select4.filter5.groupBy(filed)6.sort(field) 三、临时表操作1.创建临时表2.通过临时表及SQL语句进行查询 四、从RDD转换…

Unity 设计模式-原型模式(Prototype Pattern)详解

原型模式 (Prototype Pattern) 原型模式 (Prototype Pattern) 是一种创建型设计模式,它允许通过复制现有的对象来创建新对象,而不是通过直接实例化类。这意味着你可以通过克隆原型对象来生成新的实例,而不必依赖类的构造函数。该模式的核心思…

【Linux】Linux进程概念

【Linux】Linux进程概念 🥕个人主页:开敲🍉 🔥所属专栏:Linux🍊 🌼文章目录🌼 1. 冯诺依曼体系结构 2. 操作系统(Operator System) 2.1 操作系统的概念 2.2…

三十一、构建完善微服务——API 网关

一、API 网关基础 系统拆分为微服务后,内部的微服务之间是互联互通的,相互之间的访问都是点对点的。如果外部系统想调用系统的某个功能,也采取点对点的方式,则外部系统会非常“头大”。因为在外部系统看来,它不需要也没…