Newer
Older
DungeonShooting / DungeonShooting_Godot / src / manager / SoundManager.cs
using System;
using Godot;

/// <summary>
/// 音频总线 区分不同的声音 添加声音效果 目前只有背景音乐 和音效 两个bus
/// </summary>
public enum BUS
{
    BGM = 0,
    SFX = 1
}

/// <summary>
/// 声音管理 背景音乐管理 音效
/// </summary>
public class SoundManager
{
    public static SoundManager Instance { get => SingleTon.singleTon; }

    private static class SingleTon
    {
        internal static SoundManager singleTon = new SoundManager();
    }

    private static AudioStreamPlayer audioStreamPlayer = new AudioStreamPlayer();


    /// <summary>
    /// 背景音乐路径
    /// </summary>
    public static string BGMPath = "res://resource/sound/bgm/";
    /// <summary>
    /// 音效路径
    /// </summary>
    public static string SFXPath = "res://resource/sound/sfx/";

    /// <summary>
    /// 播放声音 用于bgm
    /// </summary>
    /// <param name="soundPath">bgm名字 在resource/sound/bgm/目录下</param>
    /// <param name="node">需要播放声音得节点 将成为音频播放节点的父节点</param>
    /// <param name="volume">音量</param>
    public static void PlayeMusic(string soundName, Node node, float volume)
    {
        AudioStream sound = ResourceManager.Load<AudioStream>(BGMPath + soundName);
        if (sound != null)
        {
            AudioStreamPlayer soundNode = new AudioStreamPlayer();
            node.AddChild(soundNode);
            soundNode.Stream = sound;
            soundNode.Bus = Enum.GetName(typeof(BUS), 0);
            soundNode.VolumeDb = volume;
            soundNode.Play();
        }
        else
        {
            GD.Print("没有这个资源!!!");
        }
    }
    /// <summary>
    /// 添加并播放音效 用于音效
    /// </summary>
    /// <param name="soundName">音效文件名字 在resource/sound/sfx/目录下</param>
    /// <param name="node">需要播放声音得节点 将成为音频播放节点的父节点</param>
    /// <param name="volume">音量</param>
    public static void PlaySoundEffect(string soundName, Node node, float volume = 0f)
    {
        AudioStream sound = ResourceManager.Load<AudioStream>(SFXPath + soundName);
        if (sound != null)
        {
            AudioStreamPlayer soundNode = new AudioStreamPlayer();
            node.AddChild(soundNode);
            soundNode.Stream = sound;
            soundNode.Bus = Enum.GetName(typeof(BUS), 1);
            soundNode.VolumeDb = volume;
            soundNode.Play();
            GD.Print("bus:", soundNode.Bus);
        }
        else
        {
            GD.Print("没有这个资源!!!");
        }
    }
}