feat(audio): add pitch control to audio sources

Implement set_pitch method that clamps pitch between 0.0 and 1.0 and applies it via AL_PITCH. Includes minor whitespace cleanup in audio_engine.cpp.
This commit is contained in:
2026-07-08 11:03:10 +08:00
parent 61a9fdac32
commit 44f83142ed
3 changed files with 9 additions and 1 deletions

View File

@@ -17,7 +17,7 @@ public:
void set_buffer_3d(const AudioBuffer& buffer, const glm::vec3& vec3); void set_buffer_3d(const AudioBuffer& buffer, const glm::vec3& vec3);
void set_loop(bool on = true); void set_loop(bool on = true);
void set_volume(float volume); void set_volume(float volume);
void set_pitch(float pitch);
void play(); void play();
void play_2d(const AudioBuffer& buffer); void play_2d(const AudioBuffer& buffer);
void play_3d(const AudioBuffer& buffer, const glm::vec3& pos); void play_3d(const AudioBuffer& buffer, const glm::vec3& pos);

View File

@@ -6,6 +6,7 @@
#include "Cubed/tools/log.hpp" #include "Cubed/tools/log.hpp"
#include <stdexcept> #include <stdexcept>
namespace Cubed { namespace Cubed {
AudioEngine::AudioEngine() {}; AudioEngine::AudioEngine() {};
@@ -194,12 +195,14 @@ void AudioEngine::underwater_change(bool underwater) {
for (auto& source : m_pool->sources()) { for (auto& source : m_pool->sources()) {
if (m_underwater) { if (m_underwater) {
source.set_filter(*m_low_pass_filter); source.set_filter(*m_low_pass_filter);
} else { } else {
source.clear_filter(); source.clear_filter();
} }
} }
if (underwater) { if (underwater) {
m_bgm->set_filter(*m_low_pass_filter); m_bgm->set_filter(*m_low_pass_filter);
} else { } else {
m_bgm->clear_filter(); m_bgm->clear_filter();
} }

View File

@@ -74,6 +74,11 @@ void AudioSource::set_volume(float volume) {
alSourcef(m_source, AL_GAIN, volume); alSourcef(m_source, AL_GAIN, volume);
} }
void AudioSource::set_pitch(float pitch) {
pitch = std::clamp(pitch, 0.0f, 1.0f);
alSourcef(m_source, AL_PITCH, pitch);
}
void AudioSource::play() { alSourcePlay(m_source); } void AudioSource::play() { alSourcePlay(m_source); }
void AudioSource::play_2d(const AudioBuffer& buffer) { void AudioSource::play_2d(const AudioBuffer& buffer) {