• Skip to primary navigation
  • Skip to main content

Alessandro Famà

Technical Audio Design

  • Portfolio
  • Tutorial
  • About
  • Alessandro Famà
  • Tutorial FMOD-Unity
  • Controllare il mixer di FMOD in Unity

    Il mixer di FMOD può essere controllato con tutte le sue funzioni in Unity. In questo tutorial controlleremo il volume degli bus, dei VCA e attiveremo gli snapshot di FMOD direttamente usando del codice C#.

    Scarica il progetto Unity & FMOD per questo tutorial.

    Controllo del volume degli bus di FMOD in Unity

    Il volume di un bus in Unity può essere controllato in tre semplici passi:

    1. Dichiarazione del bus
    2. Richiamo del bus
    3. Impostazione del volume

    Dichiarazione del bus

    Proprio come nella creazione delle istanze degli eventi, dobbiamo prima dichiarare il bus:

    FMOD.Studio.Bus bus;

    Creazioni del bus

    Ora possiamo richiamare il nostro bus desiderato con nella funziona Start() di Unity:

    bus = FMODUnity.RuntimeManager.GetBus("bus:/MusicBus");

    bus:/MusicBus è una stringa e si riferisce ai gruppi del mixer di FMOD Studio creati nella scheda Routing. Possiamo copiare questo percorso cliccando con il tasto destro del mouse su un gruppo e selezionando l’opzione Copy Path:

    FMOD Studio Bus opzione "Copy Path"
    FMOD Studio Bus opzione “Copy Path”

    Controllare il volume di un bus

    Con bus.setVolume(float volume) possiamo impostare il volume desiderato per il bus. setVolume() assume un numero in virgola mobile che va da 0 (mute) a 1 (massimo volume). Naturalmente è anche possibile lavorare con la scala in dB. Pertanto dichiariamo due variabili:

    [SerializeField] [Range(-80f, 10f)]
    private float busVolume;
    private float volume;

    busVolume è una variabile (float) che possiamo controllare tramite uno slider nell’inspector. Dovrebbe rappresentare il valore di volume in dB desiderato. Con la variabile volume usiamo una formula per convertire i dB in una scala lineare:

    volume = Mathf.Pow(10.0f, busVolume / 20f);

    Lo script completo per il bus è il seguente:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Bus : MonoBehaviour
    {
        FMOD.Studio.EventInstance instance;
        FMOD.Studio.Bus bus;
        
        [FMODUnity.EventRef]
        public string fmodEvent;
    
        [SerializeField] [Range(-80f, 10f)]
        private float busVolume;
        private float volume;
    
        void Start()
        {        
            instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
            instance.start();
    
            bus = FMODUnity.RuntimeManager.GetBus("bus:/MusicBus");
        }
        void Update()
        {       
            volume = Mathf.Pow(10.0f, busVolume / 20f);
            bus.setVolume(volume);
        }
    }

    Controllo del volume dei VCA di FMOD in Unity.

    FMOD Studio ci dà la possibilità di associare gli bus a specifici VCA. Questa funzione risulta utile se ad esempio vogliamo controllare il volume della musica e gli effetti sonori separatamente. Dal punto di vista del codice il controllo del volume funziona esattamente come per i bus. Questa volta dichiariamo un VCA:

    FMOD.Studio.VCA vca;

    Invece di GetBus() utilizziamo GetVCA():

    vca = FMODUnity.RuntimeManager.GetVCA("vca:/MusicVCA");

    Poi usiamo di nuovo il metodo setVolume() per cambiare il volume del VCA:

    vca.setVolume(volume);

    Lo script completo per i VCA è il seguente:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class VCA : MonoBehaviour
    {
        FMOD.Studio.EventInstance instance;
        FMOD.Studio.VCA vca;
    
        [FMODUnity.EventRef]
        public string fmodEvent;
    
        [SerializeField]
        [Range(-80f, 10f)]
        private float vcaVolume;
    
        private float volume;
    
        void Start()
        {
            instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
            instance.start();
    
            vca = FMODUnity.RuntimeManager.GetVCA("vca:/MusicVCA");
        }
        void Update()
        {
            volume = Mathf.Pow(10.0f, vcaVolume / 20f);
            vca.setVolume(volume);
        }
    }

    Attivare gli Snapshot di FMOD in Unity

    Quando lavoriamo con degli snapshot, possiamo immaginare di avere a che fare con degli eventi normali. L’attivazione degli snapshot funziona esattamente come la riproduzione manuale di di eventi 2D/3D.

    Dichiriamo per prima l’istanza di uno snapshot:

    FMOD.Studio.EventInstance snapshot;

    Dopodiché creiamo l’istanza e la riproduciamo o la fermiamo nella funzione Update() di Unity:

    void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                snapshot = FMODUnity.RuntimeManager.CreateInstance("snapshot:/FilterMusic");
                snapshot.start();
            }
            else if (Input.GetKeyDown(KeyCode.LeftControl))
            {
                snapshot.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
                snapshot.release();
            }
        }

    Come puoi vedere qui, rispetto agli eventi normali cambia solo il percorso dell’evento. Al posto di event:/ ora usiamo snapshot:/ per puntare al percorso corretto. Dai un’occhiata al progetto allegato per sperimentare con gli snapshot.