【a】异步播放语音添加

This commit is contained in:
Han
2025-06-04 14:57:54 +08:00
parent 615f12e69c
commit 4e8a58fdef
6 changed files with 59 additions and 23 deletions

View File

@@ -61,12 +61,16 @@ namespace Stary.Evo.AudioCore
void Stop(AudioData audioData); void Stop(AudioData audioData);
void Stop();
} }
public abstract class AbstractAudio : IAudio public abstract class AbstractAudio : IAudio
{ {
public abstract void Play(AudioData audioData); public abstract void Play(AudioData audioData);
public abstract void Stop(AudioData audioData); public virtual void Stop(AudioData audioData){}
public virtual void Stop(){}
/// <summary> /// <summary>
/// 音频数据初始化 /// 音频数据初始化

View File

@@ -57,8 +57,6 @@ namespace Stary.Evo.AudioCore
/// <param name="audioData">{[fadeDuration:自然过渡时间]}</param> /// <param name="audioData">{[fadeDuration:自然过渡时间]}</param>
public override void Stop(AudioData audioData) public override void Stop(AudioData audioData)
{ {
//audioData = AudioDataInitialize(audioData);
//CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration));
FadeAllMusic(); FadeAllMusic();
} }
@@ -151,15 +149,6 @@ namespace Stary.Evo.AudioCore
audioSource2 = null; audioSource2 = null;
} }
audioSourcePool.ReturnAudioSource("Music", source.gameObject); audioSourcePool.ReturnAudioSource("Music", source.gameObject);
/*if (currentAudioSource == audioSource1)
{
audioSource2 = null;
}
else if (currentAudioSource == audioSource2)
{
audioSource1 = null;
}*/
} }
private void FadeAllMusic() private void FadeAllMusic()

View File

@@ -46,7 +46,7 @@ namespace Stary.Evo.AudioCore
/// 停止所有音效 /// 停止所有音效
/// </summary> /// </summary>
/// <param name="audioData">{[无可使用变量]}</param> /// <param name="audioData">{[无可使用变量]}</param>
public override void Stop(AudioData audioData) public override void Stop()
{ {
if (activeSources == null) return; if (activeSources == null) return;
foreach (var source in activeSources) foreach (var source in activeSources)

View File

@@ -1,4 +1,7 @@
using System.Collections; using System;
using System.Collections;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
namespace Stary.Evo.AudioCore namespace Stary.Evo.AudioCore
@@ -8,7 +11,7 @@ namespace Stary.Evo.AudioCore
private AudioSourcePool audioSourcePool; private AudioSourcePool audioSourcePool;
private AudioSource currentSource; private AudioSource currentSource;
private Coroutine myCoroutine; private Coroutine myCoroutine;
private CancellationTokenSource cancelTokenSource;
public VoicePlayer(AudioSourcePool audioSourcePool) public VoicePlayer(AudioSourcePool audioSourcePool)
{ {
this.audioSourcePool = audioSourcePool; this.audioSourcePool = audioSourcePool;
@@ -21,8 +24,8 @@ namespace Stary.Evo.AudioCore
/// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param> /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]}</param>
public override void Play(AudioData audioData) public override void Play(AudioData audioData)
{ {
// 停止当前正在播放的语音与旧协程 // 停止当前正在播放的语音与旧协程,或旧异步
Stop(new AudioData { }); Stop();
audioData = AudioDataInitialize(audioData); audioData = AudioDataInitialize(audioData);
@@ -46,8 +49,9 @@ namespace Stary.Evo.AudioCore
/// 停止语音 /// 停止语音
/// </summary> /// </summary>
/// /// <param name="audioData">{[无可使用变量]}</param> /// /// <param name="audioData">{[无可使用变量]}</param>
public override void Stop(AudioData audioData) public override void Stop()
{ {
// 停止当前协程
if (currentSource != null && currentSource.isPlaying) if (currentSource != null && currentSource.isPlaying)
{ {
currentSource.Stop(); currentSource.Stop();
@@ -58,8 +62,36 @@ namespace Stary.Evo.AudioCore
CoroutineHelper.StopCoroutine(myCoroutine); CoroutineHelper.StopCoroutine(myCoroutine);
myCoroutine = null; myCoroutine = null;
} }
} }
// 停掉异步任务
if (cancelTokenSource != null && cancelTokenSource.IsCancellationRequested)
{
cancelTokenSource .Cancel();
cancelTokenSource.Dispose();
cancelTokenSource = null;
}
}
/// <summary>
/// 异步播放语音
/// </summary>
/// <param name="audioClip"></param>
/// <param name="volume"></param>
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);
} }
/// <summary> /// <summary>

View File

@@ -1,6 +1,7 @@
using UnityEngine; using UnityEngine;
using System.Collections.Generic; using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
namespace Stary.Evo.AudioCore namespace Stary.Evo.AudioCore
{ {
@@ -32,13 +33,23 @@ namespace Stary.Evo.AudioCore
Voice.Play(audioData); Voice.Play(audioData);
} }
/// <summary>
/// 异步播放语音
/// </summary>
/// <param name="audioClip"></param>
/// <param name="volume"></param>
/// <returns></returns>
public static Task PlayVoice(AudioClip audioClip, float volume = 1f)
{
return Voice.Play(audioClip, volume);
}
/// <summary> /// <summary>
/// 停止当前的语音 /// 停止当前的语音
/// </summary> /// </summary>
public static void StopVoice() public static void StopVoice()
{ {
AudioData audioData = new AudioData(); Voice.Stop();
Voice.Stop(audioData);
} }
#endregion #endregion
@@ -62,7 +73,7 @@ namespace Stary.Evo.AudioCore
public static void StopAllSFX() public static void StopAllSFX()
{ {
AudioData audioData = new AudioData(); AudioData audioData = new AudioData();
SFX.Stop(audioData); SFX.Stop();
} }
#endregion #endregion

View File

@@ -1,6 +1,6 @@
{ {
"name": "com.staryevo.audiocore", "name": "com.staryevo.audiocore",
"version": "1.0.9", "version": "1.0.10",
"displayName": "04.AudioCore", "displayName": "04.AudioCore",
"description": "音频播放工具", "description": "音频播放工具",
"unity": "2021.3", "unity": "2021.3",