Audio stuff (WIP) - working with mixers!

This commit is contained in:
Texel 2020-08-22 06:35:33 -04:00
parent 177889a1e0
commit 8e47930a3c
16 changed files with 423 additions and 0 deletions

View file

@ -0,0 +1,63 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class AudioHelper {
static Dictionary<int, AudioClip> ClipByID;
static Dictionary<AudioClip, int> IDByClip;
public enum AudioCategory : byte {
Music = 1,
Fx = 2,
Voice = 3
}
public static float VolumeLevel(AudioCategory category) {
return PlayerPrefs.GetFloat(category.ToString(), 0.375f); // Did you know default volume of 1 is a bad idea
}
public static void SetVolume(AudioCategory category, float level) {
PlayerPrefs.SetFloat(category.ToString(), level);
PlayerPrefs.Save();
}
public static int ByClip(AudioClip clip) {
if (IDByClip == null) Init();
if (IDByClip.TryGetValue(clip, out int idIfPresent)) {
return idIfPresent;
}
Debug.LogWarningFormat("{0} is not resources loaded clip!!", clip.name);
return 0;
}
public static AudioClip ByID(int id) {
if (ClipByID == null) Init();
try {
return ClipByID[id];
} catch {
throw new System.Exception(string.Format("Failure to find SFX with ID {0}", id));
}
}
// Build the audio lookup
static void Init() {
ClipByID = new Dictionary<int, AudioClip>();
IDByClip = new Dictionary<AudioClip,int>();
var allAudio = Resources.LoadAll<AudioClip>("");
for (int i = 0; i < allAudio.Length; ++i) {
var clip = allAudio[i];
ClipByID.Add(i, clip);
IDByClip.Add(clip, i);
}
var oString = "Loaded Sounds: ";
foreach (var key in ClipByID) {
oString += key;
}
Debug.Log(oString);
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1affa7ecbd65bf04cb3ee7fd44d9f370
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,43 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EntityNetwork;
public class AudioProvider : EntityBase, IAutoRegister
{
public static AudioProvider Instance;
public override void Awake() {
base.Awake();
Instance = this;
bgmSrc = GetComponent<AudioSource>();
}
public float musicSpeed = 1f;
AudioSource bgmSrc;
public void Update() {
// TODO - This is WIP help
//bgmSrc.outputAudioMixerGroup.
}
int lastAudioFrame = 0;
public static void PlaySFX(AudioClip sfx, AudioHelper.AudioCategory category = AudioHelper.AudioCategory.Fx, float volume = 1.0f, bool sendRemote = true) {
if (sfx == null) return;
if (sendRemote)
Instance.RaiseEvent('s', true, AudioHelper.ByClip(sfx), (byte)category, volume);
else
Instance.InternallyPlaySFXEvent(AudioHelper.ByClip(sfx), (byte)category, volume);
}
[NetEvent('s')]
public void InternallyPlaySFXEvent(int sfxID, byte category, float volume) {
// Don't allow multiple audio sources to trigger at once
if (Time.frameCount == lastAudioFrame) return;
lastAudioFrame = Time.frameCount;
var clip = AudioHelper.ByID(sfxID);
AudioSource.PlayClipAtPoint(clip, Camera.main.transform.position, AudioHelper.VolumeLevel((AudioHelper.AudioCategory)category) * volume);
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8ff52355fe571224f9827356ec82bb42
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: