feat(audio): add underwater low-pass filter effect

This commit is contained in:
2026-07-08 10:51:12 +08:00
parent 85761dee8f
commit 61a9fdac32
10 changed files with 114 additions and 4 deletions

View File

@@ -35,6 +35,8 @@ public:
void update();
void reload_config();
void underwater_change(bool underwater);
float& bgm_target_volume();
private:
@@ -47,8 +49,10 @@ private:
FadeMap m_fade_map;
SoundManager m_sounds;
std::shared_ptr<SourcePool> m_pool;
bool m_efx_supported = false;
bool m_underwater = false;
float m_music_volume = 1.0f;
float m_sfx_volume = 1.0f;
std::unique_ptr<AudioFilter> m_low_pass_filter;
};
} // namespace Cubed

View File

@@ -0,0 +1,19 @@
#pragma once
#include <AL/al.h>
namespace Cubed {
class AudioFilter {
public:
AudioFilter();
AudioFilter(const AudioFilter&) = delete;
AudioFilter(AudioFilter&&) = delete;
AudioFilter& operator=(const AudioFilter&) = delete;
AudioFilter& operator=(AudioFilter&&) = delete;
~AudioFilter();
void set_lowpass(float gain, float gain_hf);
ALuint filter() const;
private:
ALuint m_filter = 0;
};
} // namespace Cubed

View File

@@ -1,5 +1,6 @@
#pragma once
#include "Cubed/audio/audio_buffer.hpp"
#include "Cubed/audio/audio_filter.hpp"
#include <AL/al.h>
#include <glm/glm.hpp>
@@ -34,6 +35,9 @@ public:
bool in_use() const;
void reset();
void set_filter(const AudioFilter& filter);
void clear_filter();
private:
ALuint m_source = 0;
float m_target_volume = 1.0f;

View File

@@ -16,6 +16,8 @@ public:
void update();
AudioSource* acquire();
std::vector<AudioSource>& sources();
};
} // namespace Cubed