using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FMODUnity;
using FMOD.Studio;
namespace GamecraftModdingAPI.Utility
{
///
/// Common operations on audio objects
///
public static class AudioTools
{
///
/// Retrieve the list of mixers (aka VCAs)
///
/// The names of the mixers (without "vca:/")
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;
}
///
/// Get the volume of an audio mixer
///
/// The name of the mixer
/// The volume
public static float GetVolume(string mixer)
{
float volume, finalVolume;
RuntimeManager.GetVCA($"vca:/{mixer}").getVolume(out volume, out finalVolume);
return volume;
}
///
/// Get the volume of an audio mixer at output time (this is influenced by the mixer volume and master volume)
///
/// The name of the mixer
/// The final volume
public static float GetVolumeOutput(string mixer)
{
float volume, finalVolume;
RuntimeManager.GetVCA($"vca:/{mixer}").getVolume(out volume, out finalVolume);
return finalVolume;
}
///
/// Set the volume of an audio mixer (like a VCA aka Voltage-Controlled Amplifier)
///
/// The volume from 0.0 to 1.0 (1.0+ is valid too)
/// The name of the mixer, as retrieved from GetMixers()
public static void SetVolume(float volume, string mixer)
{
RuntimeManager.GetVCA($"vca:/{mixer}").setVolume(volume);
}
///
/// Set the volume for all future audio
///
/// The volume from 0.0 to 1.0 (1.0+ is valid too)
public static void SetVolumeMaster(float volume)
{
RuntimeManager.GetBus("bus:/").setVolume(volume);
}
}
}