using UnityEngine;
using System.Collections;
using UnityEngine.Audio;
using TNet;
[RequireComponent
(typeof(TNObject
))] public class SpawnedSoundObject : TNBehaviour
{
private AudioClip audioClip = null;
private AudioSource audioSource = null;
//Audio Filters
public float distortionLevel = 0.0f; //Distortion
public float lowPassCutoff = 0.0f; //Low Pass Filter
public float lowPassRes = 0.0f; //Low Pass Resonance
public float highPassCutoff = 0.0f; //High Pass Cuttoff
public float highPassRes = 0.0f; //High Pass Res
public int HighPassFilterOff; //HighPassFilter On/Off
public int LowPassFilterOff; //LowPassFilter On/Off
public int ReverbOff = 0; //Reverb On/Off
public int ReverbPreset = 0; //Reverb Preset
public int SpatialBlend = 0;
public float spread = 0.0f;
public float pitch = 1.0f;
public float volume = 1.0f;
public float minDistance = 0.5f;
public float maxDistance = 80.0f;
public float dopplerLevel = 0.1f;
public int loopCount = 0;
public int RolloffMode = 0;
public float DelaySound = 0.0f;
//AudioMixer
public int CleanMixer = 0;
public int RadioMixer = 0;
public int AmbienceMixer = 0;
//AudioMixer SnapShots
//public int Radio = 0;
//public int Natural = 0;
private void OnDestroy()
{
if (audioClip != null)
{
//Set the mixer to be with no effects
//AudioMixer mixer = Resources.Load("MainGen4Mixer") as AudioMixer;
//AudioMixerSnapshot DrySnapShot = mixer.FindSnapshot("Dry");
//DrySnapShot.TransitionTo(0.01f);
DestroyImmediate(audioClip);
audioClip = null;
}
else
{
}
}
public void LoadFromFile(string file)
{
Debug.Log("SpawnedSoundObject.LoadFromFile " + file);
StartCoroutine(LoadSoundFromFileRoutine(file));
}
private IEnumerator LoadSoundFromFileRoutine(string file)
{
WWW fileLoad
= new WWW
(file
); yield return fileLoad;
if (!string.IsNullOrEmpty(fileLoad.error))
{
Debug.LogError("Failed to load Sound file " + file);
yield break;
}
Debug.Log("Done Sound LoadFromFile " + file);
audioClip = fileLoad.GetAudioClip(true);
StartCoroutine(PlayClip());
}
void Awake()
{
TNObject tno = GetComponent<TNObject>();
tno.Send("PlayClip", Target.AllSaved, audioClip);
}
[RFC]
private IEnumerator PlayClip()
{
if (audioClip)
{
//Get a refrence to our audio mixer
AudioMixer mixer = Resources.Load("MainGen4Mixer") as AudioMixer;
string _outPutMixer = "MainGen4Group";
//Refrence to the radio mixer
AudioMixer radioMixer = Resources.Load("RadioMixer") as AudioMixer;
string _outPutRadioMixer = "RadioMixer";
//Refrence to the ambience mixer for ambience sounds
AudioMixer ambienceMixer = Resources.Load("AmbienceMixer") as AudioMixer;
string _outPutAmbienceMixer = "AmbienceMixer";
audioSource = gameObject.AddComponent<AudioSource>();
//Plugg audio source into the Mixer Group
if (CleanMixer == 1)
{
audioSource.outputAudioMixerGroup = mixer.FindMatchingGroups(_outPutMixer)[0];
}
if (RadioMixer == 1)
{
audioSource.outputAudioMixerGroup = radioMixer.FindMatchingGroups(_outPutRadioMixer)[0];
}
if (AmbienceMixer == 1)
{
Debug.Log("Ambience mixer is on");
audioSource.outputAudioMixerGroup = ambienceMixer.FindMatchingGroups(_outPutAmbienceMixer)[0];
}
//Set our audiomixer update mode to normal
//mixer.updateMode = AudioMixerUpdateMode.Normal;
audioSource.volume = volume;
audioSource.rolloffMode = AudioRolloffMode.Linear;
audioSource.minDistance = minDistance;
audioSource.maxDistance = maxDistance;
audioSource.clip = audioClip;
audioSource.spatialBlend = 1.0f;
audioSource.dopplerLevel = dopplerLevel;
audioSource.PlayDelayed(DelaySound);
audioSource.spread = spread;
audioSource.pitch = pitch;
if (RolloffMode == 1)
{
audioSource.rolloffMode = AudioRolloffMode.Logarithmic;
}
if(SpatialBlend == 1)
{
audioSource.spatialBlend = 0.0f;
}
//Distortion
AudioDistortionFilter distortion
= gameObject
.AddComponent(typeof(AudioDistortionFilter
)) as AudioDistortionFilter
; distortion.distortionLevel = distortionLevel;
//Low Pass Filter and High Pass Filter
AudioLowPassFilter lowPassFilter
= gameObject
.AddComponent(typeof(AudioLowPassFilter
)) as AudioLowPassFilter
; AudioHighPassFilter highPassFilter
= gameObject
.AddComponent(typeof(AudioHighPassFilter
)) as AudioHighPassFilter
; if (LowPassFilterOff == 0)
{
Debug.Log("LowPassFilter is Off");
lowPassFilter.enabled = false;
}
else if (LowPassFilterOff == 1)
{
Debug.Log("LowPassFilter is On");
lowPassFilter.enabled = true;
lowPassFilter.cutoffFrequency = lowPassCutoff;
lowPassFilter.lowpassResonanceQ = lowPassRes;
}
if (HighPassFilterOff == 0)
{
Debug.Log("HighPassFilter is Off");
highPassFilter.enabled = false;
}
else if (HighPassFilterOff == 1)
{
Debug.Log("HighPassFilter is On");
highPassFilter.enabled = true;
highPassFilter.cutoffFrequency = highPassCutoff;
highPassFilter.highpassResonanceQ = highPassRes;
}
//Reverb Filter
AudioReverbFilter reverFilter
= gameObject
.AddComponent(typeof(AudioReverbFilter
)) as AudioReverbFilter
; if (ReverbOff == 0)
{
Debug.Log("Reverb Filter is Off");
reverFilter.enabled = false;
}
else if (ReverbOff == 1)
{
Debug.Log("Reverb Filter is On");
reverFilter.enabled = true;
}
//Reverb Presets
if (ReverbPreset == 1)
{
reverFilter.reverbPreset = AudioReverbPreset.Cave;
}
if (ReverbPreset == 2)
{
reverFilter.reverbPreset = AudioReverbPreset.Hangar;
}
if (ReverbPreset == 3)
{
reverFilter.reverbPreset = AudioReverbPreset.Mountains;
}
if (ReverbPreset == 4)
{
reverFilter.reverbPreset = AudioReverbPreset.Stoneroom;
}
if (ReverbPreset == 5)
{
reverFilter.reverbPreset = AudioReverbPreset.Quarry;
}
if (ReverbPreset == 6)
{
reverFilter.reverbPreset = AudioReverbPreset.Room;
}
if (ReverbPreset == 7)
{
reverFilter.reverbPreset = AudioReverbPreset.StoneCorridor;
}
if (ReverbPreset == 8)
{
reverFilter.reverbPreset = AudioReverbPreset.Generic;
}
//Audio MixerSnap Shots
// if (Radio == 1)
//{
// AudioMixerSnapshot RadioSnapShot = mixer.FindSnapshot("Radio");
// RadioSnapShot.TransitionTo(.01f);
// Debug.Log("Radio Sound On");
// }
if (loopCount < 0)
{
audioSource.loop = true;
audioSource.Play();
yield break;
}
else if (loopCount == 0)
{
audioSource.PlayOneShot(audioClip);
yield return null;
while (audioSource.isPlaying) yield return null;
}
else
{
audioSource.loop = true;
audioSource.Play();
yield return new WaitForSeconds
((audioClip
.length * 0
.5f
) + (audioClip
.length * (loopCount
- 1))); audioSource.loop = false;
while (audioSource.isPlaying) yield return null;
}
Destroy(gameObject);
}
}
}