AudioMixer_混音器

1.首先他是个什么东西

  • 他的创建方式Project->右击创建->AudioMixer组件,这个东西只能和AudioSource结合使用,大概就是AudioSource通过混音器输出声音,可以对声音进行更细腻的控制。双击打开大概就如下图所示,标红的地方关键点


    QQ截图20190505140729.png
  • 那下图是我做好的一个混合器,乱七八糟的箭头是啥意思那,


    QQ截图20190505142029.png
  1. Gourps-这个就是相当于几个音响,音乐(AudioSource【OutPut】)从那个音响输出,对应关系自己看一下就可以
  2. Add-同的音响的音效中间这个面板的块上有个Add按钮可以添加不同音效,让声音听起来酷,这里不是专业的只是试了一下。
  3. Exposed Paramters-这个东西就是一个接口相当于音响的控制按钮,通过脚本去控制这个值,比如上面的三个Volume就是对应三个音响的音量。在那几个圈圈上右击选择带有exposed的可以在Exposed Paramters看到了
  • 其实还是很简单的,我主要是用来控制游戏中背景音乐和音效,Master主音量,Music和Effect对应的是背景音乐和音效,正如Gourps看到的父子关系一样,主音量控制背景音乐和音效的,就像爸爸可以管儿子是不是和下图系统的音量合成器有点像
QQ截图20190505143907.png
QQ截图20190505144334.png
  • 最后再附上对应的脚本看看
/**
 *Copyright(C) 2019 by #PROJECTNAME#
 *All rights reserved.
 *FileName:     #SCRIPTFULLNAME#
 *Author:      Nxf 
 *Version:      #VERSION#
 *UnityVersion:#UNITYVERSION#
 *Date:        #DATE#
 *Description:   
 *History:  
*/
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

namespace BioVR.Service
{
    public enum VolumType
    {
        MusicVolume,
        EffectVolume,
        MasterVolume,
    }

    public enum SoundType
    {
        Music,
        Effect,
    }
    public interface ISoundService
    {
        //声音的开关
        void ControlVolume(VolumType volumType, float _volume);


        void PlaySound(AudioClip clip, bool loop);
        void PlaySound(AudioSource source, AudioClip clip, bool loop, bool isEffectMixerGroup);
        void PlaySoundLenth(AudioSource source, AudioClip clip, float time);
        void Stop(AudioSource source);
        void Stop();
    }
    public class SoundService : ISoundService
    {
        AudioSource _audioSourceSound;
        AudioMixer _audioMixer
        {
            get
            {
                return SoundLoader.ExpmAudioMixer;
            }
        }
        public SoundService()
        {

        }

        public SoundService(AudioSource audioSourceSound, bool isEffectMixerGroup = true)
        {
            _audioSourceSound = audioSourceSound;
            _audioSourceSound.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Master")[isEffectMixerGroup ? 2 : 1];
        }

        public void ControlVolume(VolumType volumType, float _volume)
        {
            _volume = Mathf.Clamp(_volume, -100.0f, 0.0f);
            Debug.Log(_volume);
            switch (volumType)
            {
                case VolumType.MusicVolume:
                    _audioMixer.SetFloat("MusicVolume", _volume);
                    break;
                case VolumType.EffectVolume:
                    _audioMixer.SetFloat("EffectVolume", _volume);
                    break;
                case VolumType.MasterVolume:
                    _audioMixer.SetFloat("MasterVolume", _volume);
                    break;
                default:
                    break;
            }


        }
        /// <summary>
        /// 默认声音播放器
        /// </summary>
        /// <param name="clip"></param>
        public void PlaySound(AudioClip clip, bool loop = false)
        {
            if (_audioSourceSound == null)
            {
                throw new NotImplementedException("没有找到AudioSource");
            }

            _audioSourceSound.clip = clip;
            _audioSourceSound.loop = loop;
            _audioSourceSound.Play();
        }

        /// <summary>
        /// 指定声音播放器
        /// </summary>
        /// <param name="source"></param>
        /// <param name="clip"></param>
        public void PlaySound(AudioSource source, AudioClip clip, bool loop = false, bool isEffectMixerGroup = true)
        {
            if (source == null)
            {
                throw new NotImplementedException("没有找到AudioSource");
            }
            source.outputAudioMixerGroup = _audioMixer.FindMatchingGroups("Master")[isEffectMixerGroup ? 1 : 0];
            source.clip = clip;
            source.loop = loop;
            source.Play();
        }
        /// <summary>
        /// 停止播放
        /// </summary>
        /// <param name="source"></param>
        public void Stop(AudioSource source)
        {
            if (source == null)
            {
                throw new NotImplementedException("没有找到AudioSource");
            }
            source.playOnAwake = false;
            source.loop = false;
            source.Stop();
        }

        public void Stop()
        {
            if (_audioSourceSound == null)
            {
                throw new NotImplementedException("没有找到AudioSource");
            }
            _audioSourceSound.playOnAwake = false;
            _audioSourceSound.loop = false;
            _audioSourceSound.Stop();
        }
        public void PlaySoundLenth(AudioSource source, AudioClip clip, float time)
        {

            if (source == null)
            {
                throw new NotImplementedException("没有找到AudioSource");
            }
            source.PlayOneShot(clip);
        }
    }
    public class SoundLoader
    {

        public static AudioClip SoundPointClick
        {
            get
            {
                return LoadClip(SoundType.Effect, "/Common/PointClick");
            }
        }
        public static AudioClip SoundBgMusic
        {
            get
            {
                return LoadClip(SoundType.Music, "/Common/SoundBgMusic");
            }
        }
        public static AudioMixer ExpmAudioMixer
        {
            get
            {
                return LoadAudioMixer("Sounds/AudioMixer/ExpmAudioMixer");
            }
        }
        private static AudioClip LoadClip(SoundType soundType, string pathName)
        {
            AudioClip aduioClip = Resources.Load<AudioClip>("Sounds/" + soundType.ToString() + pathName);
            if (aduioClip == null)
            {
                throw new NotImplementedException(pathName + "声音片段未找到,请确定路径");
            }
            return aduioClip;
        }

        private static AudioMixer LoadAudioMixer(string pathName)
        {
            AudioMixer audioMixer = Resources.Load<AudioMixer>(pathName);
            if (audioMixer == null)
            {
                throw new NotImplementedException("声音混合器未找到,请确定路径");
            }
            return audioMixer;
        }

    }
    public class GameService
    {
        public GameService(string dad)
        {

        }
        public GameService()
        {

        }
        public void Open()
        {
            Debug.Log("dsadad");
        }
    }

}


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容