Unity 使用混音器AudioMixer改变语速而不改变音色
Unity 中播放的音频语速通常是生成的时候就已经定了,无法再进行更改。本文将讲解如何使用Unity中自带的AudioMier(混音器)来解决音频语速问题且不改变音色,这样我们就可以将语速提取为一个参数自行控制了。
1、首先找一段音频导入到unity 中,然后场景中新建一个物体,在该物体上挂上Audio Source组件,将该段音频拖到Audio Source组件中AudioClip上,如下图所示:
2、 在Resources文件上右键Create->Audio Mixer,即在Resources文件下新建一个混音器
3、双击此混音器,选中Groups下Master分组,在右侧Inspector检索面板里点击Add Effect按钮添加Pitch Shifter,如下图所示:
4、 做到这一步的同学场景里的Inspect检索面板里总共有三个分组:Pitch、Attenuation、Ptich Shifter的Ptich 和 Ptich Shifter,现在将Ptich和Pitch Shifter两个分组参数暴露出来,步骤如下:
4.1 首先鼠标放在Pitch上,点击右键会出现参数选择列表,点击第一个Expose 'Level(of Master->Distortion)' to Script,这样把Pitch参数暴露了出来,代码里就可以获取到此参数了,如图:
做完这一步后你会发现Master这一栏顶部的Exposed Parameters里多了一个参数名,这个就是你暴漏的那个参数,如图:
右键此参数Rename 重命名为MASTER_Pitch(名字可以自己起),如图:
4.2 将另一个分组 Pitch Shifter下的Pitch参数按照上面的步骤也暴露出来,并命名为PITCHSHIFTER_Pitch
最终我暴露的两个参数是这样的:
我们暴露的两个参数MASTER_Pitch和PITCHSHIFTER_Pitch是有一定关系的,按照这个关系进行混合就能保持音色不变的情况下调节音速,代码里会讲解。
5、下面就开始新建脚本控制混音器了
新建脚本命名为MyAudioMixer,并挂在第一步中新建的那个物体上,代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class MyAudioMixer : MonoBehaviour
{AudioSource myAudioSource;private AudioMixer audioMixer;private float MASTER_Pitch_Value = 1.0f;private float PITCHSHIFTER_Pitch_Value = 1.0f;// Start is called before the first frame updatevoid Start(){myAudioSource = transform.GetComponent<AudioSource>();audioMixer = Resources.Load<AudioMixer>("NewAudioMixer");audioMixer.SetFloat("MASTER_Pitch", MASTER_Pitch_Value);//设置混音器下Master的Ptich值(音高)PITCHSHIFTER_Pitch_Value = 1.0f / MASTER_Pitch_Value;audioMixer.SetFloat("PITCHSHIFTER_Pitch", PITCHSHIFTER_Pitch_Value); //设置了Master的Ptich值就要相应的设置Pitch Shifter的Pitch值,不然会变音色----二者的对应关系是:1/Master的Pitch值 myAudioSource.outputAudioMixerGroup = audioMixer.FindMatchingGroups("Master")[0]; //将AudioMixer的"Master"分组赋值给AudioSource的OutPut属性}
}
audioMixer.SetFloat("MASTER_Pitch", MASTER_Pitch_Value); 设置Pitch的值 注意:这里的参数名就是你在Unity 场景里Master分组重命名的那个参数名,写错了代码就找不到这个参数了
audioMixer.SetFloat("PITCHSHIFTER_Pitch", PITCHSHIFTER_Pitch_Value); 设置Pitch Shifter 的值 注意:这里的参数名就是你在Unity 场景里Master分组重命名的那个参数名,写错了代码就找不到这个参数了
PITCHSHIFTER_Pitch=1 / MASTER_Pitch 这就是两个参数的关系值,使用这个关系就能保证语速变化而音色不变
myAudioSource.outputAudioMixerGroup = audioMixer.FindMatchingGroups("Master")[0];是将按照上述关系混合后的Master分组赋值给 AudioSource组件下的Output属性,这样AudioSource播放音频的时候就会按照这个混合关系进行音频播放
总结:混音器就是让AudioSource组件按照一定混合关系去播放音频
不足之处:当调慢音速时还是有音色的改变,调快音速时有音色有稍微的改变,同学们可以除了Pitch Shifter之外再添加一些其他分组研究一下,笔者也正在尝试一些其他混合关系。不过大体思路是这样的,望评论区留言共同讨论。
Unity 使用混音器AudioMixer改变语速而不改变音色相关推荐
- 李洋疯狂C语言之将”you are come from shanghai ”倒置为”shanghai from come are you”,将句子中的单词位置倒置,而不改变单词内部结构
题目: 编写一个C函数,将"you are come from shanghai "倒置为"shanghai from come are you",及将句子中的 ...
- C#自动更新Excel报表而不改变原有样式(2021.8.11)
C#自动更新Excel报表而不改变原有样式 2021.8.11 1.需求分析 1.1 原始数据表(`原始数据.xlsx`) 1.2 Excel报表(`20210811 报表.xlsx`) 1.3 报表 ...
- html页面跳转后url不变,使用pushState()改变url而不刷新
编者注:这个pushState()是一个HTML5的新接口,你可能在一些科技博客如36kr上看到过,ajax加载新的文章,并且改变网址却不需要刷新页面,本站也用到了这个,当你在首页往下拉时,加载分页内 ...
- Android 中的混音器 AudioMixer 实现分析
Android framework 的音频处理模库 libaudioprocessing (位于 frameworks/av/media/libaudioprocessing) 提供了混音器组件 Au ...
- 一个墙纸还可以改变使用裁剪工具改变图像
向量壁纸提供Windows 7是一个创新的,远比普通光栅壁纸或纯像素建立了壁纸.长自windows操作系统的发展,微软一直蓬勃发展,使它成 为一个有吸引力的用户工作空间提供了一个独特的前景在电脑屏幕上 ...
- java list 改变变量的值_3、list改变指针还是改变值
list1改变指针还是改变值 1.python中相同数据类型的list和string可以直接用"+"相连 "+"只是扩展了list长度,并不是每个元素相加. l ...
- 接受你无法改变的事情 改变你可以改变的事情
接受你无法改变的事情 改变你可以改变的事情 (本文只有在1月18日可以学习到.) 保持简单是一种智慧, 它有三个层面的含义:接受你无法改变的事情,改变你可以改变的事情,正确评判哪些事情是可以改变的或者 ...
- 改变网changeself.com,记录着改变生活、改变态度、改变思维方式、改变特质、改变行为方式,一切从改变自己身上的特质开启
改变网致力于提供如何改变相关信息.改变生活.改变态度.改变思维方式.改变特质.改变行为方式,一切从改变自己身上的特质开启.随着人们对生活品质的追求不断提升,怎样让自己变得更具有魅力和品位,如何改变自己 ...
- 心若改变,态度就会改变;态度改变,习惯就改变;习惯改变,人生就会改变
很久很久以前,人类都还赤着双脚走路.有一位国王到某个偏远的乡间旅行,因为路面崎岖不平,有很多碎石头,刺得他的脚又痛又麻.回到王宫后,他下了一道命令,要将国内的所有道路都铺上一层牛皮.他认为这样做,不只 ...
最新文章
- 青岛程序员加班看不上球赛崩溃,外卖小哥伸出援手:我帮你改代码
- shell getopt 获取参数
- Torchlight(火炬之光)人物骨骼动画
- java鼠标图片裁剪,如何用Java中的鼠标指针捕获屏幕图像
- 会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准
- 用java制作心理测试软件_0基础学习制作app
- 互联网协议入门-通俗易懂的讲计算机网络5层结构
- Java基础学习总结(122)——Java八种基本数据类型的包装类及其装箱拆箱详解
- 习题3.8 符号配对 (20分)
- 实验4	C++程序的结构(4学时)
- python 中的运算符重载
- Fortran 95简单教程(
- w7怎么更换计算机用户名和密码怎么办,win7怎么修改系统用户名
- [源码和文档分享]基于HTML5和JS实现的在线电子钢琴网页版
- web扫描器之Nessus
- Android获取QQ名片赞数量,教你如何提高QQ名片赞数量 如何增加QQ赞数量
- 最新!「大象机器人」即将推出双臂人形机器人,智能机器人时代可期!
- element-ui表格组件分页后完整导出到excel的方法
- Qt实现侧边栏显示隐藏以及自定义提示框
- 人民币成功“入篮”SDR,这意味着什么?
热门文章
- 水果店开业活动,水果店开业活动策划
- “早知道这些我的公司就不会死”系列(二):Cohort Analysis
- 微信服务器保留几年记录_企业微信朋友圈管理的工具
- 人群计数经典方法Density Map Estimation,密度图估计
- 爱普生喷墨打印机之连续供墨系统经典故障
- 使用多线程实现多客户端的连接(通过Socket实现TCP编程)
- ios android的中文翻译,苹果 iOS 14 Beta反向翻译,拒不承认iOS不如安卓
- Python 简单的人名对话
- 黑洞同样释放能量--霍金修正黑洞理论
- 李佳明的成长经历与留学选择