diff options
Diffstat (limited to 'src/audio/synth.cc')
| -rw-r--r-- | src/audio/synth.cc | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/audio/synth.cc b/src/audio/synth.cc index b4aaf53..db5a96c 100644 --- a/src/audio/synth.cc +++ b/src/audio/synth.cc @@ -23,12 +23,12 @@ struct Voice { float time_domain_buffer[DCT_SIZE]; int buffer_pos; - const volatile float *active_spectral_data; + const volatile float* active_spectral_data; }; static struct { Spectrogram spectrograms[MAX_SPECTROGRAMS]; - const volatile float *active_spectrogram_data[MAX_SPECTROGRAMS]; + const volatile float* active_spectrogram_data[MAX_SPECTROGRAMS]; bool spectrogram_registered[MAX_SPECTROGRAMS]; } g_synth_data; @@ -49,7 +49,7 @@ void synth_shutdown() { // Nothing to do here since we are not allocating memory } -int synth_register_spectrogram(const Spectrogram *spec) { +int synth_register_spectrogram(const Spectrogram* spec) { for (int i = 0; i < MAX_SPECTROGRAMS; ++i) { if (!g_synth_data.spectrogram_registered[i]) { g_synth_data.spectrograms[i] = *spec; @@ -67,19 +67,19 @@ void synth_unregister_spectrogram(int spectrogram_id) { } } -float *synth_begin_update(int spectrogram_id) { +float* synth_begin_update(int spectrogram_id) { if (spectrogram_id < 0 || spectrogram_id >= MAX_SPECTROGRAMS || !g_synth_data.spectrogram_registered[spectrogram_id]) { return nullptr; } - const volatile float *active_ptr = + const volatile float* active_ptr = g_synth_data.active_spectrogram_data[spectrogram_id]; if (active_ptr == g_synth_data.spectrograms[spectrogram_id].spectral_data_a) { - return (float *)(g_synth_data.spectrograms[spectrogram_id].spectral_data_b); + return (float*)(g_synth_data.spectrograms[spectrogram_id].spectral_data_b); } else { - return (float *)(g_synth_data.spectrograms[spectrogram_id].spectral_data_a); + return (float*)(g_synth_data.spectrograms[spectrogram_id].spectral_data_a); } } @@ -89,9 +89,9 @@ void synth_commit_update(int spectrogram_id) { return; } - const volatile float *old_active_ptr = + const volatile float* old_active_ptr = g_synth_data.active_spectrogram_data[spectrogram_id]; - const float *new_active_ptr = + const float* new_active_ptr = (old_active_ptr == g_synth_data.spectrograms[spectrogram_id].spectral_data_a) ? g_synth_data.spectrograms[spectrogram_id].spectral_data_b @@ -99,7 +99,7 @@ void synth_commit_update(int spectrogram_id) { // Atomic swap using GCC/Clang builtins for thread safety __atomic_store_n( - (const float **)&g_synth_data.active_spectrogram_data[spectrogram_id], + (const float**)&g_synth_data.active_spectrogram_data[spectrogram_id], new_active_ptr, __ATOMIC_RELEASE); } @@ -111,7 +111,7 @@ void synth_trigger_voice(int spectrogram_id, float volume, float pan) { for (int i = 0; i < MAX_VOICES; ++i) { if (!g_voices[i].active) { - Voice &v = g_voices[i]; + Voice& v = g_voices[i]; v.active = true; v.spectrogram_id = spectrogram_id; v.volume = volume; @@ -132,7 +132,7 @@ void synth_trigger_voice(int spectrogram_id, float volume, float pan) { } } -void synth_render(float *output_buffer, int num_frames) { +void synth_render(float* output_buffer, int num_frames) { // Use the pre-calculated window // float window[WINDOW_SIZE]; // hamming_window_512(window); @@ -145,8 +145,9 @@ void synth_render(float *output_buffer, int num_frames) { float right_sample = 0.0f; for (int v_idx = 0; v_idx < MAX_VOICES; ++v_idx) { - Voice &v = g_voices[v_idx]; - if (!v.active) continue; + Voice& v = g_voices[v_idx]; + if (!v.active) + continue; if (v.buffer_pos >= DCT_SIZE) { if (v.current_spectral_frame >= v.total_spectral_frames) { @@ -158,7 +159,7 @@ void synth_render(float *output_buffer, int num_frames) { v.active_spectral_data = g_synth_data.active_spectrogram_data[v.spectrogram_id]; - const float *spectral_frame = (const float *)v.active_spectral_data + + const float* spectral_frame = (const float*)v.active_spectral_data + (v.current_spectral_frame * DCT_SIZE); float windowed_frame[DCT_SIZE]; @@ -170,7 +171,7 @@ void synth_render(float *output_buffer, int num_frames) { idct_512(windowed_frame, v.time_domain_buffer); v.buffer_pos = 0; - v.current_spectral_frame++; + ++v.current_spectral_frame; } float voice_sample = v.time_domain_buffer[v.buffer_pos] * v.volume; @@ -192,9 +193,13 @@ void synth_render(float *output_buffer, int num_frames) { int synth_get_active_voice_count() { int count = 0; for (int i = 0; i < MAX_VOICES; ++i) { - if (g_voices[i].active) { count++; } + if (g_voices[i].active) { + ++count; + } } return count; } -float synth_get_output_peak() { return g_current_output_peak; } +float synth_get_output_peak() { + return g_current_output_peak; +} |
