107 lines
2.2 KiB
C#
107 lines
2.2 KiB
C#
|
using System;
|
|||
|
using System.Reflection;
|
|||
|
|
|||
|
using FMOD.Studio;
|
|||
|
using FMODUnity;
|
|||
|
using RobocraftX.Common.Audio;
|
|||
|
using Unity.Mathematics;
|
|||
|
|
|||
|
namespace GamecraftModdingAPI.Utility
|
|||
|
{
|
|||
|
public class Audio
|
|||
|
{
|
|||
|
private EventInstance sound;
|
|||
|
|
|||
|
public Audio(string uri) : this(RuntimeManager.PathToGUID(uri))
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public Audio(Guid uri)
|
|||
|
{
|
|||
|
sound = RuntimeManager.CreateInstance(uri);
|
|||
|
}
|
|||
|
|
|||
|
public static Audio Random()
|
|||
|
{
|
|||
|
System.Random potato = new System.Random();
|
|||
|
FieldInfo[] options = typeof(FMODAudioEvents).GetFields();
|
|||
|
Guid audio_uri;
|
|||
|
while (true)
|
|||
|
{
|
|||
|
int index = potato.Next(0, options.Length);
|
|||
|
try
|
|||
|
{
|
|||
|
audio_uri = (Guid)options[index].GetValue(null);
|
|||
|
break;
|
|||
|
}
|
|||
|
catch (InvalidCastException) { }
|
|||
|
}
|
|||
|
return new Audio(audio_uri);
|
|||
|
}
|
|||
|
|
|||
|
public float this[string key]
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
sound.getParameterValue(key, out float val, out float finalVal);
|
|||
|
return val;
|
|||
|
}
|
|||
|
|
|||
|
set => sound.setParameterValue(key, value);
|
|||
|
}
|
|||
|
|
|||
|
public float this[int index]
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
sound.getParameterValueByIndex(index, out float val, out float finalVal);
|
|||
|
return val;
|
|||
|
}
|
|||
|
|
|||
|
set => sound.setParameterValueByIndex(index, value);
|
|||
|
}
|
|||
|
|
|||
|
public string[] Parameters
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
sound.getParameterCount(out int count);
|
|||
|
string[] parameters = new string[count];
|
|||
|
for (int i = 0; i < count; i++)
|
|||
|
{
|
|||
|
sound.getParameterByIndex(i, out ParameterInstance param);
|
|||
|
param.getDescription(out PARAMETER_DESCRIPTION desc);
|
|||
|
parameters[i] = desc.name;
|
|||
|
}
|
|||
|
return parameters;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public float3 Position
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
sound.get3DAttributes(out FMOD.ATTRIBUTES_3D attr);
|
|||
|
return new float3(attr.position.x, attr.position.y, attr.position.z);
|
|||
|
}
|
|||
|
|
|||
|
set => sound.set3DAttributes(RuntimeUtils.To3DAttributes(value));
|
|||
|
}
|
|||
|
|
|||
|
public void Play()
|
|||
|
{
|
|||
|
sound.start();
|
|||
|
}
|
|||
|
|
|||
|
public void Stop(FMOD.Studio.STOP_MODE mode = FMOD.Studio.STOP_MODE.IMMEDIATE)
|
|||
|
{
|
|||
|
sound.stop(mode);
|
|||
|
}
|
|||
|
|
|||
|
~Audio() // Use the wannabe C++ destructor to destroy the C++ object
|
|||
|
{
|
|||
|
sound.release();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|