失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Unity 使用混音器AudioMixer改变语速而不改变音色

Unity 使用混音器AudioMixer改变语速而不改变音色

时间:2020-03-26 22:44:15

相关推荐

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改变语速而不改变音色》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。