NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/Audio/AudioManager.cs

215 lines
5.4 KiB
C#

using System;
using CriWare;
using CriWare.Assets;
using Cysharp.Threading.Tasks;
using PhxhSDK;
using UnityEngine;
public class AudioManager: Singlenton<AudioManager>, 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<int> PlayAudio(string key, GameObject posObj = null)
{
if (DisableAudio) return 0;
return await _audioMgrObj.PlayAudio(key, posObj);
}
public async UniTask<int> PlayAudio(string key, Vector3 pos)
{
if (DisableAudio) return 0;
return await _audioMgrObj.PlayAudio(key, pos);
}
public async UniTask<int> PlayAudio(int id, GameObject posObj = null)
{
if (DisableAudio) return 0;
return await _audioMgrObj.PlayAudio(id, posObj);
}
public async UniTask<int> PlayAudio(int id, Vector3 pos)
{
if (DisableAudio) return 0;
DebugUtil.Log("Test");
return await _audioMgrObj.PlayAudio(id, pos);
}
public async UniTask<int> PlayAlbum(string key, GameObject posObj = null)
{
if (DisableAudio) return 0;
return await _audioMgrObj.PlayAlbum(posObj, key);
}
public async UniTask<int> 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();
}
/// <summary>
/// 注册音频分析器的对音频挂接的监听
/// </summary>
/// <returns></returns>
public CriAtomExOutputAnalyzer RegisterAnalyzer()//CriAtomExOutputAnalyzer criAtomExOutputAnalyzer
{
if (DisableAudio) return null;
return _audioMgrObj.RegisterAnalyzer();//criAtomExOutputAnalyzer
}
/// <summary>
/// 取消音频分析器对挂接的监听
/// </summary>
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);
}
}