using System; using CriWare; using CriWare.Assets; using Cysharp.Threading.Tasks; using PhxhSDK; using UnityEngine; public class AudioManager: Singlenton, IStart, IInitable, IUpdatable, IAudioPlay { private AudioCriwareManager _audioMgrObj = new(); public GameObject initGameObject; public static bool DisableAudio = false; private bool isPlayingAlbum = false; public bool IsPlayingAlbum { get { return isPlayingAlbum; } set { isPlayingAlbum = value; } } public AudioCriwareManager AudioMgrObj { get { return _audioMgrObj; } } private void AfterSwitchCamera(bool isRegister = true) { if (isRegister) { CameraManager.Instance.AfterSwitchMainCamera += _audioMgrObj.AfterSwitchMainCamera; } else { CameraManager.Instance.AfterSwitchMainCamera -= _audioMgrObj.AfterSwitchMainCamera; } } public void Init() { _audioMgrObj.Init(); AfterSwitchCamera(); } public void Release() { _audioMgrObj.Release(); AfterSwitchCamera(false); } public void Start() { _audioMgrObj.Start(); initGameObject = _audioMgrObj.initGameObject; } public void Update(float dt) { _audioMgrObj.Update(dt); } public float GlobalVolume { get { return _audioMgrObj.GlobalVolume; } set { _audioMgrObj.GlobalVolume = value; } } public float GlobalMusicVolume { get { return _audioMgrObj.GlobalMusicVolume; } set { _audioMgrObj.GlobalMusicVolume = value; } } public float GlobalSoundsVolume { get { return _audioMgrObj.GlobalSoundsVolume; } set { _audioMgrObj.GlobalSoundsVolume = value; } } public bool GlobalIsSpeakOpen { get { return _audioMgrObj.GlobalIsOpenSpeak; } set { _audioMgrObj.GlobalIsOpenSpeak = value; } } public float GlobalSpeakVolume { get { return _audioMgrObj.GlobalSpeakVolume; } set { _audioMgrObj.GlobalSpeakVolume = value; } } public void SetMusicEnable(bool isEnable) { GlobalMusicVolume = isEnable ? 1 : 0; } public void SetSoundEnable(bool isEnable) { GlobalSoundsVolume = isEnable ? 1 : 0; } public async UniTask PlayAudio(string key, GameObject posObj = null) { if (DisableAudio) return 0; return await _audioMgrObj.PlayAudio(key, posObj); } public async UniTask PlayAudio(string key, Vector3 pos) { if (DisableAudio) return 0; return await _audioMgrObj.PlayAudio(key, pos); } public async UniTask PlayAudio(int id, GameObject posObj = null) { if (DisableAudio) return 0; return await _audioMgrObj.PlayAudio(id, posObj); } public async UniTask PlayAudio(int id, Vector3 pos) { if (DisableAudio) return 0; DebugUtil.Log("Test"); return await _audioMgrObj.PlayAudio(id, pos); } public async UniTask PlayAlbum(string key, GameObject posObj = null) { if (DisableAudio) return 0; return await _audioMgrObj.PlayAlbum(posObj, key); } public async UniTask PlayAlbum(int id, GameObject posObj = null) { if (DisableAudio) return 0; return await _audioMgrObj.PlayAlbum(posObj, ID: id); } public float GetAlbumProgress() { if (DisableAudio) return 0; return _audioMgrObj.GetAlbumProgress(); } public float GetAlbumLength(string musicKey) { if (DisableAudio) { DebugUtil.Log("GetAlbumLength DisableAudio"); return 0; } return _audioMgrObj.GetAlbumLength(musicKey); } public float GetAlbumLength(int musicID) { if (DisableAudio) return 0; return _audioMgrObj.GetAlbumLength(musicID); } public bool PauseAndResumeAlbum(bool pause) { if (DisableAudio) return false; return _audioMgrObj.PauseOrResumeAlbum(pause); } public void StopMusicById(int id) { if (DisableAudio) return; _audioMgrObj.StopMusicById(id); } public void PauseBackgroundMusic() { //TODO 暂停背景音乐 _audioMgrObj?.StopAllMusic(); } public void ResumeBackgroundMusic() { //TODO 恢复背景音乐 _audioMgrObj?.ResumeAllMusic(); } /// /// 注册音频分析器的对音频挂接的监听 /// /// public CriAtomExOutputAnalyzer RegisterAnalyzer()//CriAtomExOutputAnalyzer criAtomExOutputAnalyzer { if (DisableAudio) return null; return _audioMgrObj.RegisterAnalyzer();//criAtomExOutputAnalyzer } /// /// 取消音频分析器对挂接的监听 /// public void UnregisterAnalyzer()//CriAtomExOutputAnalyzer criAtomExOutputAnalyzer { if (DisableAudio) return; _audioMgrObj.UnregisterAnalyzer();//criAtomExOutputAnalyzer } public CriAtomExOutputAnalyzer GetAnalyzer() { return _audioMgrObj.analyzer; } public void StopAll() { _audioMgrObj.StopAll(); } public Audio GetAudioByID(AudioType audioType, int id) { if (DisableAudio) return null; return _audioMgrObj.GetAudioByID(audioType, id); } }