From 4e8a58fdef6575be30fed7683e8d376cbbfe3adc Mon Sep 17 00:00:00 2001
From: Han <1985708279@qq.com>
Date: Wed, 4 Jun 2025 14:57:54 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90a=E3=80=91=E5=BC=82=E6=AD=A5=E6=92=AD?=
=?UTF-8?q?=E6=94=BE=E8=AF=AD=E9=9F=B3=E6=B7=BB=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../04.AudioCore/RunTime/Abstract/IAudio.cs | 6 ++-
.../04.AudioCore/RunTime/Base/MusicPlayer.cs | 11 -----
Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs | 2 +-
.../04.AudioCore/RunTime/Base/VoicePlayer.cs | 44 ++++++++++++++++---
.../RunTime/Use/AudioCoreManager.cs | 17 +++++--
Assets/04.AudioCore/package.json | 2 +-
6 files changed, 59 insertions(+), 23 deletions(-)
diff --git a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
index 9e1c84d..90cb691 100644
--- a/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
+++ b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs
@@ -61,12 +61,16 @@ namespace Stary.Evo.AudioCore
void Stop(AudioData audioData);
+ void Stop();
+
}
public abstract class AbstractAudio : IAudio
{
public abstract void Play(AudioData audioData);
- public abstract void Stop(AudioData audioData);
+ public virtual void Stop(AudioData audioData){}
+
+ public virtual void Stop(){}
///
/// 音频数据初始化
diff --git a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
index affb413..b05d2a7 100644
--- a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs
@@ -57,8 +57,6 @@ namespace Stary.Evo.AudioCore
/// {[fadeDuration:自然过渡时间]}
public override void Stop(AudioData audioData)
{
- //audioData = AudioDataInitialize(audioData);
- //CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration));
FadeAllMusic();
}
@@ -151,15 +149,6 @@ namespace Stary.Evo.AudioCore
audioSource2 = null;
}
audioSourcePool.ReturnAudioSource("Music", source.gameObject);
-
- /*if (currentAudioSource == audioSource1)
- {
- audioSource2 = null;
- }
- else if (currentAudioSource == audioSource2)
- {
- audioSource1 = null;
- }*/
}
private void FadeAllMusic()
diff --git a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
index f816d4f..6674340 100644
--- a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs
@@ -46,7 +46,7 @@ namespace Stary.Evo.AudioCore
/// 停止所有音效
///
/// {[无可使用变量]}
- public override void Stop(AudioData audioData)
+ public override void Stop()
{
if (activeSources == null) return;
foreach (var source in activeSources)
diff --git a/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
index dcc8a13..5572423 100644
--- a/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
+++ b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs
@@ -1,4 +1,7 @@
-using System.Collections;
+using System;
+using System.Collections;
+using System.Threading;
+using System.Threading.Tasks;
using UnityEngine;
namespace Stary.Evo.AudioCore
@@ -8,7 +11,7 @@ namespace Stary.Evo.AudioCore
private AudioSourcePool audioSourcePool;
private AudioSource currentSource;
private Coroutine myCoroutine;
-
+ private CancellationTokenSource cancelTokenSource;
public VoicePlayer(AudioSourcePool audioSourcePool)
{
this.audioSourcePool = audioSourcePool;
@@ -21,8 +24,8 @@ namespace Stary.Evo.AudioCore
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}
public override void Play(AudioData audioData)
{
- // 停止当前正在播放的语音与旧协程
- Stop(new AudioData { });
+ // 停止当前正在播放的语音与旧协程,或旧异步
+ Stop();
audioData = AudioDataInitialize(audioData);
@@ -46,8 +49,9 @@ namespace Stary.Evo.AudioCore
/// 停止语音
///
/// /// {[无可使用变量]}
- public override void Stop(AudioData audioData)
+ public override void Stop()
{
+ // 停止当前协程
if (currentSource != null && currentSource.isPlaying)
{
currentSource.Stop();
@@ -58,8 +62,36 @@ namespace Stary.Evo.AudioCore
CoroutineHelper.StopCoroutine(myCoroutine);
myCoroutine = null;
}
-
}
+
+ // 停掉异步任务
+ if (cancelTokenSource != null && cancelTokenSource.IsCancellationRequested)
+ {
+ cancelTokenSource .Cancel();
+ cancelTokenSource.Dispose();
+ cancelTokenSource = null;
+ }
+ }
+
+ ///
+ /// 异步播放语音
+ ///
+ ///
+ ///
+ public async Task Play(AudioClip audioClip, float volume)
+ {
+ // 停止当前正在播放的语音与旧协程,或旧异步
+ Stop();
+
+ currentSource = audioSourcePool.GetAudioSource("Voice");
+ if (currentSource == null) return;
+
+ currentSource.clip = audioClip;
+ currentSource.volume = volume;
+ currentSource.Play();
+
+ cancelTokenSource = new CancellationTokenSource();
+ await Task.Delay(TimeSpan.FromSeconds(audioClip.length),cancelTokenSource.Token);
}
///
diff --git a/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
index c836877..15fefc1 100644
--- a/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
+++ b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs
@@ -1,6 +1,7 @@
using UnityEngine;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
+using System.Threading.Tasks;
namespace Stary.Evo.AudioCore
{
@@ -32,13 +33,23 @@ namespace Stary.Evo.AudioCore
Voice.Play(audioData);
}
+ ///
+ /// 异步播放语音
+ ///
+ ///
+ ///
+ ///
+ public static Task PlayVoice(AudioClip audioClip, float volume = 1f)
+ {
+ return Voice.Play(audioClip, volume);
+ }
+
///
/// 停止当前的语音
///
public static void StopVoice()
{
- AudioData audioData = new AudioData();
- Voice.Stop(audioData);
+ Voice.Stop();
}
#endregion
@@ -62,7 +73,7 @@ namespace Stary.Evo.AudioCore
public static void StopAllSFX()
{
AudioData audioData = new AudioData();
- SFX.Stop(audioData);
+ SFX.Stop();
}
#endregion
diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json
index 9e2afe4..461e96b 100644
--- a/Assets/04.AudioCore/package.json
+++ b/Assets/04.AudioCore/package.json
@@ -1,6 +1,6 @@
{
"name": "com.staryevo.audiocore",
- "version": "1.0.9",
+ "version": "1.0.10",
"displayName": "04.AudioCore",
"description": "音频播放工具",
"unity": "2021.3",