diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 74ec645..6e78ddf 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -2883,6 +2883,7 @@ MonoBehaviour: startWithMusic: 1 startMusicWith: 0 logLevel: 0 + extendSettings: {fileID: 11400000, guid: de80878c933394e2da0966a1466fd793, type: 2} --- !u!4 &2093584671 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs b/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs new file mode 100644 index 0000000..1bc38f9 --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using System.IO; + +namespace OCES.Audio +{ + /// + /// 音频系统扩展配置,集中管理所有路径和可调参数。 + /// 资产位置:Assets/Settings/AudioExtendSettings.asset + /// 编辑入口:Project Settings > Audio Extend + /// 运行时注入:AudioSystem.Awake() 将 Inspector 引用注入 _instance + /// + public class AudioExtendSettings : ScriptableObject + { + // ========== Resource Paths ========== + [Header("Resource Paths")] + [Tooltip("Resources 子目录:音频配置文件(.bytes)")] + public string audioConfigPath = "AudioData"; + + [Tooltip("Resources 子目录:音频资源文件(.wav/.ogg)")] + public string audioResourcePath = "Audios"; + + [Tooltip("Resources 路径:AudioMixer 资产")] + public string audioMixerPath = "Audios/Master"; + + // ========== AudioMixer Group Paths ========== + [Header("AudioMixer Groups")] + public string sfxGroupPath = "Master/Regular/SFX"; + public string voiceGroupPath = "Master/Regular/Voice"; + public string accentSfxGroupPath = "Master/SFX_Accent"; + public string musicGroupPath = "Master/Regular/Music"; + public string ambienceGroupPath = "Master/Regular/SFX/Ambience"; + + // ========== AudioMixer Parameters ========== + [Header("Lowpass Filter")] + public string lowpassParamName = "LowpassFreq"; + public float lowpassEnabledCutoff = 440f; + public float lowpassDisabledCutoff = 22000f; + public float lowpassTweenDuration = 0.2f; + + // ========== Audio Import ========== + [Header("Audio Import Settings")] + public AudioCompressionFormat compressionFormat = AudioCompressionFormat.Vorbis; + public uint sfxSampleRate = 22050; + public uint musicSampleRate = 44100; + public float musicQuality = 0.13f; + public float sfxQuality = 0.5f; + + public float decompressThreshold = 5f; // ≤ 此值 → DecompressOnLoad + public float streamingThreshold = 15f; // ≥ 此值 → Streaming + + // ========== Fade ========== + [Header("Fade")] + public DG.Tweening.Ease defaultFadeOutEase = DG.Tweening.Ease.InSine; + public DG.Tweening.Ease defaultFadeInEase = DG.Tweening.Ease.OutSine; + + // ── Singleton ── + + public static AudioExtendSettings Instance { get; internal set; } + + // 便利属性:拼接完整路径 + public string FullAudioResourcePath + { + get { return Path.Combine(Application.dataPath, "Resources", this.audioResourcePath); } + } + + public string FullAudioConfigPath + { + get { return Path.Combine(Application.dataPath, "Resources", this.audioConfigPath); } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs.meta b/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs.meta new file mode 100644 index 0000000..facd11a --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioExtendSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 79becf8778e048058fe7cc1f3a5e021b +timeCreated: 1778750086 \ No newline at end of file diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs b/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs index 06bd585..d151888 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs @@ -19,9 +19,8 @@ namespace OCES.Audio public enum ConsoleLogLevel { Off, Log, Warning, Error } //TODO 实现这个功能 internal ResourceLoader ResourceLoader; - - const string k_audioConfigPath = "AudioData"; - const string k_audioResourcePath = "Audios"; + + [SerializeField] AudioExtendSettings extendSettings; SfxSystem m_sfxSystem; MusicSystem m_musicSystem; @@ -99,14 +98,16 @@ namespace OCES.Audio public void SetLowpass(bool enable) { - float target = enable ? 440f : 22000f; + float target = enable + ? AudioExtendSettings.Instance.lowpassEnabledCutoff + : AudioExtendSettings.Instance.lowpassDisabledCutoff; // Kill existing tween to avoid stacking if (this.m_lowpassTween != null && this.m_lowpassTween.IsActive()) this.m_lowpassTween.Kill(); // Get current value as start - if (!this.m_mixer.GetFloat("LowpassFreq", out float current)) + if (!this.m_mixer.GetFloat(AudioExtendSettings.Instance.lowpassParamName, out float current)) current = target; float startLog = Mathf.Log10(current); @@ -118,10 +119,10 @@ namespace OCES.Audio { startLog = x; float value = Mathf.Pow(10f, startLog); - this.m_mixer.SetFloat("LowpassFreq", value); + this.m_mixer.SetFloat(AudioExtendSettings.Instance.lowpassParamName, value); }, endLog, - 0.2f // duration in seconds + AudioExtendSettings.Instance.lowpassTweenDuration // duration in seconds ).SetEase(Ease.OutCubic); } @@ -275,6 +276,8 @@ namespace OCES.Audio void Awake() { + AudioExtendSettings.Instance = this.extendSettings; + if ((bool)Instance && Instance != this) { Destroy(gameObject); @@ -284,28 +287,30 @@ namespace OCES.Audio DontDestroyOnLoad(gameObject); this.ResourceLoader = gameObject.AddComponent(); + + string audioConfigPath = AudioExtendSettings.Instance.audioConfigPath; - this.m_mixer = this.ResourceLoader.LoadSync("Audios/Master"); + this.m_mixer = this.ResourceLoader.LoadSync(AudioExtendSettings.Instance.audioMixerPath); // ── SFX 调度器 ── // AudioSystem.cs 中 GameObject sfxPoolRoot = new("SfxSourcePool"); sfxPoolRoot.transform.SetParent(transform, false); - AudioSourcePool sfxPool = new(sfxPoolRoot.transform); // 不传 mixer group,让 SfxSystem 自己设置 + AudioSourcePool sfxPool = new(sfxPoolRoot.transform); this.m_sfxSystem = gameObject.AddComponent(); - this.m_audioObjects = AudioConfigLoader.Load($"{k_audioConfigPath}/AudioObject"); + this.m_audioObjects = AudioConfigLoader.Load($"{audioConfigPath}/AudioObject"); this.m_audioObjects.PreParseSwitchMappings(); - this.m_groups = AudioConfigLoader.Load($"{k_audioConfigPath}/AudioGroup"); - this.m_sfxSystem.Initialize(this.m_groups, this.m_mixer, sfxPool); // 传入 pool + this.m_groups = AudioConfigLoader.Load ($"{audioConfigPath}/AudioGroup"); + this.m_sfxSystem.Initialize(this.m_groups, this.m_mixer, sfxPool); // ── 音乐与环境音系统 ── - var segments = AudioConfigLoader.Load($"{k_audioConfigPath}/MusicSegment"); - var containers = AudioConfigLoader.Load($"{k_audioConfigPath}/MusicContainer"); - var musicPaths = AudioConfigLoader.Load($"{k_audioConfigPath}/MusicPath"); - var ambiencePaths = AudioConfigLoader.Load($"{k_audioConfigPath}/AmbiencePath"); - var musicTransitions = AudioConfigLoader.Load($"{k_audioConfigPath}/MusicTransition"); - var ambienceTransitions = AudioConfigLoader.Load($"{k_audioConfigPath}/AmbienceTransition"); + var segments = AudioConfigLoader.Load ($"{audioConfigPath}/MusicSegment"); + var containers = AudioConfigLoader.Load ($"{audioConfigPath}/MusicContainer"); + var musicPaths = AudioConfigLoader.Load ($"{audioConfigPath}/MusicPath"); + var ambiencePaths = AudioConfigLoader.Load ($"{audioConfigPath}/AmbiencePath"); + var musicTransitions = AudioConfigLoader.Load ($"{audioConfigPath}/MusicTransition"); + var ambienceTransitions = AudioConfigLoader.Load ($"{audioConfigPath}/AmbienceTransition"); //运行时数据验证 segments.Validate(); @@ -317,12 +322,12 @@ namespace OCES.Audio // AudioSourcePool 由 MusicSystem 独占一个子节点,与 SFX pool 隔离 GameObject musicPoolRoot = new("MusicSourcePool"); musicPoolRoot.transform.SetParent(transform, false); - AudioMixerGroup musicGroup = this.m_mixer.FindMatchingGroups("Master/Regular/Music")[0]; + AudioMixerGroup musicGroup = this.m_mixer.FindMatchingGroups(AudioExtendSettings.Instance.musicGroupPath)[0]; AudioSourcePool musicPool = new(musicPoolRoot.transform, musicGroup); GameObject ambiencePoolRoot = new("AmbienceSourcePool"); ambiencePoolRoot.transform.SetParent(transform, false); - AudioMixerGroup ambienceGroup = this.m_mixer.FindMatchingGroups("Master/Regular/SFX/Ambience")[0]; + AudioMixerGroup ambienceGroup = this.m_mixer.FindMatchingGroups(AudioExtendSettings.Instance.ambienceGroupPath)[0]; AudioSourcePool ambiencePool = new(ambiencePoolRoot.transform, ambienceGroup); this.m_musicSystem.Initialize( @@ -429,4 +434,4 @@ namespace OCES.Audio return default; } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs new file mode 100644 index 0000000..d443605 --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using UnityEditor; + +namespace OCES.Audio.Editor +{ + static class AudioExtendSettingsProvider + { + const string k_assetPath = "Assets/Settings/AudioExtendSettings.asset"; + + [SettingsProvider] + static SettingsProvider Create() + { + return new SettingsProvider("Project/Audio Extend", SettingsScope.Project) + { + label = "Audio Extend", + guiHandler = searchContext => + { + var settings = AssetDatabase.LoadAssetAtPath(k_assetPath); + if (settings == null) + { + EditorGUILayout.HelpBox( + $"未找到 AudioExtendSettings.asset\n期望路径: {k_assetPath}", + MessageType.Warning); + if (GUILayout.Button("创建默认配置")) + CreateDefaultAsset(); + return; + } + + SerializedObject so = new SerializedObject(settings); + SerializedProperty prop = so.GetIterator(); + prop.NextVisible(true); // 跳过 Script 字段 + + EditorGUI.BeginChangeCheck(); + while (prop.NextVisible(false)) + EditorGUILayout.PropertyField(prop, true); + if (EditorGUI.EndChangeCheck()) + { + so.ApplyModifiedProperties(); + EditorUtility.SetDirty(settings); + AssetDatabase.SaveAssets(); + } + }, + keywords = new[] { "Audio", "SFX", "Music", "Mixer", "Path", "Import" } + }; + } + + [MenuItem("Tools/Audio/Create AudioExtendSettings Asset")] + static void CreateDefaultAsset() + { + if (!AssetDatabase.IsValidFolder("Assets/Settings")) + AssetDatabase.CreateFolder("Assets", "Settings"); + + var asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, k_assetPath); + AssetDatabase.SaveAssets(); + Debug.Log($"[AudioExtend] 已创建默认配置:{k_assetPath}"); + } + } +} + diff --git a/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs.meta b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs.meta new file mode 100644 index 0000000..a63dc95 --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioExtendSettingsProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 862f5cacec834b47a75da0d8ba2710f1 +timeCreated: 1778757352 \ No newline at end of file diff --git a/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioImportTool.cs b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioImportTool.cs index 20a6b2a..1851699 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioImportTool.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/Editor/AudioImportTool.cs @@ -9,16 +9,9 @@ namespace OCES.Audio public static class AudioImportTool { - const string k_audioResourcePath = "Audios"; - const string k_audioConfigPath = "AudioData"; - - static string AudioAbsolutePath - { - get { return Path.Combine(Application.dataPath, "Resources", k_audioResourcePath); } - } static string ConfigAbsolutePath { - get { return Path.Combine(Application.dataPath, "Resources", k_audioConfigPath); } + get { return Path.Combine(Application.dataPath, "Resources", AudioExtendSettings.Instance.audioConfigPath); } } [MenuItem("Tools/Audio/Apply Audio Import Settings")] @@ -26,7 +19,7 @@ namespace OCES.Audio { if (EditorUtility.DisplayDialog( "Apply Audio Import Settings", - $"将对 {AudioAbsolutePath} 下所有文件重新应用导入设置,确认继续?", + $"将对 {AudioExtendSettings.Instance.FullAudioResourcePath} 下所有文件重新应用导入设置,确认继续?", "确认", "取消")) { Run(); @@ -49,8 +42,12 @@ namespace OCES.Audio public static void Run() { // 1. 加载配置表 - var audioObjectConfig = AudioConfigLoader.Load(ConfigAbsolutePath, "AudioObject.bytes"); - var musicSegmentConfig = AudioConfigLoader.Load(ConfigAbsolutePath, "MusicSegment.bytes"); + var audioObjectConfig = + AudioConfigLoader.Load(AudioExtendSettings.Instance.FullAudioConfigPath, + "AudioObject.bytes"); + var musicSegmentConfig = + AudioConfigLoader.Load(AudioExtendSettings.Instance.FullAudioConfigPath, + "MusicSegment.bytes"); if (audioObjectConfig == null || musicSegmentConfig == null) { Debug.LogError("[AudioImportTool] 配置表加载失败,终止"); @@ -59,7 +56,7 @@ namespace OCES.Audio // 2. 扫描文件 List supportedExtensions = new() { ".wav", ".ogg" }; - DirectoryInfo dir = new(AudioAbsolutePath); + DirectoryInfo dir = new(AudioExtendSettings.Instance.FullAudioResourcePath); FileInfo[] files = dir.GetFiles().Where(f => supportedExtensions.Contains(f.Extension.ToLower())).ToArray(); int total = files.Length, processed = 0, failed = 0; @@ -119,32 +116,37 @@ namespace OCES.Audio importer.ClearSampleSettingOverride("iOS"); AudioImporterSampleSettings settings = importer.defaultSampleSettings; - settings.compressionFormat = AudioCompressionFormat.Vorbis; + settings.compressionFormat = AudioExtendSettings.Instance.compressionFormat; settings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate; settings.preloadAudioData = audioObject?.Haptic != 0; switch (category) { case AudioCategory.Music: - settings.sampleRateOverride = 44100; - settings.quality = 0.13f; - settings.loadType = duration switch + settings.sampleRateOverride = AudioExtendSettings.Instance.musicSampleRate; + settings.quality = AudioExtendSettings.Instance.musicQuality; + + if (duration <= AudioExtendSettings.Instance.decompressThreshold) { - <= 5 => AudioClipLoadType.DecompressOnLoad, - >= 15 => AudioClipLoadType.Streaming, - _ => AudioClipLoadType.CompressedInMemory, - }; + settings.loadType = AudioClipLoadType.DecompressOnLoad; + }else if (duration >= AudioExtendSettings.Instance.streamingThreshold) + { + settings.loadType = AudioClipLoadType.Streaming; + } + else + { + settings.loadType = AudioClipLoadType.CompressedInMemory; + } break; case AudioCategory.Voice: case AudioCategory.SFX: default: - settings.sampleRateOverride = 22050; // 音效2022.3.62f3没有32kHz这一档,要是有的话这一档其实最合适 - settings.quality = 0.5f; - settings.loadType = duration switch - { - >= 15 => AudioClipLoadType.Streaming, - _ => AudioClipLoadType.DecompressOnLoad, - }; + settings.sampleRateOverride = AudioExtendSettings.Instance.sfxSampleRate; // 音效2022.3.62f3没有32kHz这一档,要是有的话这一档其实最合适 + settings.quality = AudioExtendSettings.Instance.sfxQuality; + + settings.loadType = duration >= AudioExtendSettings.Instance.streamingThreshold + ? AudioClipLoadType.Streaming + : AudioClipLoadType.DecompressOnLoad; break; } diff --git a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/ChannelFader.cs b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/ChannelFader.cs index 12c7417..ae69510 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/ChannelFader.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/ChannelFader.cs @@ -194,7 +194,7 @@ namespace OCES.Audio continue; src.volume = fromVolume; - src.DOFade(0f, duration - elapsed).SetEase(Ease.InSine); //TODO 支持读表 + src.DOFade(0f, duration - elapsed).SetEase(AudioExtendSettings.Instance.defaultFadeOutEase); //TODO 支持读表 } yield return null; } @@ -236,7 +236,7 @@ namespace OCES.Audio if (DOTween.IsTweening(src)) continue; src.volume = 0f; - src.DOFade(1f, duration - elapsed).SetEase(Ease.OutSine); //TODO 支持读表 + src.DOFade(1f, duration - elapsed).SetEase(AudioExtendSettings.Instance.defaultFadeInEase); //TODO 支持读表 } yield return null; diff --git a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/LongAudioContainerPlayer.cs b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/LongAudioContainerPlayer.cs index 6285ec0..e9c34fc 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/LongAudioContainerPlayer.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/LongAudioContainerPlayer.cs @@ -342,7 +342,7 @@ namespace OCES.Audio // AudioClip clip = Resources.Load($"Audios/{segment.Name}"); AudioClip clip = null; - AudioSystem.Instance.ResourceLoader.LoadAsync($"Audios/{segment.Name}", loadedClip => + AudioSystem.Instance.ResourceLoader.LoadAsync($"{AudioExtendSettings.Instance.audioResourcePath}/{segment.Name}", loadedClip => { clip = loadedClip; }); diff --git a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicSegment.cs b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicSegment.cs index f86c810..3555cc2 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicSegment.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicSegment.cs @@ -16,7 +16,9 @@ namespace OCES.Audio { foreach (MusicSegment segment in this.m_musicSegmentInfos.Values) { - AudioClip clip = AudioSystem.Instance.ResourceLoader.LoadSync($"Audios/{segment.Name}"); + AudioClip clip = + AudioSystem.Instance.ResourceLoader.LoadSync( + $"{AudioExtendSettings.Instance.audioResourcePath}/{segment.Name}"); if (!clip) { Debug.LogError($"[MusicSegmentConfig] 音频文件未找到: {segment.Name}, SegmentId: {segment.Id}"); diff --git a/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs b/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs index 593afa7..cad34e7 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs @@ -14,9 +14,7 @@ namespace OCES.Audio public class SfxSystem : MonoBehaviour { public UnityEngine.UI.Text audioSystemTextBox; - - const int k_maxGlobalConcurrent = 128; - + //记录某个 AudioObject 最近一次触发播放的时刻,用于 MinInterval 节流判断,是"上次什么时候播过"。 readonly Dictionary m_lastPlayTime = new(); readonly Dictionary m_clipConcurrentCount = new(); @@ -78,11 +76,11 @@ namespace OCES.Audio this.m_pitchStepResolver = new PitchStepResolver(); this.m_volumeStepResolver = new VolumeStepResolver(); - AudioMixerGroup[] sfx = Find("Master/Regular/SFX"); + AudioMixerGroup[] sfx = Find(AudioExtendSettings.Instance.sfxGroupPath); if (sfx.Length > 0) this.m_sfxGroup = sfx[0]; - AudioMixerGroup[] voice = Find("Master/Regular/Voice"); + AudioMixerGroup[] voice = Find(AudioExtendSettings.Instance.voiceGroupPath); if (voice.Length > 0) this.m_voiceGroup = voice[0]; - AudioMixerGroup[] accentSfx = Find("Master/SFX_Accent"); + AudioMixerGroup[] accentSfx = Find(AudioExtendSettings.Instance.accentSfxGroupPath); if (accentSfx.Length > 0) this.m_accentSfxGroup = accentSfx[0]; return; @@ -224,7 +222,8 @@ namespace OCES.Audio } // 第四层:全局并发控制 - if (this.m_activeSounds.Count >= k_maxGlobalConcurrent) + //从Unity原生Audio Settings中读取最大发音数限制 + if (this.m_activeSounds.Count >= AudioSettings.GetConfiguration().numVirtualVoices) { this.m_tempLowerPriority.Clear(); foreach (ActiveSound activeSound in this.m_activeSounds) @@ -405,7 +404,9 @@ namespace OCES.Audio bool SetupSource(AudioSource source, ActiveSound activeSound, int clipIndex = 0) { AudioObject audioObject = activeSound.AudioObject; - AudioClip clip = AudioSystem.Instance.ResourceLoader.LoadSync($"Audios/{audioObject.Name[clipIndex]}"); + AudioClip clip = + AudioSystem.Instance.ResourceLoader.LoadSync( + $"{AudioExtendSettings.Instance.audioResourcePath}/{audioObject.Name[clipIndex]}"); if (!clip) { Debug.LogError($"音频文件未找到:{audioObject.Name[clipIndex]}"); diff --git a/Assets/Settings/AudioExtendSettings.asset b/Assets/Settings/AudioExtendSettings.asset new file mode 100644 index 0000000..110547a --- /dev/null +++ b/Assets/Settings/AudioExtendSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 79becf8778e048058fe7cc1f3a5e021b, type: 3} + m_Name: AudioExtendSettings + m_EditorClassIdentifier: + audioConfigPath: AudioData + audioResourcePath: Audios + audioMixerPath: Audios/Master + sfxGroupPath: Master/Regular/SFX + voiceGroupPath: Master/Regular/Voice + accentSfxGroupPath: Master/SFX_Accent + musicGroupPath: Master/Regular/Music + ambienceGroupPath: Master/Regular/SFX/Ambience + lowpassParamName: LowpassFreq + lowpassEnabledCutoff: 440 + lowpassDisabledCutoff: 22000 + lowpassTweenDuration: 0.2 + compressionFormat: 1 + sfxSampleRate: 22050 + musicSampleRate: 44100 + musicQuality: 0.13 + sfxQuality: 0.5 + decompressThreshold: 5 + streamingThreshold: 15 + defaultFadeOutEase: 2 + defaultFadeInEase: 3 diff --git a/Assets/Settings/AudioExtendSettings.asset.meta b/Assets/Settings/AudioExtendSettings.asset.meta new file mode 100644 index 0000000..f25606f --- /dev/null +++ b/Assets/Settings/AudioExtendSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de80878c933394e2da0966a1466fd793 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: