void Awake() { I = this; sfxGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.FX); musicGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.Music); vocabularyGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.Custom0); dialogueGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.Custom1); musicEnabled = true; }
public IAudioSource PlaySound(AudioClip clip) { if (sfxGroup == null) { sfxGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.FX); sfxGroup.mixerGroup = AudioManager.I.sfxGroup; } var source = sfxGroup.Play(clip); return(new SampleAudioSource(source, sfxGroup, this)); }
public IAudioSource PlayMusic(AudioClip clip) { StopMusic(); if (musicGroup == null) { musicGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.Music); musicGroup.mixerGroup = AudioManager.I.musicGroup; } var source = musicGroup.Play(clip); return(new SampleAudioSource(source, musicGroup, this)); }
void DrawRuntime() { EditorGUILayout.HelpBox("Runtime Mode", MessageType.Info); // Global volume EditorGUIUtility.labelWidth = 96; GUILayout.BeginVertical(DeGUI.styles.box.def); float prevGlobalVolume = _src.fooGlobalVolume; _src.fooGlobalVolume = EditorGUILayout.Slider("Global Volume", _src.fooGlobalVolume, 0, 1); if (Math.Abs(_src.fooGlobalVolume - prevGlobalVolume) > float.Epsilon) { DeAudioManager.SetVolume(_src.fooGlobalVolume); } GUILayout.EndVertical(); // Group volumes GUILayout.Space(4); EditorGUIUtility.labelWidth = 101; GUILayout.Label("DeAudioGroups", DeGUI.styles.label.bold); // Groups with ids if (DeAudioManager.audioGroups != null) { int len = DeAudioManager.audioGroups.Length; for (int i = 0; i < len; ++i) { // Group volumes DeAudioGroup g = DeAudioManager.audioGroups[i]; if (g.id == DeAudioGroupId.INTERNAL_Global && !HasPlayingSources(DeAudioManager.globalGroup)) { continue; } DeGUILayout.BeginVBox(DeGUI.styles.box.flatAlpha25); float prevVolume = g.fooVolume; g.fooVolume = EditorGUILayout.Slider(g.id == DeAudioGroupId.INTERNAL_Global ? "[GLOBAL]" : g.id.ToString(), g.fooVolume, 0, 1); if (Math.Abs(g.fooVolume - prevVolume) > float.Epsilon) { g.SetVolume(g.fooVolume); } DrawRuntimeSourcesFor(g); DeGUILayout.EndVBox(); } } }
public IAudioSource PlayLetterData(ILivingLetterData id, bool stopAllLetters = false) { AudioClip clip = AudioManager.I.GetAudioClip(id); if (wordsLettersGroup == null) { wordsLettersGroup = DeAudioManager.GetAudioGroup(DeAudioGroupId.Custom0); wordsLettersGroup.mixerGroup = AudioManager.I.lettersGroup; } if (stopAllLetters) { wordsLettersGroup.Stop(); } var source = wordsLettersGroup.Play(clip); return(new SampleAudioSource(source, wordsLettersGroup, this)); }
void OnEnable() { _src = target as DeAudioManager; DeAudioEditorUtils.CheckForDuplicateAudioGroupIds(_src.fooAudioGroups, _duplicateGroupIds); float lineH = EditorGUIUtility.singleLineHeight; float listVSpacer = 2f; _audioGroupsList = new ReorderableList(serializedObject, serializedObject.FindProperty("fooAudioGroups"), true, true, true, true); _audioGroupsList.elementHeight = lineH * 5 + listVSpacer * 4 + 10; _audioGroupsList.drawHeaderCallback = rect => { GUI.Label(rect, "DeAudioGroups", DeGUI.styles.label.bold); }; _audioGroupsList.onChangedCallback = list => { _requiresDuplicateCheck = true; }; _audioGroupsList.onAddCallback = list => { // Force volume to 1, max sources to -1 and recycle to true ReorderableList.defaultBehaviours.DoAddButton(list); int addedIndex = list.serializedProperty.arraySize - 1; SerializedProperty element = list.serializedProperty.GetArrayElementAtIndex(addedIndex); element.FindPropertyRelative("mixerGroup").objectReferenceValue = null; element.FindPropertyRelative("id").enumValueIndex = 0; element.FindPropertyRelative("fooVolume").floatValue = 1; element.FindPropertyRelative("maxSources").intValue = -1; element.FindPropertyRelative("recycle").boolValue = true; }; _audioGroupsList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (_requiresDuplicateCheck && Event.current.type == EventType.Repaint) { DeAudioEditorUtils.CheckForDuplicateAudioGroupIds(_src.fooAudioGroups, _duplicateGroupIds); _requiresDuplicateCheck = false; } bool hasDuplicateGroupIds = _duplicateGroupIds.Count > 0; EditorGUIUtility.labelWidth = 86; float ry = rect.y + 2; DeAudioGroup item = _src.fooAudioGroups[index]; GUI.color = item.mixerGroup == null ? Color.white : Color.green; AudioMixerGroup prevMixerGroup = item.mixerGroup; item.mixerGroup = EditorGUI.ObjectField(new Rect(rect.x, ry, rect.width, lineH), "MixerGroup", item.mixerGroup, typeof(AudioMixerGroup), false) as AudioMixerGroup; if (item.mixerGroup != prevMixerGroup) { DeAudioEditorUtils.CheckForDuplicateAudioGroupIds(_src.fooAudioGroups, _duplicateGroupIds); } GUI.color = Color.white; ry += lineH + listVSpacer; DeAudioGroupId prevId = item.id; GUI.color = hasDuplicateGroupIds && _duplicateGroupIds.Contains(item.id) ? Color.red : Color.white; item.id = (DeAudioGroupId)EditorGUI.EnumPopup(new Rect(rect.x, ry, rect.width, lineH), "Id (univocal)", item.id); GUI.color = Color.white; if (item.id != prevId) { DeAudioEditorUtils.CheckForDuplicateAudioGroupIds(_src.fooAudioGroups, _duplicateGroupIds); } ry += lineH + listVSpacer; item.fooVolume = EditorGUI.Slider(new Rect(rect.x, ry, rect.width, lineH), "Volume", item.fooVolume, 0, 1); ry += lineH + listVSpacer; item.maxSources = EditorGUI.IntSlider(new Rect(rect.x, ry, rect.width, lineH), "Max Sources", item.maxSources, -1, 100); ry += lineH + listVSpacer; item.recycle = EditorGUI.Toggle(new Rect(rect.x, ry, 120, lineH), new GUIContent(" Recycle", "If toggled, when max sources are reached and no free one is available the oldest one will be reused. If untoggled the new audio won't play."), item.recycle); EditorGUI.BeginDisabledGroup(item.maxSources == 0); EditorGUIUtility.labelWidth = 76; item.preallocate = EditorGUI.IntSlider(new Rect(rect.x + 120, ry, rect.width - 120, lineH), new GUIContent("Pre-allocate", "Allocates the given sources at startup."), item.preallocate, 0, item.maxSources >= 0 ? item.maxSources : 100); EditorGUI.EndDisabledGroup(); }; }