|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- using FMODUnity;
- using FMOD.Studio;
-
- namespace GamecraftModdingAPI.Utility
- {
- /// <summary>
- /// Common operations on audio objects
- /// </summary>
- public static class AudioTools
- {
- /// <summary>
- /// Retrieve the list of mixers (aka VCAs)
- /// </summary>
- /// <returns>The names of the mixers (without "vca:/")</returns>
- public static string[] GetMixers()
- {
- Bank masterBank;
- RuntimeManager.StudioSystem.getBank("bank:/Master Bank", out masterBank);
- VCA[] masterVCAs;
- int count;
- masterBank.getVCAList(out masterVCAs);
- masterBank.getVCACount(out count);
- string[] result = new string[count];
- string path;
- for (int i = 0; i < count; i++)
- {
- masterVCAs[i].getPath(out path);
- result[i] = path.Replace("vca:/", "");
- }
- return result;
- }
-
- /// <summary>
- /// Get the volume of an audio mixer
- /// </summary>
- /// <param name="mixer">The name of the mixer</param>
- /// <returns>The volume</returns>
- public static float GetVolume(string mixer)
- {
- float volume, finalVolume;
- RuntimeManager.GetVCA($"vca:/{mixer}").getVolume(out volume, out finalVolume);
- return volume;
- }
-
- /// <summary>
- /// Get the volume of an audio mixer at output time (this is influenced by the mixer volume and master volume)
- /// </summary>
- /// <param name="mixer">The name of the mixer</param>
- /// <returns>The final volume</returns>
- public static float GetVolumeOutput(string mixer)
- {
- float volume, finalVolume;
- RuntimeManager.GetVCA($"vca:/{mixer}").getVolume(out volume, out finalVolume);
- return finalVolume;
- }
-
- /// <summary>
- /// Set the volume of an audio mixer (like a VCA aka Voltage-Controlled Amplifier)
- /// </summary>
- /// <param name="volume">The volume from 0.0 to 1.0 (1.0+ is valid too)</param>
- /// <param name="mixer">The name of the mixer, as retrieved from GetMixers()</param>
- public static void SetVolume(float volume, string mixer)
- {
- RuntimeManager.GetVCA($"vca:/{mixer}").setVolume(volume);
- }
-
- /// <summary>
- /// Set the volume for all future audio
- /// </summary>
- /// <param name="volume">The volume from 0.0 to 1.0 (1.0+ is valid too)</param>
- public static void SetVolumeMaster(float volume)
- {
- RuntimeManager.GetBus("bus:/").setVolume(volume);
- }
- }
- }
|