Audio Mixer Examples

news2024/11/16 6:53:04
简介

        Audio Mixer 是在 Unity 5.0 版本中首次引入的音频混合器工具,它可以帮我们处理声音的分组管理、音效模拟、情景再现等重要业务。

功能入口
  1. 在资产视口单击鼠标右键

  2. 选择 Create 选项

  3. 选择 Audio 选项

  4. 点击 Audio Mixer

Audio Mixer Assets 的属性面板
AUDIO MIXER描述
Audio Mixer Suspend允许开发者暂时挂起音频混音器的处理。当这个选项被启用时,音频混音器不会再处理任何音频信号,这意味着所有通过该混音器的音频都会被静音,不再有任何音频输出。这个功能通常用于节省计算资源,例如在游戏处于后台运行或者不需要播放音效的时候,可以通过暂停音频混音器来减少CPU的负担。当需要恢复音频播放时,可以关闭"Audio Mixer Suspend"选项,音频混音器将重新开始处理音频信号。
Threshold VolumeThreshold Volume选项用于设置自动混音器暂停的阈值音量。当混音器不再接收来自任何音频源或子混音器的音频数据时,它会等待一段预设的时间,并使用自己的输出进行响度测量。如果在这段时间内混音器的输出响度低于Threshold Volume设置的值,混音器将进入暂停模式,停止所有处理以节省CPU资源。这个功能特别有用于那些不是始终活跃的混音器,例如在特定级别使用专门混音器的项目中,可以避免不必要的CPU开销
Update Mode音频更新的模式,包含Normal、Unscale Time。Unscale Time会在Time.timeScale=0时,继续保持更新,而Normal模式则会受到Time.timeScale变量的影响
Audio Mixer Window
Audio Mixer Window
Mixers

        工程中所有存在的Audio Mixer资产都会在这里展示,同时你可以通过该栏目,右上角的➕号,为项目增加新的音频混合器,列表中展示的名称是Audio Mixer资产的实际名称。

Groups

        在每个Audio Mixer的Groups中,可以包含多个音频输出节点,它们以Master节点为根节点依次展开,每个输出节点都可以设置不同的音量、挂在不同的音效。

        它们之间除了平级关系,还有父子关系,子节点继承父节点的一切特性。

        在使用时,我们只需要为Audio Source设置不同的节点(任何节点都可以),就可以创造出不同的声音环境。

Master作为跟节点是不可以删除和重命名的,也无法创建于Master平级的节点。

Snapshots

        快照的作用主要是为了动态的调换音频的情景模式,不同的快照之间节点数量是相同的,但是可以有不同的参数和不同附加效果。

        快照的用途有很多,例如在剑灵中为了突出于NPC对话时的气氛,弱化了对白之外的其他音效。再例如战地中玩家周边爆炸产生的轰鸣效应,会使听觉短暂失聪。又或者,当玩家在野外触发战斗状态时,你想强化玩家队伍和对战阵营发出的声音,那么也可以用快照实现。

Views

        Views 是在编辑器模式下,帮助编辑的功能。在Groups的每个节点前方有一个眼睛,这是一个可视开关。在选择新的View后,可以通过可视开关实现不同View下展示不同节点的效果。

Exposed Parameters

我们可以将一个节点的任何一个参数暴露给脚本以实现动态控制效果。

  1. 选中任意节点

  2. 在Inspector面板中右键单击任意效果的任意属性

  3. 选择菜单栏中 Expose'xxxxxx' 开头的选项将参数导出

        导出的参数会出现在 Exposed Parameters列表中,在这里我们可以对他进行重命名,或取消导出。

脚本相关内容
分贝到音量的相互转换
        float ToDB(float percent)
        {
            return Mathf.Clamp01(percent) * 100 - 80;
        }

        float ToPercent(float db)
        {
            return (db + 80f) / 100f;
        }
为Audio Source 动态设置Audio Mixer Group Node 示例代码
       public void SetGroupNameForAudioSource(AudioMixer mixer,AudioSource source, string groupName = "") 
        {
            if (string.IsNullOrEmpty(groupName))
            {
                groupName = "Master";
            }
            else 
            {
                groupName = $"Master/{groupName.Replace(".","/")}";
            }

            var array = mixer.FindMatchingGroups(groupName);
            if (array.Length > 0) 
            {
                source.outputAudioMixerGroup = array[0];
            }
        }
设置、获取节点参数
		//> Cache变量是一个用来存储字段属性值的字典 Dictionary<string, float>
		//> MixerController : AudioMixer
        public void SetMute(string groupName, bool value) 
        {
            string key = $"{groupName}.volume";
            if (value && !Cache.ContainsKey(key))
            {
                if (MixerController.GetFloat(key, out var db)) 
                {
                    MixerController.SetFloat(key, ToDB(0));
                    Cache.Add(key, ToPercent(db));
                }
            }
            else if(!value && Cache.Remove(key, out var percent))
            {
                MixerController.SetFloat(key, ToDB(percent));
            }
        }

这里有点不一样,AudioMixer只提供了通过float值修改属性变量的接口,所以静音这种只能通过变量暂存在实现下。

切换快照
        /// <summary>
        /// 切换一个快照
        /// </summary>
        /// <param name="snapshotName"></param>
        /// <param name="timeToReach"></param>
        public void SwitchSnapshot(string snapshotName, float timeToReach = 0.25f) 
        {
            var target = MixerController.FindSnapshot(snapshotName);

            if (target == null) 
            {
                Debug.LogError($"不存在的混音快照 {snapshotName}");
                return;
            }

            target.TransitionTo(timeToReach);
        }
扩展

除此之外我们还可以控制快照A到快照B声音衰减的方式,默认是线性过度的。

Linear(线性的)

Smoothstep(平滑的)

Squared(平方)

SquareRoot(平方根)

BrickwallStart(从时间开头切断)

BrickwallEnd(从时间结尾切断)

Attenuation(衰弱的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一讲:NJ本地配置

本地配置:就是和CPU本地放在一起的系统配置,不是通过网络通信等方式配置的。 NJ本地系统配置 一、CPU机架(即CPU所在的机架) 如图所示最右边数量是有限制的,每个机架最多可放置10个扩展IO单元 二、扩展机架(1个本地的NJ扩展系统中,最多可以扩展3个机架,且每个机架最多…

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案

近年来&#xff0c;星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作&#xff0c;推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术&#xff0c;以及信雅达在金融领域的深厚积累&#xff0c;围绕数…

数据科学统计面试问题 -40问

前 40 名数据科学统计面试问题 一、介绍 正如 Josh Wills 曾经说过的那样&#xff0c;“数据科学家是一个比任何程序员都更擅长统计、比任何统计学家都更擅长编程的人”。统计学是数据科学中处理数据及其分析的基本工具。它提供了工具和方法&#xff0c;可帮助数据科学家获得…

【数据挖掘】关系网络可视化

目录 1. Pyvis 介绍 2. 关系网络可视化 1. Pyvis 介绍 Pyvis 是一个 Python 库&#xff0c;用于创建和可视化网络图。它基于 Vis.js 库&#xff0c;可以生成交互式的 HTML 文件&#xff0c;让用户在网页上直观地查看和操作网络图。以下是 Pyvis 的主要功能和特点&#xff1a…

12.直接交换机-direct exchange

直接交换机与上一篇介绍的扇出类型交换机的区别就在于&#xff1a; 扇出交换机的routingKey都是空串&#xff0c;也就是一样的。而直接类型交换机的routingKey都是不一样的。还有就是交换机的类型不一样。 直接类型交换机&#xff0c;也叫做路由模式。通过routingKey可以做到区…

ESP32-S3-DevKitC-1开发记录帖——与MPU6050进行姿态检测

目录 MPU6050传感器——姿态检测 1.姿态检测 1.1 基本认识 1&#xff09;坐标系 2&#xff09;姿态角的关系 3&#xff09;陀螺仪检测的缺陷 4&#xff09;利用加速度计检测角度 5&#xff09;利用磁场检测角度 1.2 姿态融合与四元数 1.3传感器工作原理 1.4 MPU6050模…

k8s集群可视化工具安装(dashboard)

可视化安装 2.1、下载相关的yaml文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml Vim recommended.yaml 2.2、部署 kubectl apply -f recommended.yaml 查看那kubernetes-dashboard命令空间下的资源 kubectl get …

Edge浏览器加载ActiveX控件

背景介绍 新版Edge浏览器也是采用Chromium内核&#xff0c;虽然没有谷歌浏览器市场占有率高&#xff0c;但是依托微软操作系统的优势&#xff0c;Edge浏览器还是发展很强劲&#xff0c;占据着市场第二的位置。随着微软停止服务IE浏览器&#xff0c;曾经风光无限的IE浏览器页退出…

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型&#xff08;如 LLaMA-7B、GPT-3 等&#xff09;的开发、训练、微调、推理和部署过程中&#xff0c;各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述&#xff0c;涵盖训练和微调的区别&#…

docker相关内容学习

一、docker的四部分 二、镜像相关命令 三、容器相关命令

SpringCloud断路器的使用与原理解析

Spring Cloud断路器是在分布式系统中实现容错的一种方式。它的原理是通过在调用链路上添加断路器,当某个服务的调用出现故障或超时时,断路器会自动迅速地切换到快速失败模式,防止故障扩散,从而保护整个系统的稳定性。 Spring Cloud断路器的使用与原理解析如下: 一、使用断…

计算机网络知识点总结————物理层

前言 一、物理层的基本概念 物理层解决什么问题 物理层的主要特性 二、传输媒体 导引型传输媒体 同轴电缆 双绞线 光纤 非导引型传输媒体 三、数据通信的基础知识 1.术语 2.编码方式 总结 前言 我站在清醒和麻木的边缘&#xff0c;不能堕落也不能解脱 一、物理层的…

Godot学习笔记4——函数

GDScript中函数也叫方法或模块&#xff0c;与变量一样&#xff0c;包括自定义函数与内置函数。大部分内置函数可以对游戏内容产生实质性影响&#xff0c;少部分函数比较特殊。 一、函数定义 在Godot中&#xff0c;我们使用“func”来定义函数&#xff0c;后面跟函数名、括号和…

php仓库管理系统设计与实现

1.1 研究背景 随着经济一体化和电子商务的迅速发展&#xff0c;网络传播信息的速度打破了传统信息传递的模式&#xff0c;互联网的高速发展和计算机应用在各个高校进展迅速&#xff0c;更多信息化产品的突飞猛进&#xff0c;让现代的管理模式也发生了巨大的变化&#xff0c;本…

0503触发器的电路结构和工作原理

触发器的电路结构和工作原理 如何区分锁存器还是触发器&#xff0c; 看有没有这个三角符号&#xff0c;告诉是上升沿触发还是下降沿触发&#xff0c;没有三角符号就是电平触发。低电平触发就画个小圈。高电平触发就不画小圈。有小圈的三角就是下降沿触发 setup建立时间 hold 保…

ecshop网站部署

目录 步骤1 ecshop网站的部署 一、安装环境 二、设置开机启动 ​三、 测试php ​四、上传安装包 五、安装ecshop 步骤1 ecshop网站的部署 一、安装环境 yum install -y httpd mariadb-server php php-devel php-mysql 浏览器访问&#xff1a;192.168.30.2 二、设置开机启…

解决小程序web-view两个恶心问题

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 1.web-view覆盖层问题 问题由来 web-view 是一个 web 浏览器组件&#xff0c;可以用来承载网页的容器&#xff0c;会自动铺满整个页面。 所以这得多恶心。。。不仅铺满&…

集合的面试题和五种集合的详细讲解

20240724 一、面试题节选二、来自于b站人人都是程序员的视频截图 &#xff08;感谢人人都是程序员大佬的视频&#xff0c;针对于个人复习。&#xff09; 一、面试题节选 二、来自于b站人人都是程序员的视频截图 hashmap&#xff1a; 唯一的缺点&#xff0c;无序&#xf…

mysql之视图的创建以及查询;

一&#xff1a;数据库及其表的创建&#xff1a; mysql> create database mydb15_indexstu; Query OK, 1 row affected (0.00 sec)mysql> use mydb15_indexstu; Database changed mysql> create table student(-> sno int primary key auto_increment,-> sname …

js语法 proxy对象拦截方法详解,proxy代理一个对象(数组,函数)的操作方法

如果还不能理解什么是proxy代理可以参考&#xff1a;js语法---理解反射Reflect对象和代理Proxy对象_js代理对象-CSDN博客 proxy代理对象(数组&#xff0c;函数)&#xff0c;可以拦截的操作 apply---拦截方法的执行(包括直接执行&#xff0c;通过apply&#xff0c;call执行),和对…