Skip to content

Commit 4bfc9d6

Browse files
committed
Add procedural friction control and audio settings configuration
1 parent 3a4de6d commit 4bfc9d6

5 files changed

Lines changed: 20 additions & 8 deletions

File tree

include/weird-engine/Scene.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ namespace WeirdEngine
189189
const std::vector<WeirdRenderer::DrawCommand>& getDrawQueue() const;
190190
AudioRingBuffer<WeirdRenderer::SimpleAudioRequest, SOUND_QUEUE_SIZE>& getAudioQueue();
191191
float getFrictionSound();
192+
void setFrictionSound(float level)
193+
{
194+
m_frictionSoundLevelRead.store(level, std::memory_order_release);
195+
}
192196

193197
BackgroundParams& getBackground()
194198
{

include/weird-engine/services/ServiceProvider.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ namespace WeirdEngine
428428
struct AudioService
429429
{
430430
AudioRingBuffer<WeirdRenderer::SimpleAudioRequest, SOUND_QUEUE_SIZE>& queue;
431-
const std::atomic<float>& frictionSoundLevel;
431+
std::atomic<float>& frictionSoundLevel;
432432

433433
void playSound(const WeirdRenderer::SimpleAudioRequest& audio)
434434
{
@@ -440,6 +440,11 @@ namespace WeirdEngine
440440
return frictionSoundLevel.load(std::memory_order_acquire);
441441
}
442442

443+
void setFrictionSound(float level)
444+
{
445+
frictionSoundLevel.store(level, std::memory_order_release);
446+
}
447+
443448
AudioRingBuffer<WeirdRenderer::SimpleAudioRequest, SOUND_QUEUE_SIZE>& audioQueue()
444449
{
445450
return queue;

include/weird-renderer/audio/AudioEngine.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,17 @@ namespace WeirdEngine
7373

7474
AudioData getAudioData();
7575

76+
// Procedural control
77+
void setFrictionLevel(float level); // 0..1, continuous
78+
void playSineSound(float freq, float amp, float decaySec = 0.3f);
79+
7680
private:
7781
AudioEngine();
7882
ma_engine m_engine;
7983
ma_sound m_sound; // background music
8084

8185
bool m_mute;
86+
bool m_enableAmbient = true;
8287

8388
// Procedural state
8489
ma_noise m_noise;
@@ -99,10 +104,6 @@ namespace WeirdEngine
99104
// Visualizer
100105
std::mutex m_visualMutex;
101106
AudioData m_visualSnapshot;
102-
103-
// Procedural control
104-
void setFrictionLevel(float level); // 0..1, continuous
105-
void playSineSound(float freq, float amp, float decaySec = 0.3f);
106107
};
107108

108109
} // namespace WeirdRenderer

include/weird-renderer/audio/AudioSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace WeirdEngine
66
struct AudioSettings
77
{
88
bool mute = false;
9+
bool enableAmbient = true;
910
};
1011
} // namespace WeirdRenderer
1112
} // namespace WeirdEngine

src/weird-renderer/audio/AudioEngine.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ namespace WeirdEngine
4040
bool AudioEngine::init(const AudioSettings& settings)
4141
{
4242
m_mute = settings.mute;
43+
m_enableAmbient = settings.enableAmbient;
4344
ma_result result;
4445
ma_engine_config engineConfig = ma_engine_config_init();
4546
engineConfig.noDevice = MA_TRUE;
@@ -220,7 +221,7 @@ namespace WeirdEngine
220221
}
221222
previousFrameTime = time;
222223

223-
if (audioQueue.empty())
224+
if (m_enableAmbient && audioQueue.empty())
224225
{
225226
// Fade fill music in
226227
currentAmbientVolume =
@@ -438,13 +439,13 @@ namespace WeirdEngine
438439
ma_engine_read_pcm_frames(&audio->m_engine, mix.data(), framesToWrite, NULL);
439440

440441
// --- 2. Friction noise ---
441-
audio->m_smoothedFriction += (audio->m_frictionLevel - audio->m_smoothedFriction) * 0.05f;
442+
audio->m_smoothedFriction += (audio->m_frictionLevel - audio->m_smoothedFriction) * 0.10f;
442443
if (audio->m_smoothedFriction > 0.0001f)
443444
{
444445
ma_noise_read_pcm_frames(&audio->m_noise, temp.data(), framesToWrite, NULL);
445446
for (ma_uint32 i = 0; i < framesToWrite * CHANNELS; ++i)
446447
{
447-
mix[i] += temp[i] * audio->m_smoothedFriction * 0.4f;
448+
mix[i] += temp[i] * audio->m_smoothedFriction * 0.45f;
448449
}
449450
}
450451

0 commit comments

Comments
 (0)