AudioSystemNoMixer

This commit is contained in:
ThomasCharester committed 2026-01-27 12:33:40 +03:00
1 parent 72af9520df
commit 0f46c63b5d
50 files changed
+975 -50

No files matched your search

@@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Threading;
using Code.Infrastructure.EventBus;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Code.Infrastructure.Audio
@@ -8,6 +10,13 @@ namespace Code.Infrastructure.Audio
{
AudioClip GetClip(AudioNames groupName, int id);
void PlayTest();
UniTaskVoid PlayOneShot(AudioNames groupName, int id, Vector3 position = new Vector3(),
AudioSourceType sourceType = AudioSourceType.NoBlend,
AudioSource audioSource = null);
UniTaskVoid PlayRepeatedly(AudioNames groupName, int id,
CancellationTokenSource cancellationTokenSource, AudioSourceType sourceType = AudioSourceType.NoBlend, AudioSource audioSource = null);
}
public class AudioService : IAudioClipsEventHandle, IAudioService
@@ -33,12 +42,54 @@ namespace Code.Infrastructure.Audio
{
_pool.GetSource(AudioSourceType.NoBlend).PlayOneShot(GetClip(AudioNames.UISounds, 0));
}
public async UniTaskVoid PlayOneShot(AudioNames groupName, int id, Vector3 position = new Vector3(),
AudioSourceType sourceType = AudioSourceType.NoBlend,
AudioSource audioSource = null)
{
if (!audioSource) audioSource = _pool.GetSource(sourceType);
audioSource.transform.position = position;
audioSource.PlayOneShot(GetClip(groupName, id));
await UniTask.NextFrame();
await UniTask.WaitUntilValueChanged(audioSource, _ => !audioSource.isPlaying);
_pool.ReleaseSource(audioSource);
}
public async UniTaskVoid PlayRepeatedly(AudioNames groupName, int id,
CancellationTokenSource cancellationTokenSource, AudioSourceType sourceType = AudioSourceType.NoBlend, AudioSource audioSource = null)
{
if (!audioSource) audioSource = _pool.GetSource(sourceType);
if(!audioSource.resource) audioSource.resource = GetClip(groupName, id);
audioSource.Play();
await UniTask.NextFrame();
var (isCanceled, _) = await UniTask.WaitUntilValueChanged(audioSource,
_ => !audioSource.isPlaying,
cancellationToken: cancellationTokenSource.Token).SuppressCancellationThrow();
UnityEngine.Debug.LogError("Music skipping");
if (isCanceled)
{
cancellationTokenSource.Dispose();
_pool.ReleaseSource(audioSource);
return;
}
PlayRepeatedly(groupName, id, cancellationTokenSource, sourceType, audioSource).Forget();
}
public AudioClip GetClip(AudioNames groupName, int id) => _audioClips[groupName][id];
public void AudioClipsLoaded(AudioNames groupname, Dictionary<int, AudioClip> clips)
{
_audioClips[groupname] = clips;
_eventBus.RaiseEvent<IReadyToPlayHandle>(x=> x.OnReadyToPlay(groupname));
_eventBus.RaiseEvent<IReadyToPlayHandle>(x => x.OnReadyToPlay(groupname));
}
public void AudioClipsUnLoaded(AudioNames groupName)