public static void PopulateSourcesWithResourceClip(string clipName, SoundGroupVariation variation) { if (audioClipsByName.ContainsKey(clipName)) { //Debug.Log("clip already exists: " + clipName); return; // work is done already! } var resAudioClip = Resources.Load(clipName) as AudioClip; if (resAudioClip == null) { MasterAudio.LogWarning("Resource file '" + clipName + "' could not be located."); return; } if (!audioResourceTargetsByName.ContainsKey(clipName)) { Debug.LogError("No Audio Sources found to add Resource file '" + clipName + "'."); return; } else { var sources = audioResourceTargetsByName[clipName]; for (var i = 0; i < sources.Count; i++) { sources[i].clip = resAudioClip; } } audioClipsByName.Add(clipName, resAudioClip); }
public static float GetRandomPreviewPitch(SoundGroupVariation var) { var randPitch = var.VarAudio.pitch; if (var.audLocation == MasterAudio.AudioLocation.FileOnInternet) { return(randPitch); } if (!var.useRandomPitch) { return(randPitch); } randPitch = UnityEngine.Random.Range(var.randomPitchMin, var.randomPitchMax); switch (var.randomPitchMode) { case SoundGroupVariation.RandomPitchMode.AddToClipPitch: randPitch += var.VarAudio.pitch; break; } return(randPitch); }
private MasterAudioGroup RescanChildren(MasterAudioGroup group) { var newChildren = new List <SoundGroupVariation>(); var childNames = new List <string>(); SoundGroupVariation variation = null; for (var i = 0; i < group.transform.childCount; i++) { var child = group.transform.GetChild(i); if (!Application.isPlaying) { if (childNames.Contains(child.name)) { DTGUIHelper.ShowColorWarning("You have more than one Variation named: " + child.name + "."); DTGUIHelper.ShowColorWarning("Please ensure each Variation of this Group has a unique name."); isValid = false; return(null); } } childNames.Add(child.name); variation = child.GetComponent <SoundGroupVariation>(); newChildren.Add(variation); } group.groupVariations = newChildren; return(group); }
public static float GetRandomPreviewVolume(SoundGroupVariation var) { var varVol = var.VarAudio.volume; if (var.audLocation == MasterAudio.AudioLocation.FileOnInternet) { return(varVol); } if (!var.useRandomPitch) { return(varVol); } var randomVol = UnityEngine.Random.Range(var.randomVolumeMin, var.randomVolumeMax); switch (var.randomVolumeMode) { case SoundGroupVariation.RandomVolumeMode.AddToClipVolume: varVol += randomVol; break; case SoundGroupVariation.RandomVolumeMode.IgnoreClipVolume: varVol = randomVol; break; } return(varVol); }
public void RemoveActiveAudioSourceId(SoundGroupVariation variation) { var id = variation.GetInstanceID(); activeAudioSourcesIds.Remove(id); var bus = BusForGroup; if (bus != null) { bus.RemoveActiveAudioSourceId(id); } }
public void RemoveActiveAudioSourceId(SoundGroupVariation variation) { int instanceID = variation.GetInstanceID(); this.activeAudioSourcesIds.Remove(instanceID); GroupBus busForGroup = this.BusForGroup; if (busForGroup != null) { busForGroup.RemoveActiveAudioSourceId(instanceID); } }
public void AddActiveAudioSourceId(SoundGroupVariation variation) { var id = variation.GetInstanceID(); if (activeAudioSourcesIds.Contains(id)) { return; } activeAudioSourcesIds.Add(id); }
void Start() { rootCDplayer = transform.parent.parent; audioPlayer = gameObject.AddComponent <ModAudio>(); audioStreamPlayer = gameObject.AddComponent <ModAudioStream>(); gameObject.AddComponent <BoxCollider>().isTrigger = true; gameObject.GetComponent <BoxCollider>().size = new Vector3(0.15f, 0.12f, 0.049f); gameObject.GetComponent <BoxCollider>().center = new Vector3(-0.003f, -0.005f, 0.0015f); eject = rootCDplayer.Find("ButtonsCD/Eject").GetComponent <SphereCollider>(); nextTrack = rootCDplayer.Find("ButtonsCD/TrackChannelSwitch").GetComponent <SphereCollider>(); button_sound = GameObject.Find("MasterAudio/CarFoley/cd_button").GetComponent <SoundGroupVariation>(); }
public void AddActiveAudioSourceId(SoundGroupVariation variation) { int instanceID = variation.GetInstanceID(); if (!this.activeAudioSourcesIds.Contains(instanceID)) { this.activeAudioSourcesIds.Add(instanceID); GroupBus busForGroup = this.BusForGroup; if (busForGroup != null) { busForGroup.AddActiveAudioSourceId(instanceID); } } }
public void AddActiveAudioSourceId(SoundGroupVariation variation) { var id = variation.GetInstanceID(); if (activeAudioSourcesIds.Contains(id)) { return; } activeAudioSourcesIds.Add(id); var bus = BusForGroup; if (bus != null) { bus.AddActiveAudioSourceId(id); } }
public void EqualizeWeights(MasterAudioGroup _group) { var variations = new SoundGroupVariation[_group.groupVariations.Count]; SoundGroupVariation variation = null; for (var i = 0; i < _group.groupVariations.Count; i++) { variation = _group.groupVariations[i]; variations[i] = variation; } UndoHelper.RecordObjectsForUndo(variations, "Equalize Weights"); foreach (var vari in variations) { vari.weight = 1; } }
void Start() { if (transform.childCount > 0) { transform.GetChild(0).SetParent(null); } rootCDplayer = transform.parent.parent; audioPlayer = gameObject.AddComponent <ModAudio>(); audioStreamPlayer = gameObject.AddComponent <ModAudioStream>(); gameObject.AddComponent <BoxCollider>().isTrigger = true; gameObject.GetComponent <BoxCollider>().size = new Vector3(0.15f, 0.12f, 0.049f); gameObject.GetComponent <BoxCollider>().center = new Vector3(-0.003f, -0.005f, 0.0015f); GameObject buttonsCD = rootCDplayer.GetChild(4).gameObject; eject = buttonsCD.transform.GetChild(3).GetComponent <SphereCollider>(); nextTrack = buttonsCD.transform.GetChild(2).GetComponent <SphereCollider>(); button_sound = GameObject.Find("MasterAudio/CarFoley/cd_button").GetComponent <SoundGroupVariation>(); radioVol = buttonsCD.transform.GetChild(0).gameObject; radioVol.FsmInject("On", TurnOn); radioVol.FsmInject("Off", TurnOff); radioVol.FsmInject("Off 2", TurnOff); }
private void CopyFxTail(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { AudioUndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Fx Tail"); } foreach (var aVar in changedVars) { aVar.fxTailTime = variation.fxTailTime; changed++; } Debug.LogWarning(changed + " Fx Tail(s) changed."); }
public void EqualizeWeights(MasterAudioGroup grp) { var variations = new SoundGroupVariation[grp.groupVariations.Count]; for (var i = 0; i < grp.groupVariations.Count; i++) { var variation = grp.groupVariations[i]; variations[i] = variation; } AudioUndoHelper.RecordObjectsForUndo(variations, "Equalize Voices"); foreach (var vari in variations) { vari.weight = 1; } }
private void CopyLoops(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { AudioUndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Loops"); } foreach (var aVar in changedVars) { aVar.VarAudio.loop = variation.VarAudio.loop; changed++; } Debug.LogWarning(changed + " Variation Loop(s) changed."); }
/// <summary> /// Populates the sources with resource clip, non-thread blocking. /// </summary> /// <param name="clipName">Clip name.</param> /// <param name="variation">Variation.</param> /// <param name="successAction">Method to execute if successful.</param> /// <param name="failureAction">Method to execute if not successful.</param> public static IEnumerator PopulateSourcesWithResourceClipAsync(string clipName, SoundGroupVariation variation, System.Action successAction, System.Action failureAction) { if (audioClipsByName.ContainsKey(clipName)) { if (successAction != null) { successAction(); } yield break; } var asyncRes = Resources.LoadAsync(clipName, typeof(AudioClip)); while (!asyncRes.isDone) { yield return MasterAudio.endOfFrameDelay; } var resAudioClip = asyncRes.asset as AudioClip; if (resAudioClip == null) { MasterAudio.LogError("Resource file '" + clipName + "' could not be located."); if (failureAction != null) { failureAction(); } yield break; } if (!audioResourceTargetsByName.ContainsKey(clipName)) { Debug.LogError("No Audio Sources found to add Resource file '" + clipName + "'."); if (failureAction != null) { failureAction(); } yield break; } else { var sources = audioResourceTargetsByName[clipName]; for (var i = 0; i < sources.Count; i++) { sources[i].clip = resAudioClip; } } audioClipsByName.Add(clipName, resAudioClip); if (successAction != null) { successAction(); } }
public static IEnumerator PopulateSourcesWithResourceClipAsync(string clipName, SoundGroupVariation variation, System.Action successAction, System.Action failureAction) { Debug.LogError("If this method got called, please report it to Dark Tonic immediately. It should not happen."); yield break; }
private void CopyCustomFade(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { AudioUndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Custom Fade"); } foreach (var aVar in changedVars) { aVar.useFades = variation.useFades; aVar.fadeInTime = variation.fadeInTime; aVar.fadeOutTime = variation.fadeOutTime; changed++; } Debug.LogWarning(changed + " Random Custom Fade(s) changed."); }
// ReSharper disable once FunctionComplexityOverflow public override void OnInspectorGUI() { EditorGUIUtility.LookLikeControls(); EditorGUI.indentLevel = 0; var isDirty = false; _variation = (SoundGroupVariation)target; if (MasterAudioInspectorResources.LogoTexture != null) { DTGUIHelper.ShowHeaderTexture(MasterAudioInspectorResources.LogoTexture); } var parentGroup = _variation.ParentGroup; if (parentGroup == null) { DTGUIHelper.ShowLargeBarAlert("This file cannot be edited in Project View."); return; } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.contentColor = DTGUIHelper.BrightButtonColor; if (GUILayout.Button(new GUIContent("Back to Group", "Select Group in Hierarchy"), EditorStyles.toolbarButton, GUILayout.Width(120))) { Selection.activeObject = _variation.transform.parent.gameObject; } GUILayout.FlexibleSpace(); GUI.contentColor = Color.white; _ma = MasterAudio.Instance; var maInScene = _ma != null; var canPreview = !DTGUIHelper.IsPrefabInProjectView(_variation); if (maInScene) { _previewer = _ma.gameObject; var buttonPressed = DTGUIHelper.DTFunctionButtons.None; if (canPreview) { buttonPressed = DTGUIHelper.AddVariationButtons(); } switch (buttonPressed) { case DTGUIHelper.DTFunctionButtons.Play: if (Application.isPlaying) { MasterAudio.PlaySoundAndForget(_variation.transform.parent.name, 1f, null, 0f, _variation.name); } else { isDirty = true; var calcVolume = _variation.VarAudio.volume * parentGroup.groupMasterVolume; switch (_variation.audLocation) { case MasterAudio.AudioLocation.ResourceFile: StopPreviewer(); var fileName = AudioResourceOptimizer.GetLocalizedFileName(_variation.useLocalization, _variation.resourceFileName); GetPreviewer().PlayOneShot(Resources.Load(fileName) as AudioClip, calcVolume); break; case MasterAudio.AudioLocation.Clip: _variation.VarAudio.PlayOneShot(_variation.VarAudio.clip, calcVolume); break; case MasterAudio.AudioLocation.FileOnInternet: if (!string.IsNullOrEmpty(_variation.internetFileUrl)) { Application.OpenURL(_variation.internetFileUrl); } break; } } break; case DTGUIHelper.DTFunctionButtons.Stop: if (Application.isPlaying) { MasterAudio.StopAllOfSound(_variation.transform.parent.name); } else { if (_variation.audLocation == MasterAudio.AudioLocation.ResourceFile) { StopPreviewer(); } else { _variation.VarAudio.Stop(); } } break; } } EditorGUILayout.EndHorizontal(); if (maInScene && !Application.isPlaying) { DTGUIHelper.ShowColorWarning(MasterAudio.PreviewText); } var oldLocation = _variation.audLocation; if (!Application.isPlaying) { var newLocation = (MasterAudio.AudioLocation)EditorGUILayout.EnumPopup("Audio Origin", _variation.audLocation); if (newLocation != oldLocation) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Audio Origin"); _variation.audLocation = newLocation; } } else { EditorGUILayout.LabelField("Audio Origin", _variation.audLocation.ToString()); } switch (_variation.audLocation) { case MasterAudio.AudioLocation.Clip: var newClip = (AudioClip)EditorGUILayout.ObjectField("Audio Clip", _variation.VarAudio.clip, typeof(AudioClip), false); if (newClip != _variation.VarAudio.clip) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "assign Audio Clip"); _variation.VarAudio.clip = newClip; } break; case MasterAudio.AudioLocation.FileOnInternet: if (oldLocation != _variation.audLocation) { if (_variation.VarAudio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on File On Internet Variation."); } _variation.VarAudio.clip = null; } if (!Application.isPlaying) { var newUrl = EditorGUILayout.TextField("Internet File URL", _variation.internetFileUrl); if (newUrl != _variation.internetFileUrl) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Internet File URL"); _variation.internetFileUrl = newUrl; } } else { EditorGUILayout.LabelField("Internet File URL", _variation.internetFileUrl); switch (_variation.internetFileLoadStatus) { case MasterAudio.InternetFileLoadStatus.Loading: DTGUIHelper.ShowLargeBarAlert("Attempting to download."); break; case MasterAudio.InternetFileLoadStatus.Loaded: DTGUIHelper.ShowColorWarning("Downloaded and ready to play."); break; case MasterAudio.InternetFileLoadStatus.Failed: DTGUIHelper.ShowRedError("Failed Download."); break; } } if (string.IsNullOrEmpty(_variation.internetFileUrl)) { DTGUIHelper.ShowLargeBarAlert("You have not specified a URL for the File On Internet. This Variation will not be available to play without one."); } break; case MasterAudio.AudioLocation.ResourceFile: if (oldLocation != _variation.audLocation) { if (_variation.VarAudio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on Resource file Variation."); } _variation.VarAudio.clip = null; } EditorGUILayout.BeginVertical(); var anEvent = Event.current; GUI.color = DTGUIHelper.DragAreaColor; var dragArea = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); GUI.Box(dragArea, "Drag Resource Audio clip here to use its name!"); GUI.color = Color.white; string newFilename; switch (anEvent.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!dragArea.Contains(anEvent.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (anEvent.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var dragged in DragAndDrop.objectReferences) { // ReSharper disable once ExpressionIsAlwaysNull var aClip = dragged as AudioClip; // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (aClip == null) { continue; } // ReSharper disable HeuristicUnreachableCode var useLocalization = false; newFilename = DTGUIHelper.GetResourcePath(aClip, ref useLocalization); if (string.IsNullOrEmpty(newFilename)) { newFilename = aClip.name; } AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; _variation.useLocalization = useLocalization; break; // ReSharper restore HeuristicUnreachableCode } } Event.current.Use(); break; } EditorGUILayout.EndVertical(); newFilename = EditorGUILayout.TextField("Resource Filename", _variation.resourceFileName); if (newFilename != _variation.resourceFileName) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; } EditorGUI.indentLevel = 1; var newLocal = EditorGUILayout.Toggle("Use Localized Folder", _variation.useLocalization); if (newLocal != _variation.useLocalization) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Localized Folder"); _variation.useLocalization = newLocal; } break; } EditorGUI.indentLevel = 0; var newVolume = DTGUIHelper.DisplayVolumeField(_variation.VarAudio.volume, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, 0f, true); if (newVolume != _variation.VarAudio.volume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Volume"); _variation.VarAudio.volume = newVolume; } var newPitch = DTGUIHelper.DisplayPitchField(_variation.VarAudio.pitch); if (newPitch != _variation.VarAudio.pitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Pitch"); _variation.VarAudio.pitch = newPitch; } if (parentGroup.curVariationMode == MasterAudioGroup.VariationMode.LoopedChain) { DTGUIHelper.ShowLargeBarAlert("Loop Clip is always OFF for Looped Chain Groups"); } else { var newLoop = EditorGUILayout.Toggle("Loop Clip", _variation.VarAudio.loop); if (newLoop != _variation.VarAudio.loop) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "toggle Loop"); _variation.VarAudio.loop = newLoop; } } var newWeight = EditorGUILayout.IntSlider("Voices (Weight)", _variation.weight, 0, 100); if (newWeight != _variation.weight) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Voices (Weight)"); _variation.weight = newWeight; } var newFxTailTime = EditorGUILayout.Slider("FX Tail Time", _variation.fxTailTime, 0f, 10f); if (newFxTailTime != _variation.fxTailTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change FX Tail Time"); _variation.fxTailTime = newFxTailTime; } var filterList = new List<string>() { MasterAudio.NoGroupName, "Low Pass", "High Pass", "Distortion", "Chorus", "Echo", "Reverb" }; var newFilterIndex = EditorGUILayout.Popup("Add Filter Effect", 0, filterList.ToArray()); switch (newFilterIndex) { case 1: AddFilterComponent(typeof(AudioLowPassFilter)); break; case 2: AddFilterComponent(typeof(AudioHighPassFilter)); break; case 3: AddFilterComponent(typeof(AudioDistortionFilter)); break; case 4: AddFilterComponent(typeof(AudioChorusFilter)); break; case 5: AddFilterComponent(typeof(AudioEchoFilter)); break; case 6: AddFilterComponent(typeof(AudioReverbFilter)); break; } DTGUIHelper.StartGroupHeader(); var newUseRndPitch = EditorGUILayout.BeginToggleGroup(" Use Random Pitch", _variation.useRandomPitch); if (newUseRndPitch != _variation.useRandomPitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Pitch"); _variation.useRandomPitch = newUseRndPitch; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomPitch) { var newMode = (SoundGroupVariation.RandomPitchMode)EditorGUILayout.EnumPopup("Pitch Compute Mode", _variation.randomPitchMode); if (newMode != _variation.randomPitchMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Pitch Compute Mode"); _variation.randomPitchMode = newMode; } var newPitchMin = DTGUIHelper.DisplayPitchField(_variation.randomPitchMin, "Random Pitch Min"); if (newPitchMin != _variation.randomPitchMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Min"); _variation.randomPitchMin = newPitchMin; if (_variation.randomPitchMax <= _variation.randomPitchMin) { _variation.randomPitchMax = _variation.randomPitchMin; } } var newPitchMax = DTGUIHelper.DisplayPitchField(_variation.randomPitchMax, "Random Pitch Max"); if (newPitchMax != _variation.randomPitchMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Max"); _variation.randomPitchMax = newPitchMax; if (_variation.randomPitchMin > _variation.randomPitchMax) { _variation.randomPitchMin = _variation.randomPitchMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newUseRndVol = EditorGUILayout.BeginToggleGroup(" Use Random Volume", _variation.useRandomVolume); if (newUseRndVol != _variation.useRandomVolume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Volume"); _variation.useRandomVolume = newUseRndVol; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomVolume) { var newMode = (SoundGroupVariation.RandomVolumeMode)EditorGUILayout.EnumPopup("Volume Compute Mode", _variation.randomVolumeMode); if (newMode != _variation.randomVolumeMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Volume Compute Mode"); _variation.randomVolumeMode = newMode; } var volMin = 0f; if (_variation.randomVolumeMode == SoundGroupVariation.RandomVolumeMode.AddToClipVolume) { volMin = -1f; } var newVolMin = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMin, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Min"); if (newVolMin != _variation.randomVolumeMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Min"); _variation.randomVolumeMin = newVolMin; if (_variation.randomVolumeMax <= _variation.randomVolumeMin) { _variation.randomVolumeMax = _variation.randomVolumeMin; } } var newVolMax = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMax, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Max"); if (newVolMax != _variation.randomVolumeMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Max"); _variation.randomVolumeMax = newVolMax; if (_variation.randomVolumeMin > _variation.randomVolumeMax) { _variation.randomVolumeMin = _variation.randomVolumeMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newSilence = EditorGUILayout.BeginToggleGroup(" Use Random Delay", _variation.useIntroSilence); if (newSilence != _variation.useIntroSilence) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Delay"); _variation.useIntroSilence = newSilence; } DTGUIHelper.EndGroupHeader(); if (_variation.useIntroSilence) { var newSilenceMin = EditorGUILayout.Slider("Delay Min (sec)", _variation.introSilenceMin, 0f, 100f); if (newSilenceMin != _variation.introSilenceMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Min (sec)"); _variation.introSilenceMin = newSilenceMin; if (_variation.introSilenceMin > _variation.introSilenceMax) { _variation.introSilenceMax = newSilenceMin; } } var newSilenceMax = EditorGUILayout.Slider("Delay Max (sec)", _variation.introSilenceMax, 0f, 100f); if (newSilenceMax != _variation.introSilenceMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Max (sec)"); _variation.introSilenceMax = newSilenceMax; if (_variation.introSilenceMax < _variation.introSilenceMin) { _variation.introSilenceMin = newSilenceMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newStart = EditorGUILayout.BeginToggleGroup(" Use Random Start Position", _variation.useRandomStartTime); if (newStart != _variation.useRandomStartTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Start Position"); _variation.useRandomStartTime = newStart; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomStartTime) { var newMin = EditorGUILayout.Slider("Start Min (%)", _variation.randomStartMinPercent, 0f, 100f); if (newMin != _variation.randomStartMinPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Start Min (%)"); _variation.randomStartMinPercent = newMin; if (_variation.randomStartMaxPercent <= _variation.randomStartMinPercent) { _variation.randomStartMaxPercent = _variation.randomStartMinPercent; } } var newMax = EditorGUILayout.Slider("Start Max (%)", _variation.randomStartMaxPercent, 0f, 100f); if (newMax != _variation.randomStartMaxPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Start Max (%)"); _variation.randomStartMaxPercent = newMax; if (_variation.randomStartMinPercent > _variation.randomStartMaxPercent) { _variation.randomStartMinPercent = _variation.randomStartMaxPercent; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newUseFades = EditorGUILayout.BeginToggleGroup(" Use Custom Fading", _variation.useFades); if (newUseFades != _variation.useFades) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Custom Fading"); _variation.useFades = newUseFades; } DTGUIHelper.EndGroupHeader(); if (_variation.useFades) { var newFadeIn = EditorGUILayout.Slider("Fade In Time (sec)", _variation.fadeInTime, 0f, 10f); if (newFadeIn != _variation.fadeInTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade In Time"); _variation.fadeInTime = newFadeIn; } if (_variation.VarAudio.loop) { DTGUIHelper.ShowColorWarning("Looped clips cannot have a custom fade out."); } else { var newFadeOut = EditorGUILayout.Slider("Fade Out time (sec)", _variation.fadeOutTime, 0f, 10f); if (newFadeOut != _variation.fadeOutTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade Out Time"); _variation.fadeOutTime = newFadeOut; } } } EditorGUILayout.EndToggleGroup(); if (GUI.changed || isDirty) { EditorUtility.SetDirty(target); } //DrawDefaultInspector(); }
// ReSharper disable once FunctionComplexityOverflow public override void OnInspectorGUI() { EditorGUI.indentLevel = 0; var isDirty = false; _variation = (SoundGroupVariation)target; if (MasterAudioInspectorResources.LogoTexture != null) { DTGUIHelper.ShowHeaderTexture(MasterAudioInspectorResources.LogoTexture); } var parentGroup = _variation.ParentGroup; if (parentGroup == null) { DTGUIHelper.ShowLargeBarAlert("This file cannot be edited in Project View."); return; } var isVideoPlayersGroup = DTGUIHelper.IsVideoPlayersGroup(_variation.ParentGroup.name); AudioSource previewer; EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.contentColor = DTGUIHelper.BrightButtonColor; if (GUILayout.Button(new GUIContent("Back to Group", "Select Group in Hierarchy"), EditorStyles.toolbarButton, GUILayout.Width(90))) { Selection.activeObject = _variation.transform.parent.gameObject; } GUILayout.FlexibleSpace(); if (Application.isPlaying) { if (isVideoPlayersGroup && DTMonoHelper.IsActive(_variation.gameObject)) { GUI.color = Color.green; var label = "Playing"; EditorGUILayout.LabelField(label, EditorStyles.miniButtonMid, GUILayout.Height(16), GUILayout.Width(240)); } else if (_variation.IsPlaying && _variation.VarAudio.clip != null) { // wait for Resource files to load GUI.color = Color.green; var label = "Playing ({0}%)"; if (_variation.IsPaused) { GUI.color = Color.yellow; label = "Paused ({0}%)"; } var percentagePlayed = (int)(_variation.VarAudio.time / _variation.VarAudio.clip.length * 100); EditorGUILayout.LabelField(string.Format(label, percentagePlayed), EditorStyles.miniButtonMid, GUILayout.Height(16), GUILayout.Width(240)); _variation.frames++; isDirty = true; GUI.color = DTGUIHelper.BrightButtonColor; if (_variation.ObjectToFollow != null || _variation.ObjectToTriggerFrom != null) { if (GUILayout.Button("Select Caller", EditorStyles.toolbarButton, GUILayout.Width(80))) { if (_variation.ObjectToFollow != null) { Selection.activeGameObject = _variation.ObjectToFollow.gameObject; } else { Selection.activeGameObject = _variation.ObjectToTriggerFrom.gameObject; } } } } else { GUI.color = Color.red; EditorGUILayout.LabelField("Not playing", EditorStyles.miniButtonMid, GUILayout.Height(16), GUILayout.Width(240)); } } GUI.color = Color.white; GUI.contentColor = Color.white; _ma = MasterAudio.Instance; var maInScene = _ma != null; if (maInScene) { var buttonPressed = DTGUIHelper.AddVariationButtons(); switch (buttonPressed) { case DTGUIHelper.DTFunctionButtons.Play: if (DTGUIHelper.IsVideoPlayersGroup(_variation.ParentGroup.name)) { break; } previewer = MasterAudioInspector.GetPreviewer(); if (Application.isPlaying) { MasterAudio.PlaySound3DAtVector3AndForget(_variation.ParentGroup.name, previewer.transform.position, 1f, null, 0f, _variation.name); } else { isDirty = true; var randPitch = GetRandomPreviewPitch(_variation); var varVol = GetRandomPreviewVolume(_variation); if (previewer != null) { MasterAudioInspector.StopPreviewer(); previewer.pitch = randPitch; } var calcVolume = varVol * parentGroup.groupMasterVolume; switch (_variation.audLocation) { case MasterAudio.AudioLocation.ResourceFile: if (previewer != null) { var fileName = AudioResourceOptimizer.GetLocalizedFileName(_variation.useLocalization, _variation.resourceFileName); previewer.PlayOneShot(Resources.Load(fileName) as AudioClip, calcVolume); } break; case MasterAudio.AudioLocation.Clip: if (previewer != null) { previewer.PlayOneShot(_variation.VarAudio.clip, calcVolume); } break; #if ADDRESSABLES_ENABLED case MasterAudio.AudioLocation.Addressable: DTGUIHelper.PreviewAddressable(_variation.audioClipAddressable, previewer, calcVolume); break; #endif } } break; case DTGUIHelper.DTFunctionButtons.Stop: if (DTGUIHelper.IsVideoPlayersGroup(_variation.ParentGroup.name)) { break; } if (Application.isPlaying) { MasterAudio.StopAllOfSound(_variation.transform.parent.name); } else { MasterAudioInspector.StopPreviewer(); } break; } } EditorGUILayout.EndHorizontal(); DTGUIHelper.HelpHeader("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm", "http://www.dtdevtools.com/API/masteraudio/class_dark_tonic_1_1_master_audio_1_1_sound_group_variation.html"); if (!isVideoPlayersGroup) { if (maInScene && !Application.isPlaying) { DTGUIHelper.ShowColorWarning(MasterAudio.PreviewText); } if (!Application.isPlaying) { var newAlias = EditorGUILayout.TextField("Clip Id (optional)", _variation.clipAlias); if (newAlias != _variation.clipAlias) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Clip Id"); _variation.clipAlias = newAlias; } } var oldLocation = _variation.audLocation; EditorGUILayout.BeginHorizontal(); if (!Application.isPlaying) { var newLocation = (MasterAudio.AudioLocation)EditorGUILayout.EnumPopup("Audio Origin", _variation.audLocation); if (newLocation != oldLocation) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Audio Origin"); _variation.audLocation = newLocation; } } else { EditorGUILayout.LabelField("Audio Origin", _variation.audLocation.ToString()); } DTGUIHelper.AddHelpIconNoStyle("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm#AudioOrigin"); EditorGUILayout.EndHorizontal(); if (oldLocation != _variation.audLocation && oldLocation == MasterAudio.AudioLocation.Clip) { if (_variation.VarAudio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage."); } _variation.VarAudio.clip = null; } switch (_variation.audLocation) { case MasterAudio.AudioLocation.Clip: var newClip = (AudioClip)EditorGUILayout.ObjectField("Audio Clip", _variation.VarAudio.clip, typeof(AudioClip), false); if (newClip != _variation.VarAudio.clip) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "assign Audio Clip"); _variation.VarAudio.clip = newClip; } break; #if ADDRESSABLES_ENABLED case MasterAudio.AudioLocation.Addressable: serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(SoundGroupVariation.audioClipAddressable)), true); serializedObject.ApplyModifiedProperties(); if (!DTGUIHelper.IsAddressableTypeValid(_variation.audioClipAddressable, _variation.name)) { _variation.audioClipAddressable = null; isDirty = true; } break; #endif case MasterAudio.AudioLocation.ResourceFile: EditorGUILayout.BeginVertical(); var anEvent = Event.current; GUI.color = DTGUIHelper.DragAreaColor; var dragArea = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); GUI.Box(dragArea, "Drag Resource Audio clip here to use its name!"); GUI.color = Color.white; string newFilename; switch (anEvent.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!dragArea.Contains(anEvent.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (anEvent.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var dragged in DragAndDrop.objectReferences) { // ReSharper disable once ExpressionIsAlwaysNull var aClip = dragged as AudioClip; // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (aClip == null) { continue; } // ReSharper disable HeuristicUnreachableCode var useLocalization = false; newFilename = DTGUIHelper.GetResourcePath(aClip, ref useLocalization); if (string.IsNullOrEmpty(newFilename)) { newFilename = aClip.name; } AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; _variation.useLocalization = useLocalization; break; // ReSharper restore HeuristicUnreachableCode } } Event.current.Use(); break; } EditorGUILayout.EndVertical(); newFilename = EditorGUILayout.TextField("Resource Filename", _variation.resourceFileName); if (newFilename != _variation.resourceFileName) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; } EditorGUI.indentLevel = 1; var newLocal = EditorGUILayout.Toggle("Use Localized Folder", _variation.useLocalization); if (newLocal != _variation.useLocalization) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Localized Folder"); _variation.useLocalization = newLocal; } break; } EditorGUI.indentLevel = 0; var newProbability = EditorGUILayout.IntSlider("Probability to Play (%)", _variation.probabilityToPlay, 0, 100); if (newProbability != _variation.probabilityToPlay) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Probability to Play (%)"); _variation.probabilityToPlay = newProbability; } if (_variation.probabilityToPlay < 100) { DTGUIHelper.ShowLargeBarAlert("Since Probability to Play is less than 100%, you will not always hear this Variation when it's selected to play."); } } var newVolume = DTGUIHelper.DisplayVolumeField(_variation.VarAudio.volume, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, 0f, true); if (newVolume != _variation.VarAudio.volume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Volume"); _variation.VarAudio.volume = newVolume; } if (isVideoPlayersGroup) { DTGUIHelper.ShowColorWarning("This is the specially named Sound Group for Video Players. Most controls for this Sound Group cannot be used for Video Players and are hidden."); } if (!isVideoPlayersGroup) { var newPitch = DTGUIHelper.DisplayPitchField(_variation.VarAudio.pitch); if (newPitch != _variation.VarAudio.pitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Pitch"); _variation.VarAudio.pitch = newPitch; } if (parentGroup.curVariationMode == MasterAudioGroup.VariationMode.LoopedChain) { DTGUIHelper.ShowLargeBarAlert(MasterAudio.LoopDisabledLoopedChain); } else if (_variation.useRandomStartTime && _variation.randomEndPercent != 100f) { DTGUIHelper.ShowLargeBarAlert(MasterAudio.LoopDisabledCustomEnd); } else { var newLoop = EditorGUILayout.Toggle("Loop Clip", _variation.VarAudio.loop); if (newLoop != _variation.VarAudio.loop) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "toggle Loop"); _variation.VarAudio.loop = newLoop; } } EditorGUILayout.BeginHorizontal(); var newWeight = EditorGUILayout.IntSlider("Voices (Weight)", _variation.weight, 0, 100); DTGUIHelper.AddHelpIconNoStyle("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm#Voices"); EditorGUILayout.EndHorizontal(); if (newWeight != _variation.weight) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Voices (Weight)"); _variation.weight = newWeight; } DTGUIHelper.StartGroupHeader(); var newUseRndPitch = EditorGUILayout.BeginToggleGroup(" Use Random Pitch", _variation.useRandomPitch); if (newUseRndPitch != _variation.useRandomPitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Pitch"); _variation.useRandomPitch = newUseRndPitch; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomPitch) { var newMode = (SoundGroupVariation.RandomPitchMode)EditorGUILayout.EnumPopup("Pitch Compute Mode", _variation.randomPitchMode); if (newMode != _variation.randomPitchMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Pitch Compute Mode"); _variation.randomPitchMode = newMode; } var newPitchMin = DTGUIHelper.DisplayPitchField(_variation.randomPitchMin, "Random Pitch Min"); if (newPitchMin != _variation.randomPitchMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Min"); _variation.randomPitchMin = newPitchMin; if (_variation.randomPitchMax <= _variation.randomPitchMin) { _variation.randomPitchMax = _variation.randomPitchMin; } } var newPitchMax = DTGUIHelper.DisplayPitchField(_variation.randomPitchMax, "Random Pitch Max"); if (newPitchMax != _variation.randomPitchMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Max"); _variation.randomPitchMax = newPitchMax; if (_variation.randomPitchMin > _variation.randomPitchMax) { _variation.randomPitchMin = _variation.randomPitchMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.StartGroupHeader(); var newUseRndVol = EditorGUILayout.BeginToggleGroup(" Use Random Volume", _variation.useRandomVolume); if (newUseRndVol != _variation.useRandomVolume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Volume"); _variation.useRandomVolume = newUseRndVol; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomVolume) { var newMode = (SoundGroupVariation.RandomVolumeMode)EditorGUILayout.EnumPopup("Volume Compute Mode", _variation.randomVolumeMode); if (newMode != _variation.randomVolumeMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Volume Compute Mode"); _variation.randomVolumeMode = newMode; } var volMin = 0f; if (_variation.randomVolumeMode == SoundGroupVariation.RandomVolumeMode.AddToClipVolume) { volMin = -1f; } var newVolMin = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMin, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Min"); if (newVolMin != _variation.randomVolumeMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Min"); _variation.randomVolumeMin = newVolMin; if (_variation.randomVolumeMax <= _variation.randomVolumeMin) { _variation.randomVolumeMax = _variation.randomVolumeMin; } } var newVolMax = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMax, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Max"); if (newVolMax != _variation.randomVolumeMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Max"); _variation.randomVolumeMax = newVolMax; if (_variation.randomVolumeMin > _variation.randomVolumeMax) { _variation.randomVolumeMin = _variation.randomVolumeMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.StartGroupHeader(); var newSilence = EditorGUILayout.BeginToggleGroup(" Use Random Delay", _variation.useIntroSilence); if (newSilence != _variation.useIntroSilence) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Delay"); _variation.useIntroSilence = newSilence; } DTGUIHelper.EndGroupHeader(); if (_variation.useIntroSilence) { var newSilenceMin = EditorGUILayout.Slider("Delay Min (sec)", _variation.introSilenceMin, 0f, 100f); if (newSilenceMin != _variation.introSilenceMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Min (sec)"); _variation.introSilenceMin = newSilenceMin; if (_variation.introSilenceMin > _variation.introSilenceMax) { _variation.introSilenceMax = newSilenceMin; } } var newSilenceMax = EditorGUILayout.Slider("Delay Max (sec)", _variation.introSilenceMax, 0f, 100f); if (newSilenceMax != _variation.introSilenceMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Max (sec)"); _variation.introSilenceMax = newSilenceMax; if (_variation.introSilenceMax < _variation.introSilenceMin) { _variation.introSilenceMin = newSilenceMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.StartGroupHeader(); var newStart = EditorGUILayout.BeginToggleGroup(" Use Custom Start/End Position", _variation.useRandomStartTime); if (newStart != _variation.useRandomStartTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Custom Start/End Position"); _variation.useRandomStartTime = newStart; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomStartTime) { var newMin = EditorGUILayout.Slider("Start Min (%)", _variation.randomStartMinPercent, 0f, 100f); if (newMin != _variation.randomStartMinPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Start Min (%)"); _variation.randomStartMinPercent = newMin; if (_variation.randomStartMaxPercent <= _variation.randomStartMinPercent) { _variation.randomStartMaxPercent = _variation.randomStartMinPercent; } } var newMax = EditorGUILayout.Slider("Start Max (%)", _variation.randomStartMaxPercent, 0f, 100f); if (newMax != _variation.randomStartMaxPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Start Max (%)"); _variation.randomStartMaxPercent = newMax; if (_variation.randomStartMinPercent > _variation.randomStartMaxPercent) { _variation.randomStartMinPercent = _variation.randomStartMaxPercent; } } var newEnd = EditorGUILayout.Slider("End (%)", _variation.randomEndPercent, 0f, 100f); if (newEnd != _variation.randomEndPercent || _variation.randomEndPercent < _variation.randomStartMaxPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change End (%)"); _variation.randomEndPercent = newEnd; if (_variation.randomEndPercent < _variation.randomStartMaxPercent) { _variation.randomEndPercent = _variation.randomStartMaxPercent; } } } EditorGUILayout.EndToggleGroup(); if (_variation.VarAudio.loop) { DTGUIHelper.StartGroupHeader(); newStart = EditorGUILayout.BeginToggleGroup(" Use Finite Looping", _variation.useCustomLooping); if (newStart != _variation.useCustomLooping) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Finite Looping"); _variation.useCustomLooping = newStart; } DTGUIHelper.EndGroupHeader(); if (_variation.useCustomLooping) { var newMin = EditorGUILayout.IntSlider("Min Loops", _variation.minCustomLoops, 1, 100); if (newMin != _variation.minCustomLoops) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Min Loops"); _variation.minCustomLoops = newMin; if (_variation.maxCustomLoops <= _variation.minCustomLoops) { _variation.maxCustomLoops = _variation.minCustomLoops; } } var newMax = EditorGUILayout.IntSlider("Max Loops", _variation.maxCustomLoops, 1, 100); if (newMax != _variation.maxCustomLoops) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Max Loops"); _variation.maxCustomLoops = newMax; if (_variation.minCustomLoops > _variation.maxCustomLoops) { _variation.minCustomLoops = _variation.maxCustomLoops; } } } EditorGUILayout.EndToggleGroup(); } DTGUIHelper.StartGroupHeader(); var newUseFades = EditorGUILayout.BeginToggleGroup(" Use Custom Fading", _variation.useFades); if (newUseFades != _variation.useFades) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Custom Fading"); _variation.useFades = newUseFades; } DTGUIHelper.EndGroupHeader(); if (_variation.useFades) { var newFadeIn = EditorGUILayout.Slider("Fade In Time (sec)", _variation.fadeInTime, 0f, 10f); if (newFadeIn != _variation.fadeInTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade In Time"); _variation.fadeInTime = newFadeIn; } var newFadeOut = EditorGUILayout.Slider("Fade Out time (sec)", _variation.fadeOutTime, 0f, 10f); if (newFadeOut != _variation.fadeOutTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade Out Time"); _variation.fadeOutTime = newFadeOut; } if (_variation.VarAudio.loop) { DTGUIHelper.ShowColorWarning("Looped clips will not automatically use the custom fade out. You will need to call FadeOutNowAndStop() on the Variation to use the fade."); } } EditorGUILayout.EndToggleGroup(); } if (GUI.changed || isDirty) { EditorUtility.SetDirty(target); } //DrawDefaultInspector(); }
public override void OnInspectorGUI() { EditorGUIUtility.LookLikeControls(); EditorGUI.indentLevel = 0; var isDirty = false; _variation = (SoundGroupVariation)target; if (MasterAudioInspectorResources.logoTexture != null) { DTGUIHelper.ShowHeaderTexture(MasterAudioInspectorResources.logoTexture); } // if (Application.isPlaying) { // DTGUIHelper.ShowColorWarning(_variation.IsAvailableToPlay.ToString()); // } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.contentColor = Color.green; if (GUILayout.Button(new GUIContent("Back to Group", "Select Group in Hierarchy"), EditorStyles.toolbarButton, GUILayout.Width(120))) { Selection.activeObject = _variation.transform.parent.gameObject; } GUILayout.FlexibleSpace(); GUI.contentColor = Color.white; var ma = MasterAudio.Instance; if (ma != null) { var buttonPressed = DTGUIHelper.AddVariationButtons(); switch (buttonPressed) { case DTGUIHelper.DTFunctionButtons.Play: if (Application.isPlaying) { MasterAudio.PlaySound(_variation.transform.parent.name, 1f, null, 0f, _variation.name); } else { isDirty = true; if (_variation.audLocation == MasterAudio.AudioLocation.ResourceFile) { MasterAudio.PreviewerInstance.Stop(); MasterAudio.PreviewerInstance.PlayOneShot(Resources.Load(_variation.resourceFileName) as AudioClip); } else { PlaySound(_variation.audio); } } break; case DTGUIHelper.DTFunctionButtons.Stop: if (Application.isPlaying) { MasterAudio.StopAllOfSound(_variation.transform.parent.name); } else { if (_variation.audLocation == MasterAudio.AudioLocation.ResourceFile) { MasterAudio.PreviewerInstance.Stop(); } else { StopSound(_variation.audio); } } break; } } EditorGUILayout.EndHorizontal(); if (ma != null && !Application.isPlaying) { DTGUIHelper.ShowColorWarning("*Fading & random settings are ignored by preview in edit mode."); } var oldLocation = _variation.audLocation; var newLocation = (MasterAudio.AudioLocation)EditorGUILayout.EnumPopup("Audio Origin", _variation.audLocation); if (newLocation != oldLocation) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Audio Origin"); _variation.audLocation = newLocation; } switch (_variation.audLocation) { case MasterAudio.AudioLocation.Clip: var newClip = (AudioClip)EditorGUILayout.ObjectField("Audio Clip", _variation.audio.clip, typeof(AudioClip), false); if (newClip != _variation.audio.clip) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "assign Audio Clip"); _variation.audio.clip = newClip; } break; case MasterAudio.AudioLocation.ResourceFile: if (oldLocation != _variation.audLocation) { if (_variation.audio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on Resource file Variation."); } _variation.audio.clip = null; } EditorGUILayout.BeginVertical(); var anEvent = Event.current; GUI.color = Color.yellow; var dragArea = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); GUI.Box(dragArea, "Drag Resource Audio clip here to use its name!"); GUI.color = Color.white; var newFilename = string.Empty; switch (anEvent.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!dragArea.Contains(anEvent.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (anEvent.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var dragged in DragAndDrop.objectReferences) { var aClip = dragged as AudioClip; if (aClip == null) { continue; } newFilename = DTGUIHelper.GetResourcePath(aClip); if (string.IsNullOrEmpty(newFilename)) { newFilename = aClip.name; } if (newFilename != _variation.resourceFileName) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Resource filename"); _variation.resourceFileName = aClip.name; } break; } } Event.current.Use(); break; } EditorGUILayout.EndVertical(); newFilename = EditorGUILayout.TextField("Resource Filename", _variation.resourceFileName); if (newFilename != _variation.resourceFileName) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Resource filename"); _variation.resourceFileName = newFilename; } break; } var newVolume = EditorGUILayout.Slider("Volume", _variation.audio.volume, 0f, 1f); if (newVolume != _variation.audio.volume) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "change Volume"); _variation.audio.volume = newVolume; } var newPitch = EditorGUILayout.Slider("Pitch", _variation.audio.pitch, -3f, 3f); if (newPitch != _variation.audio.pitch) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "change Pitch"); _variation.audio.pitch = newPitch; } var newLoop = EditorGUILayout.Toggle("Loop Clip", _variation.audio.loop); if (newLoop != _variation.audio.loop) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "toggle Loop"); _variation.audio.loop = newLoop; } var newRandomPitch = EditorGUILayout.Slider("Random Pitch", _variation.randomPitch, 0f, 3f); if (newRandomPitch != _variation.randomPitch) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Random Pitch"); _variation.randomPitch = newRandomPitch; } var newRandomVolume = EditorGUILayout.Slider("Random Volume", _variation.randomVolume, 0f, 1f); if (newRandomVolume != _variation.randomVolume) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Random Volume"); _variation.randomVolume = newRandomVolume; } var newWeight = EditorGUILayout.IntSlider("Weight (Instances)", _variation.weight, 0, 100); if (newWeight != _variation.weight) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Weight"); _variation.weight = newWeight; } if (_variation.HasActiveFXFilter) { var newFxTailTime = EditorGUILayout.Slider("FX Tail Time", _variation.fxTailTime, 0f, 10f); if (newFxTailTime != _variation.fxTailTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change FX Tail Time"); _variation.fxTailTime = newFxTailTime; } } var newSilence = EditorGUILayout.BeginToggleGroup("Use Random Delay", _variation.useIntroSilence); if (newSilence != _variation.useIntroSilence) { UndoHelper.RecordObjectPropertyForUndo(_variation, "toggle Use Random Delay"); _variation.useIntroSilence = newSilence; } if (_variation.useIntroSilence) { var newSilenceMin = EditorGUILayout.Slider("Delay Min (sec)", _variation.introSilenceMin, 0f, 100f); if (newSilenceMin != _variation.introSilenceMin) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Delay Min (sec)"); _variation.introSilenceMin = newSilenceMin; if (_variation.introSilenceMin > _variation.introSilenceMax) { _variation.introSilenceMax = newSilenceMin; } } var newSilenceMax = EditorGUILayout.Slider("Delay Max (sec)", _variation.introSilenceMax, 0f, 100f); if (newSilenceMax != _variation.introSilenceMax) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Delay Max (sec)"); _variation.introSilenceMax = newSilenceMax; if (_variation.introSilenceMax < _variation.introSilenceMin) { _variation.introSilenceMin = newSilenceMax; } } } EditorGUILayout.EndToggleGroup(); var newUseFades = EditorGUILayout.BeginToggleGroup("Use Custom Fading", _variation.useFades); if (newUseFades != _variation.useFades) { UndoHelper.RecordObjectPropertyForUndo(_variation, "toggle Use Custom Fading"); _variation.useFades = newUseFades; } if (_variation.useFades) { var newFadeIn = EditorGUILayout.Slider("Fade In Time (sec)", _variation.fadeInTime, 0f, 10f); if (newFadeIn != _variation.fadeInTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Fade In Time"); _variation.fadeInTime = newFadeIn; } if (_variation.audio.loop) { DTGUIHelper.ShowColorWarning("*Looped clips cannot have a custom fade out."); } else { var newFadeOut = EditorGUILayout.Slider("Fade Out time (sec)", _variation.fadeOutTime, 0f, 10f); if (newFadeOut != _variation.fadeOutTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Fade Out Time"); _variation.fadeOutTime = newFadeOut; } } } EditorGUILayout.EndToggleGroup(); var filterList = new List <string>() { MasterAudio.NO_GROUP_NAME, "Low Pass", "High Pass", "Distortion", "Chorus", "Echo", "Reverb" }; var newFilterIndex = EditorGUILayout.Popup("Add Filter Effect", 0, filterList.ToArray()); switch (newFilterIndex) { case 1: AddFilterComponent(typeof(AudioLowPassFilter)); break; case 2: AddFilterComponent(typeof(AudioHighPassFilter)); break; case 3: AddFilterComponent(typeof(AudioDistortionFilter)); break; case 4: AddFilterComponent(typeof(AudioChorusFilter)); break; case 5: AddFilterComponent(typeof(AudioEchoFilter)); break; case 6: AddFilterComponent(typeof(AudioReverbFilter)); break; } if (GUI.changed || isDirty) { EditorUtility.SetDirty(target); } this.Repaint(); //DrawDefaultInspector(); }
private void CopyCustomFade(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { UndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Custom Fade"); } for (var i = 0; i < _group.groupVariations.Count; i++) { if (i == _group.selectedVariationIndex) { continue; } var aVar = _group.groupVariations[i]; aVar.useFades = variation.useFades; aVar.fadeInTime = variation.fadeInTime; aVar.fadeOutTime = variation.fadeOutTime; changed++; } Debug.LogWarning(changed + " Random Custom Fade(s) changed."); }
private void CopyLoops(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { UndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Loops"); } for (var i = 0; i < _group.groupVariations.Count; i++) { if (i == _group.selectedVariationIndex) { continue; } var aVar = _group.groupVariations[i]; aVar.VarAudio.loop = variation.VarAudio.loop; changed++; } Debug.LogWarning(changed + " Variation Loop(s) changed."); }
private void CopyRandomVolume(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { UndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Random Volume"); } for (var i = 0; i < _group.groupVariations.Count; i++) { if (i == _group.selectedVariationIndex) { continue; } var aVar = _group.groupVariations[i]; aVar.useRandomVolume = variation.useRandomVolume; aVar.randomVolumeMode = variation.randomVolumeMode; aVar.randomVolumeMin = variation.randomVolumeMin; aVar.randomVolumeMax = variation.randomVolumeMax; changed++; } Debug.LogWarning(changed + " Random Volume(s) changed."); }
public static void CopyOculusAudioSource(DynamicGroupVariation sourceVariation, SoundGroupVariation destVariation) { return; }
public override void OnInspectorGUI() { EditorGUIUtility.LookLikeControls(); EditorGUI.indentLevel = 0; var isDirty = false; _variation = (SoundGroupVariation)target; if (_variation.logoTexture != null) { GUIHelper.ShowHeaderTexture(_variation.logoTexture); } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.contentColor = Color.green; if (GUILayout.Button(new GUIContent("Back to Group", "Select Group in Hierarchy"), EditorStyles.toolbarButton, GUILayout.Width(120))) { Selection.activeObject = _variation.transform.parent.gameObject; } GUILayout.FlexibleSpace(); GUI.contentColor = Color.white; var ma = MasterAudio.Instance; if (ma != null) { var buttonPressed = GUIHelper.AddVariationButtons(ma); switch (buttonPressed) { case GUIHelper.DTFunctionButtons.Play: if (Application.isPlaying) { MasterAudio.PlaySound(_variation.transform.parent.name, 1f, null, 0f, _variation.name); } else { isDirty = true; if (_variation.audLocation == MasterAudio.AudioLocation.ResourceFile) { MasterAudio.PreviewerInstance.Stop(); MasterAudio.PreviewerInstance.PlayOneShot(Resources.Load(_variation.resourceFileName) as AudioClip); } else { PlaySound(_variation.audio); } } break; case GUIHelper.DTFunctionButtons.Stop: if (Application.isPlaying) { MasterAudio.StopAllOfSound(_variation.transform.parent.name); } else { if (_variation.audLocation == MasterAudio.AudioLocation.ResourceFile) { MasterAudio.PreviewerInstance.Stop(); } else { StopSound(_variation.audio); } } break; } } EditorGUILayout.EndHorizontal(); if (ma != null && !Application.isPlaying) { GUIHelper.ShowColorWarning("*Fading & random settings are ignored by preview in edit mode."); } var oldLocation = _variation.audLocation; var newLocation = (MasterAudio.AudioLocation) EditorGUILayout.EnumPopup("Audio Origin", _variation.audLocation); if (newLocation != oldLocation) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Audio Origin"); _variation.audLocation = newLocation; } switch (_variation.audLocation) { case MasterAudio.AudioLocation.Clip: var newClip = (AudioClip) EditorGUILayout.ObjectField("Audio Clip", _variation.audio.clip, typeof(AudioClip), false); if (newClip != _variation.audio.clip) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "assign Audio Clip"); _variation.audio.clip = newClip; } break; case MasterAudio.AudioLocation.ResourceFile: if (oldLocation != _variation.audLocation) { if (_variation.audio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on Resource file Variation."); } _variation.audio.clip = null; } EditorGUILayout.BeginVertical(); var anEvent = Event.current; GUI.color = Color.yellow; var dragArea = GUILayoutUtility.GetRect(0f, 20f,GUILayout.ExpandWidth(true)); GUI.Box (dragArea, "Drag Resource Audio clip here to use its name!"); GUI.color = Color.white; var newFilename = string.Empty; switch (anEvent.type) { case EventType.DragUpdated: case EventType.DragPerform: if(!dragArea.Contains(anEvent.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if(anEvent.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var dragged in DragAndDrop.objectReferences) { var aClip = dragged as AudioClip; if(aClip == null) { continue; } newFilename = aClip.name; if (newFilename != _variation.resourceFileName) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Resource filename"); _variation.resourceFileName = aClip.name; } break; } } Event.current.Use(); break; } EditorGUILayout.EndVertical(); newFilename = EditorGUILayout.TextField("Resource Filename", _variation.resourceFileName); if (newFilename != _variation.resourceFileName) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Resource filename"); _variation.resourceFileName = newFilename; } break; } var newVolume = EditorGUILayout.Slider("Volume", _variation.audio.volume, 0f, 1f); if (newVolume != _variation.audio.volume) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "change Volume"); _variation.audio.volume = newVolume; } var newPitch = EditorGUILayout.Slider("Pitch", _variation.audio.pitch, -3f, 3f); if (newPitch!= _variation.audio.pitch) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "change Pitch"); _variation.audio.pitch = newPitch; } var newLoop = EditorGUILayout.Toggle("Loop Clip", _variation.audio.loop); if (newLoop != _variation.audio.loop) { UndoHelper.RecordObjectPropertyForUndo(_variation.audio, "toggle Loop"); _variation.audio.loop = newLoop; } var newRandomPitch = EditorGUILayout.Slider("Random Pitch", _variation.randomPitch, 0f, 3f); if (newRandomPitch != _variation.randomPitch) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Random Pitch"); _variation.randomPitch = newRandomPitch; } var newRandomVolume = EditorGUILayout.Slider("Random Volume", _variation.randomVolume, 0f, 1f); if (newRandomVolume != _variation.randomVolume) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Random Volume"); _variation.randomVolume = newRandomVolume; } var newWeight = EditorGUILayout.IntSlider("Weight (Instances)", _variation.weight, 0, 100); if (newWeight != _variation.weight) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Weight"); _variation.weight = newWeight; } if (_variation.HasActiveFXFilter) { var newFxTailTime = EditorGUILayout.Slider("FX Tail Time", _variation.fxTailTime, 0f, 10f); if (newFxTailTime != _variation.fxTailTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change FX Tail Time"); _variation.fxTailTime = newFxTailTime; } } var newUseFades = EditorGUILayout.BeginToggleGroup("Use Custom Fading", _variation.useFades); if (newUseFades != _variation.useFades) { UndoHelper.RecordObjectPropertyForUndo(_variation, "toggle Use Custom Fading"); _variation.useFades = newUseFades; } var newFadeIn = EditorGUILayout.Slider("Fade In Time (sec)", _variation.fadeInTime, 0f, 10f); if (newFadeIn != _variation.fadeInTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Fade In Time"); _variation.fadeInTime = newFadeIn; } if (_variation.audio.loop) { GUIHelper.ShowColorWarning("*Looped clips cannot have a custom fade out."); } else { var newFadeOut = EditorGUILayout.Slider("Fade Out time (sec)", _variation.fadeOutTime, 0f, 10f); if (newFadeOut != _variation.fadeOutTime) { UndoHelper.RecordObjectPropertyForUndo(_variation, "change Fade Out Time"); _variation.fadeOutTime = newFadeOut; } } EditorGUILayout.EndToggleGroup(); var filterList = new List<string>() { MasterAudio.NO_GROUP_NAME, "Low Pass", "High Pass", "Distortion", "Chorus", "Echo", "Reverb" }; var newFilterIndex = EditorGUILayout.Popup("Add Filter Effect", 0, filterList.ToArray()); switch (newFilterIndex) { case 1: AddFilterComponent(typeof(AudioLowPassFilter)); break; case 2: AddFilterComponent(typeof(AudioHighPassFilter)); break; case 3: AddFilterComponent(typeof(AudioDistortionFilter)); break; case 4: AddFilterComponent(typeof(AudioChorusFilter)); break; case 5: AddFilterComponent(typeof(AudioEchoFilter)); break; case 6: AddFilterComponent(typeof(AudioReverbFilter)); break; } if (GUI.changed || isDirty) { EditorUtility.SetDirty(target); } this.Repaint(); //DrawDefaultInspector(); }
private void CopyRandomPitch(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { AudioUndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Random Pitch"); } foreach (var aVar in changedVars) { aVar.useRandomPitch = variation.useRandomPitch; aVar.randomPitchMode = variation.randomPitchMode; aVar.randomPitchMin = variation.randomPitchMin; aVar.randomPitchMax = variation.randomPitchMax; changed++; } Debug.LogWarning(changed + " Random Pitch(es) changed."); }
public static void CopyResonanceAudioSource(SoundGroupVariation sourceVariation, DynamicGroupVariation destVariation) { return; }
private void CopyRandomDelay(SoundGroupVariation variation) { var changed = 0; var changedVars = GetNonMatchingVariations(); if (changedVars.Count > 0) { AudioUndoHelper.RecordObjectsForUndo(changedVars.ToArray(), "change Variation Random Delay"); } foreach (var aVar in changedVars) { aVar.useIntroSilence = variation.useIntroSilence; aVar.introSilenceMin = variation.introSilenceMin; aVar.introSilenceMax = variation.introSilenceMax; changed++; } Debug.LogWarning(changed + " Random Delay(s) changed."); }
public static void AddResonanceAudioSourceToVariation(SoundGroupVariation variation) { return; }
// ReSharper disable once FunctionComplexityOverflow public override void OnInspectorGUI() { EditorGUI.indentLevel = 0; var isDirty = false; _variation = (SoundGroupVariation)target; if (MasterAudioInspectorResources.LogoTexture != null) { DTGUIHelper.ShowHeaderTexture(MasterAudioInspectorResources.LogoTexture); } var parentGroup = _variation.ParentGroup; if (parentGroup == null) { DTGUIHelper.ShowLargeBarAlert("This file cannot be edited in Project View."); return; } AudioSource previewer; EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.contentColor = DTGUIHelper.BrightButtonColor; if (GUILayout.Button(new GUIContent("Back to Group", "Select Group in Hierarchy"), EditorStyles.toolbarButton, GUILayout.Width(90))) { Selection.activeObject = _variation.transform.parent.gameObject; } GUILayout.FlexibleSpace(); if (Application.isPlaying) { // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (_variation.IsPlaying && _variation.VarAudio.clip != null) // wait for Resource files to load { GUI.color = Color.green; var label = "Playing ({0}%)"; if (AudioUtil.IsAudioPaused(_variation.VarAudio)) { GUI.color = Color.yellow; label = "Paused ({0}%)"; } var percentagePlayed = (int)(_variation.VarAudio.time / _variation.VarAudio.clip.length * 100); EditorGUILayout.LabelField(string.Format(label, percentagePlayed), EditorStyles.miniButtonMid, GUILayout.Height(16), GUILayout.Width(240)); _variation.frames++; isDirty = true; GUI.color = DTGUIHelper.BrightButtonColor; if (_variation.ObjectToFollow != null || _variation.ObjectToTriggerFrom != null) { if (GUILayout.Button("Select Caller", EditorStyles.miniButton, GUILayout.Width(80))) { if (_variation.ObjectToFollow != null) { Selection.activeGameObject = _variation.ObjectToFollow.gameObject; } else { Selection.activeGameObject = _variation.ObjectToTriggerFrom.gameObject; } } } } else { GUI.color = Color.red; EditorGUILayout.LabelField("Not playing", EditorStyles.miniButtonMid, GUILayout.Height(16), GUILayout.Width(240)); } } GUI.color = Color.white; GUI.contentColor = Color.white; _ma = MasterAudio.Instance; var maInScene = _ma != null; var canPreview = !DTGUIHelper.IsPrefabInProjectView(_variation); if (maInScene) { var buttonPressed = DTGUIHelper.DTFunctionButtons.None; if (canPreview) { buttonPressed = DTGUIHelper.AddVariationButtons(); } switch (buttonPressed) { case DTGUIHelper.DTFunctionButtons.Play: previewer = MasterAudioInspector.GetPreviewer(); if (Application.isPlaying) { MasterAudio.PlaySound3DAtVector3AndForget(_variation.ParentGroup.name, previewer.transform.position, 1f, null, 0f, _variation.name); } else { isDirty = true; var randPitch = GetRandomPreviewPitch(_variation); var varVol = GetRandomPreviewVolume(_variation); if (_variation.audLocation != MasterAudio.AudioLocation.FileOnInternet) { if (previewer != null) { MasterAudioInspector.StopPreviewer(); previewer.pitch = randPitch; } } var calcVolume = varVol * parentGroup.groupMasterVolume; switch (_variation.audLocation) { case MasterAudio.AudioLocation.ResourceFile: if (previewer != null) { var fileName = AudioResourceOptimizer.GetLocalizedFileName(_variation.useLocalization, _variation.resourceFileName); previewer.PlayOneShot(Resources.Load(fileName) as AudioClip, calcVolume); } break; case MasterAudio.AudioLocation.Clip: if (previewer != null) { previewer.PlayOneShot(_variation.VarAudio.clip, calcVolume); } break; case MasterAudio.AudioLocation.FileOnInternet: if (!string.IsNullOrEmpty(_variation.internetFileUrl)) { Application.OpenURL(_variation.internetFileUrl); } break; } } break; case DTGUIHelper.DTFunctionButtons.Stop: if (Application.isPlaying) { MasterAudio.StopAllOfSound(_variation.transform.parent.name); } else { if (_variation.audLocation != MasterAudio.AudioLocation.FileOnInternet) { MasterAudioInspector.StopPreviewer(); } } break; } } EditorGUILayout.EndHorizontal(); DTGUIHelper.HelpHeader("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm", "http://www.dtdevtools.com/API/masteraudio/class_dark_tonic_1_1_master_audio_1_1_sound_group_variation.html"); if (maInScene && !Application.isPlaying) { DTGUIHelper.ShowColorWarning(MasterAudio.PreviewText); } var oldLocation = _variation.audLocation; EditorGUILayout.BeginHorizontal(); if (!Application.isPlaying) { var newLocation = (MasterAudio.AudioLocation)EditorGUILayout.EnumPopup("Audio Origin", _variation.audLocation); if (newLocation != oldLocation) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Audio Origin"); _variation.audLocation = newLocation; } } else { EditorGUILayout.LabelField("Audio Origin", _variation.audLocation.ToString()); } DTGUIHelper.AddHelpIcon("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm#AudioOrigin"); EditorGUILayout.EndHorizontal(); switch (_variation.audLocation) { case MasterAudio.AudioLocation.Clip: var newClip = (AudioClip)EditorGUILayout.ObjectField("Audio Clip", _variation.VarAudio.clip, typeof(AudioClip), false); if (newClip != _variation.VarAudio.clip) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "assign Audio Clip"); _variation.VarAudio.clip = newClip; } break; case MasterAudio.AudioLocation.FileOnInternet: if (oldLocation != _variation.audLocation) { if (_variation.VarAudio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on File On Internet Variation."); } _variation.VarAudio.clip = null; } if (!Application.isPlaying) { var newUrl = EditorGUILayout.TextField("Internet File URL", _variation.internetFileUrl); if (newUrl != _variation.internetFileUrl) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Internet File URL"); _variation.internetFileUrl = newUrl; } } else { EditorGUILayout.LabelField("Internet File URL", _variation.internetFileUrl); switch (_variation.internetFileLoadStatus) { case MasterAudio.InternetFileLoadStatus.Loading: DTGUIHelper.ShowLargeBarAlert("Attempting to download."); break; case MasterAudio.InternetFileLoadStatus.Loaded: DTGUIHelper.ShowColorWarning("Downloaded and ready to play."); break; case MasterAudio.InternetFileLoadStatus.Failed: DTGUIHelper.ShowRedError("Failed Download."); break; } } if (string.IsNullOrEmpty(_variation.internetFileUrl)) { DTGUIHelper.ShowLargeBarAlert("You have not specified a URL for the File On Internet. This Variation will not be available to play without one."); } break; case MasterAudio.AudioLocation.ResourceFile: if (oldLocation != _variation.audLocation) { if (_variation.VarAudio.clip != null) { Debug.Log("Audio clip removed to prevent unnecessary memory usage on Resource file Variation."); } _variation.VarAudio.clip = null; } EditorGUILayout.BeginVertical(); var anEvent = Event.current; GUI.color = DTGUIHelper.DragAreaColor; var dragArea = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); GUI.Box(dragArea, "Drag Resource Audio clip here to use its name!"); GUI.color = Color.white; string newFilename; switch (anEvent.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!dragArea.Contains(anEvent.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (anEvent.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var dragged in DragAndDrop.objectReferences) { // ReSharper disable once ExpressionIsAlwaysNull var aClip = dragged as AudioClip; // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (aClip == null) { continue; } // ReSharper disable HeuristicUnreachableCode var useLocalization = false; newFilename = DTGUIHelper.GetResourcePath(aClip, ref useLocalization); if (string.IsNullOrEmpty(newFilename)) { newFilename = aClip.name; } AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; _variation.useLocalization = useLocalization; break; // ReSharper restore HeuristicUnreachableCode } } Event.current.Use(); break; } EditorGUILayout.EndVertical(); newFilename = EditorGUILayout.TextField("Resource Filename", _variation.resourceFileName); if (newFilename != _variation.resourceFileName) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Resource filename"); _variation.resourceFileName = newFilename; } EditorGUI.indentLevel = 1; var newLocal = EditorGUILayout.Toggle("Use Localized Folder", _variation.useLocalization); if (newLocal != _variation.useLocalization) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Localized Folder"); _variation.useLocalization = newLocal; } break; } EditorGUI.indentLevel = 0; var newProbability = EditorGUILayout.IntSlider("Probability to Play (%)", _variation.probabilityToPlay, 0, 100); if (newProbability != _variation.probabilityToPlay) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Probability to Play (%)"); _variation.probabilityToPlay = newProbability; } if (_variation.probabilityToPlay < 100) { DTGUIHelper.ShowLargeBarAlert("Since Probability to Play is less than 100%, you will not always hear this Variation when it's selected to play."); } var newVolume = DTGUIHelper.DisplayVolumeField(_variation.VarAudio.volume, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, 0f, true); if (newVolume != _variation.VarAudio.volume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Volume"); _variation.VarAudio.volume = newVolume; } var newPitch = DTGUIHelper.DisplayPitchField(_variation.VarAudio.pitch); if (newPitch != _variation.VarAudio.pitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "change Pitch"); _variation.VarAudio.pitch = newPitch; } if (parentGroup.curVariationMode == MasterAudioGroup.VariationMode.LoopedChain) { DTGUIHelper.ShowLargeBarAlert("Loop Clip is always OFF for Looped Chain Groups"); } else { var newLoop = EditorGUILayout.Toggle("Loop Clip", _variation.VarAudio.loop); if (newLoop != _variation.VarAudio.loop) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation.VarAudio, "toggle Loop"); _variation.VarAudio.loop = newLoop; } } EditorGUILayout.BeginHorizontal(); var newWeight = EditorGUILayout.IntSlider("Voices (Weight)", _variation.weight, 0, 100); DTGUIHelper.AddHelpIcon("http://www.dtdevtools.com/docs/masteraudio/SoundGroupVariations.htm#Voices"); EditorGUILayout.EndHorizontal(); if (newWeight != _variation.weight) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Voices (Weight)"); _variation.weight = newWeight; } var newFxTailTime = EditorGUILayout.Slider("FX Tail Time", _variation.fxTailTime, 0f, 10f); if (newFxTailTime != _variation.fxTailTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change FX Tail Time"); _variation.fxTailTime = newFxTailTime; } var filterList = new List <string>() { MasterAudio.NoGroupName, "Low Pass", "High Pass", "Distortion", "Chorus", "Echo", "Reverb" }; EditorGUILayout.BeginHorizontal(); var newFilterIndex = EditorGUILayout.Popup("Add Filter Effect", 0, filterList.ToArray()); DTGUIHelper.AddHelpIcon("http://www.dtdevtools.com/docs/masteraudio/FilterFX.htm"); EditorGUILayout.EndHorizontal(); switch (newFilterIndex) { case 1: AddFilterComponent(typeof(AudioLowPassFilter)); break; case 2: AddFilterComponent(typeof(AudioHighPassFilter)); break; case 3: AddFilterComponent(typeof(AudioDistortionFilter)); break; case 4: AddFilterComponent(typeof(AudioChorusFilter)); break; case 5: AddFilterComponent(typeof(AudioEchoFilter)); break; case 6: AddFilterComponent(typeof(AudioReverbFilter)); break; } DTGUIHelper.StartGroupHeader(); var newUseRndPitch = EditorGUILayout.BeginToggleGroup(" Use Random Pitch", _variation.useRandomPitch); if (newUseRndPitch != _variation.useRandomPitch) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Pitch"); _variation.useRandomPitch = newUseRndPitch; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomPitch) { var newMode = (SoundGroupVariation.RandomPitchMode)EditorGUILayout.EnumPopup("Pitch Compute Mode", _variation.randomPitchMode); if (newMode != _variation.randomPitchMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Pitch Compute Mode"); _variation.randomPitchMode = newMode; } var newPitchMin = DTGUIHelper.DisplayPitchField(_variation.randomPitchMin, "Random Pitch Min"); if (newPitchMin != _variation.randomPitchMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Min"); _variation.randomPitchMin = newPitchMin; if (_variation.randomPitchMax <= _variation.randomPitchMin) { _variation.randomPitchMax = _variation.randomPitchMin; } } var newPitchMax = DTGUIHelper.DisplayPitchField(_variation.randomPitchMax, "Random Pitch Max"); if (newPitchMax != _variation.randomPitchMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Pitch Max"); _variation.randomPitchMax = newPitchMax; if (_variation.randomPitchMin > _variation.randomPitchMax) { _variation.randomPitchMin = _variation.randomPitchMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newUseRndVol = EditorGUILayout.BeginToggleGroup(" Use Random Volume", _variation.useRandomVolume); if (newUseRndVol != _variation.useRandomVolume) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Volume"); _variation.useRandomVolume = newUseRndVol; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomVolume) { var newMode = (SoundGroupVariation.RandomVolumeMode)EditorGUILayout.EnumPopup("Volume Compute Mode", _variation.randomVolumeMode); if (newMode != _variation.randomVolumeMode) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Volume Compute Mode"); _variation.randomVolumeMode = newMode; } var volMin = 0f; if (_variation.randomVolumeMode == SoundGroupVariation.RandomVolumeMode.AddToClipVolume) { volMin = -1f; } var newVolMin = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMin, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Min"); if (newVolMin != _variation.randomVolumeMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Min"); _variation.randomVolumeMin = newVolMin; if (_variation.randomVolumeMax <= _variation.randomVolumeMin) { _variation.randomVolumeMax = _variation.randomVolumeMin; } } var newVolMax = DTGUIHelper.DisplayVolumeField(_variation.randomVolumeMax, DTGUIHelper.VolumeFieldType.None, MasterAudio.MixerWidthMode.Normal, volMin, true, "Random Volume Max"); if (newVolMax != _variation.randomVolumeMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Random Volume Max"); _variation.randomVolumeMax = newVolMax; if (_variation.randomVolumeMin > _variation.randomVolumeMax) { _variation.randomVolumeMin = _variation.randomVolumeMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newSilence = EditorGUILayout.BeginToggleGroup(" Use Random Delay", _variation.useIntroSilence); if (newSilence != _variation.useIntroSilence) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Delay"); _variation.useIntroSilence = newSilence; } DTGUIHelper.EndGroupHeader(); if (_variation.useIntroSilence) { var newSilenceMin = EditorGUILayout.Slider("Delay Min (sec)", _variation.introSilenceMin, 0f, 100f); if (newSilenceMin != _variation.introSilenceMin) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Min (sec)"); _variation.introSilenceMin = newSilenceMin; if (_variation.introSilenceMin > _variation.introSilenceMax) { _variation.introSilenceMax = newSilenceMin; } } var newSilenceMax = EditorGUILayout.Slider("Delay Max (sec)", _variation.introSilenceMax, 0f, 100f); if (newSilenceMax != _variation.introSilenceMax) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Delay Max (sec)"); _variation.introSilenceMax = newSilenceMax; if (_variation.introSilenceMax < _variation.introSilenceMin) { _variation.introSilenceMin = newSilenceMax; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newStart = EditorGUILayout.BeginToggleGroup(" Use Random Start Position", _variation.useRandomStartTime); if (newStart != _variation.useRandomStartTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Random Start Position"); _variation.useRandomStartTime = newStart; } DTGUIHelper.EndGroupHeader(); if (_variation.useRandomStartTime) { var newMin = EditorGUILayout.Slider("Start Min (%)", _variation.randomStartMinPercent, 0f, 100f); if (newMin != _variation.randomStartMinPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Start Min (%)"); _variation.randomStartMinPercent = newMin; if (_variation.randomStartMaxPercent <= _variation.randomStartMinPercent) { _variation.randomStartMaxPercent = _variation.randomStartMinPercent; } } var newMax = EditorGUILayout.Slider("Start Max (%)", _variation.randomStartMaxPercent, 0f, 100f); if (newMax != _variation.randomStartMaxPercent) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Start Max (%)"); _variation.randomStartMaxPercent = newMax; if (_variation.randomStartMinPercent > _variation.randomStartMaxPercent) { _variation.randomStartMinPercent = _variation.randomStartMaxPercent; } } } EditorGUILayout.EndToggleGroup(); DTGUIHelper.AddSpaceForNonU5(2); DTGUIHelper.StartGroupHeader(); var newUseFades = EditorGUILayout.BeginToggleGroup(" Use Custom Fading", _variation.useFades); if (newUseFades != _variation.useFades) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "toggle Use Custom Fading"); _variation.useFades = newUseFades; } DTGUIHelper.EndGroupHeader(); if (_variation.useFades) { var newFadeIn = EditorGUILayout.Slider("Fade In Time (sec)", _variation.fadeInTime, 0f, 10f); if (newFadeIn != _variation.fadeInTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade In Time"); _variation.fadeInTime = newFadeIn; } if (_variation.VarAudio.loop) { DTGUIHelper.ShowColorWarning("Looped clips cannot have a custom fade out."); } else { var newFadeOut = EditorGUILayout.Slider("Fade Out time (sec)", _variation.fadeOutTime, 0f, 10f); if (newFadeOut != _variation.fadeOutTime) { AudioUndoHelper.RecordObjectPropertyForUndo(ref isDirty, _variation, "change Fade Out Time"); _variation.fadeOutTime = newFadeOut; } } } EditorGUILayout.EndToggleGroup(); if (GUI.changed || isDirty) { EditorUtility.SetDirty(target); } //DrawDefaultInspector(); }
public AudioInfo(SoundGroupVariation _variation, AudioSource _source, float _origVol) { this.variation = _variation; this.source = _source; this.originalVolume = _origVol; this.lastPercentageVolume = 1f; this.lastRandomVolume = 0f; }
public void RemoveActiveAudioSourceId(SoundGroupVariation variation) { var id = variation.GetInstanceID(); activeAudioSourcesIds.Remove(id); }
public static void AddOculusAudioSourceToVariation(SoundGroupVariation variation) { return; }