• Skip to primary navigation
  • Skip to main content

Alessandro Famà

  • Portfolio
  • Game Audio Tutorials
  • Wiki
  • Über Mich
  • Impressum
Alessandro Famà > Game Audio Tutorials > FMOD + Unity Tutorials > FMOD Mixer in Unity bedienen

FMOD Mixer in Unity bedienen

Der FMOD Mixer kann mit all seinen Funktionen in Unity gesteuert werden. In diesem Tutorial verändern wir die Lautstärke von Bussen, VCAs und triggern Snapshots direkt aus Unity heraus.

Lade dir das Unity & FMOD Projekt zu diesem Tutorial herunter.

Inhaltsverzeichnis

FMOD Studio Bus Lautstärke in Unity kontrollieren

Die Lautstärke eines Busses in Unity kontrolliert man mit drei einfachen Schritten:

  1. Bus deklarieren
  2. Bus abrufen
  3. Lautstärke bzw. Volume einstellen

Schauen wir uns diese Schritte genauer an.

Bus Deklarieren

Genauso wie bei einfachen Instanzen, müssen wir an erster Stelle den Bus deklarieren:

FMOD.Studio.Bus bus;

Bus abrufen

Nun können wir in Unitys Start()-Methode unseren gewünschten Bus abrufen:

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

bus:/MusicBus ist ein String und bezieht sich auf die Groups im FMOD Studio Mixer, die im Routing-Tab erstellt werden. Wir können diesen Path durch ein Klick mit der rechten Maustaste auf dem Group und der Option „Copy Path“ kopieren:

FMOD Studio Bus "Copy Path"
FMOD Studio Bus „Copy Path“

Lautstärke einstellen

Mit bus.setVolume(float volume) in der Update()-Funktion können wir nun unsere gewünschte Laustärke für den Bus einstellen. setVolume() nimmt eine Float-Zahl an, die von 0 (stumm) bis 1 (volle Lautstärke) geht. Natürlich ist es uns auch möglich mit der dB-Skala zu arbeiten. Dafür deklarieren wir zwei Floats:

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

busVolume ist ein Float, den wir über ein Slider im Inspektor kontrollieren können. Es soll unseren gewünschten dB-Lautstärke-Wert darstellen. Mit volume nutzen wir eine Formel, um dB in einer linearen Skala umzuwandeln:

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

Der vollständige Skript für den Bus sieht folgendermaßen aus:

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);
    }
}

FMOD Studio VCA Lautstärke in Unity kontrollieren

FMOD Studio gibt uns die Möglichkeit, Busse an bestimmten VCAs zu koppeln. Das ist z.B. nützlich, wenn wir die Lautstärke von Musik und Sound Effekte separat regeln möchten. Aus der Code-Perspektive funktioniert die Lautstärkeeinstellung genauso wie bei den Bussen. Wir deklarieren diesmal aber einen VCA:

FMOD.Studio.VCA vca;

Statt GetBus() verwenden wir GetVCA():

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

Anschließend verwenden wir wieder die setVolume()-methode, um die Lautstärke des VCAs zu ändern:

vca.setVolume(volume);

Der vollständige Skript für die VCAs sieht so aus:

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);
    }
}

FMOD Mixer-Snapshots in Unity triggern

Snapshots kann man sich im Grunde wie ganz normalen Events vorstellen. Das Triggern von Snapshots erfolgt wie das manuelle Abspielen von 2D/3D Events.

Zuerst deklarieren wir die Snapshot-Instanz:

FMOD.Studio.EventInstance snapshot;

Danach erstellen wir die Instanz und spielen bzw. stoppen diese in Unitys Update()-Methode:

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();
        }
    }

Wie du hier siehst, verändert sich nur der Pfad des Events. An Stelle von event:/ verwenden wir nun snapshot:/, um auf den korrekten Pfad hinzuweisen. Schaue dir die beigelegten Projekte an, um selbst mit den Snapshots zu experimentieren.