using UnityEngine; using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Cysharp.Threading.Tasks; namespace Stary.Evo.AudioCore { public static class AudioCoreManager { private static IAudio Voice; private static IAudio SFX; private static MusicPlayer Music; private static IResources Resources; public static void Initialize(IResources resources) { // 初始化播放器 Resources = resources; Voice = new VoicePlayer(Resources); SFX = new SFXPlayer(Resources); Music = new MusicPlayer(Resources); } #region 语音 /// /// 播放语音 /// /// {[clip:音频], [volume:音量], /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间], /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], /// [audio3DMaxDistance:3D音频最大距离]} public static void PlayVoice(AudioData audioData) { if (Voice == null) { Debug.LogError("AudioCoreManager: Voice is null, please initialize it first."); return; } Voice?.Play(audioData); } /// /// 异步播放语音 /// /// {[clip:音频], [volume:音量], /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间], /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], /// [audio3DMaxDistance:3D音频最大距离], /// [cancellationToken:异步取消令牌]} /// public static UniTask PlayAsyncVoice(AudioData audioData) { if (Voice == null) { Debug.LogError("AudioCoreManager: Voice is null, please initialize it first."); return UniTask.CompletedTask; } return Voice.PlayAsync(audioData); } /// /// 停止当前的语音 /// public static void StopVoice() { if (Voice == null) { Debug.LogError("AudioCoreManager: Voice is null, please initialize it first."); return; } Voice.Stop(); } /// /// 停止当前的语音 /// public static async UniTask FadeOutVoice(float fadeDuration) { if (Voice == null) { Debug.LogError("AudioCoreManager: Voice is null, please initialize it first."); } await Voice.FadeOutMusic(Voice.GetAudioSource(), fadeDuration); Voice.Stop(); } #endregion #region 音效 /// /// 播放音效 /// /// {[clip:音频], [volume:音量], /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间], /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], /// [audio3DMaxDistance:3D音频最大距离]} public static void PlaySFX(AudioData audioData) { if (SFX == null) { Debug.LogError("AudioCoreManager: SFX is null, please initialize it first."); return; } SFX.Play(audioData); } /// /// 停止所有音效 /// public static void StopAllSFX() { if (SFX == null) { Debug.LogError("AudioCoreManager: SFX is null, please initialize it first."); return; } AudioData audioData = new AudioData(); SFX.Stop(); } #endregion #region 背景音乐 /// /// 播放背景音乐 /// /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间], /// [is3DAudio:是否3D音频], [audio3DPosition:3D音频位置], /// [audio3DMaxDistance:3D音频最大距离]} public static void PlayMusic(AudioData audioData) { if (Music == null) { Debug.LogError("AudioCoreManager: Music is null, please initialize it first."); return; } Music.Play(audioData); } /// /// Bgm设置自然过渡到指定音量 /// /// /// /// public static void SetMusicVolume(float fadeDuration, float targetVolume) { if (Music == null) { Debug.LogError("AudioCoreManager: Music is null, please initialize it first."); return; } Music.SetMusicVolume(fadeDuration, targetVolume); } /// /// 停止播放背景音乐 /// public static void StopMusic() { if (Music == null) { Debug.LogError("AudioCoreManager: Music is null, please initialize it first."); return; } Music.Stop(); } /// /// 停止播放背景音乐 /// /// 自然过渡时间 public static void FadeAllMusic(float fadeDuration = 1) { if (Music == null) { Debug.LogError("AudioCoreManager: Music is null, please initialize it first."); return; } Music.FadeAllMusic(fadeDuration); } #endregion /// /// 重新初始化 /// /// public static void Dispose() { StopVoice(); StopAllSFX(); StopMusic(); Voice = null; SFX = null; Music = null; } } }