Add OOP Audio class
This commit is contained in:
parent
2d89b82759
commit
98c7e624f8
1 changed files with 106 additions and 0 deletions
106
GamecraftModdingAPI/Utility/Audio.cs
Normal file
106
GamecraftModdingAPI/Utility/Audio.cs
Normal file
|
@ -0,0 +1,106 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue