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 update
    void 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之外再添加一些其他分组研究一下,笔者也正在尝试一些其他混合关系。不过大体思路是这样的,望评论区留言共同讨论。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值