feat(audio): 添加多种音频播放类型和音量控制方法

- 新增PlaySfx、PlayVoice和PlayAmbient方法用于播放不同类型音频
- 为音乐、音效、语音和环境音效添加独立的音量设置与获取接口
- 扩展IAudioManagerSystem接口以支持新的音频控制功能
- 在AbstractAudioManagerSystem中实现新增的音频播放逻辑
- 提供GetMusicVolume、GetSoundVolume等获取当前音量的方法
- [no tag]
This commit is contained in:
GeWuYou 2025-12-17 13:04:44 +08:00
parent 396cc589bc
commit b7739dd1df
2 changed files with 189 additions and 0 deletions

View File

@ -203,6 +203,63 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
player.Play();
}
/// <summary>
/// 播放特效音效
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
public virtual void PlaySfx(string audioPath, float volume = 1.0f, float pitch = 1.0f)
{
if (AvailableSoundPlayers.Count == 0) return;
var audioStream = ResourceLoadSystem?.LoadResource<AudioStream>(audioPath);
if (audioStream == null) return;
var player = AvailableSoundPlayers.Dequeue();
player.Stream = audioStream;
player.VolumeDb = LinearToDb(volume * SfxVolume * MasterVolume);
player.Play();
}
/// <summary>
/// 播放语音
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
public virtual void PlayVoice(string audioPath, float volume = 1.0f, float pitch = 1.0f)
{
if (AvailableSoundPlayers.Count == 0) return;
var audioStream = ResourceLoadSystem?.LoadResource<AudioStream>(audioPath);
if (audioStream == null) return;
var player = AvailableSoundPlayers.Dequeue();
player.Stream = audioStream;
player.VolumeDb = LinearToDb(volume * VoiceVolume * MasterVolume);
player.Play();
}
/// <summary>
/// 播放环境音效
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
public virtual void PlayAmbient(string audioPath, float volume = 1.0f, float pitch = 1.0f)
{
if (AvailableSoundPlayers.Count == 0) return;
var audioStream = ResourceLoadSystem?.LoadResource<AudioStream>(audioPath);
if (audioStream == null) return;
var player = AvailableSoundPlayers.Dequeue();
player.Stream = audioStream;
player.VolumeDb = LinearToDb(volume * AmbientVolume * MasterVolume);
player.Play();
}
/// <summary>
/// 通过资源ID播放音效
/// </summary>
@ -272,6 +329,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
MusicPlayer.VolumeDb = LinearToDb(MusicVolume * MasterVolume);
}
}
/// <summary>
/// 获取背景音乐音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetMusicVolume()
{
return MusicVolume;
}
/// <summary>
/// 设置音效音量
@ -281,6 +347,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
{
SoundVolume = volume;
}
/// <summary>
/// 获取音效音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetSoundVolume()
{
return SoundVolume;
}
/// <summary>
/// 设置主音量
@ -296,6 +371,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
MusicPlayer.VolumeDb = LinearToDb(MusicVolume * MasterVolume);
}
}
/// <summary>
/// 获取主音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetMasterVolume()
{
return MasterVolume;
}
/// <summary>
/// 设置SFX音量
@ -305,6 +389,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
{
SfxVolume = volume;
}
/// <summary>
/// 获取SFX音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetSfxVolume()
{
return SfxVolume;
}
/// <summary>
/// 设置语音音量
@ -314,6 +407,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
{
VoiceVolume = volume;
}
/// <summary>
/// 获取语音音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetVoiceVolume()
{
return VoiceVolume;
}
/// <summary>
/// 设置环境音量
@ -323,6 +425,15 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
{
AmbientVolume = volume;
}
/// <summary>
/// 获取环境音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
public virtual float GetAmbientVolume()
{
return AmbientVolume;
}
/// <summary>
/// 检查背景音乐是否正在播放

View File

@ -24,6 +24,30 @@ public interface IAudioManagerSystem : ISystem
/// <param name="pitch">音调调整</param>
void PlaySound(string audioPath, float volume = 1.0f, float pitch = 1.0f);
/// <summary>
/// 播放特效音效
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
void PlaySfx(string audioPath, float volume = 1.0f, float pitch = 1.0f);
/// <summary>
/// 播放语音
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
void PlayVoice(string audioPath, float volume = 1.0f, float pitch = 1.0f);
/// <summary>
/// 播放环境音效
/// </summary>
/// <param name="audioPath">音频文件路径</param>
/// <param name="volume">音量大小范围0-1</param>
/// <param name="pitch">音调调整</param>
void PlayAmbient(string audioPath, float volume = 1.0f, float pitch = 1.0f);
/// <summary>
/// 停止背景音乐
/// </summary>
@ -45,18 +69,72 @@ public interface IAudioManagerSystem : ISystem
/// <param name="volume">音量大小范围0-1</param>
void SetMusicVolume(float volume);
/// <summary>
/// 获取背景音乐音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetMusicVolume();
/// <summary>
/// 设置音效音量
/// </summary>
/// <param name="volume">音量大小范围0-1</param>
void SetSoundVolume(float volume);
/// <summary>
/// 获取音效音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetSoundVolume();
/// <summary>
/// 设置特效音量
/// </summary>
/// <param name="volume">音量大小范围0-1</param>
void SetSfxVolume(float volume);
/// <summary>
/// 获取特效音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetSfxVolume();
/// <summary>
/// 设置语音音量
/// </summary>
/// <param name="volume">音量大小范围0-1</param>
void SetVoiceVolume(float volume);
/// <summary>
/// 获取语音音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetVoiceVolume();
/// <summary>
/// 设置环境音量
/// </summary>
/// <param name="volume">音量大小范围0-1</param>
void SetAmbientVolume(float volume);
/// <summary>
/// 获取环境音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetAmbientVolume();
/// <summary>
/// 设置主音量
/// </summary>
/// <param name="volume">音量大小范围0-1</param>
void SetMasterVolume(float volume);
/// <summary>
/// 获取主音量
/// </summary>
/// <returns>音量大小范围0-1</returns>
float GetMasterVolume();
/// <summary>
/// 检查背景音乐是否正在播放
/// </summary>