From fa0071e7853eee864039f508126a0473767b60fa Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 12 Feb 2023 05:30:58 -0800 Subject: [PATCH] sdl/new_sound.cpp: record audio with AVRecorder --- src/i_sound.h | 4 ++++ src/m_avrecorder.cpp | 4 ++++ src/sdl/new_sound.cpp | 14 ++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/i_sound.h b/src/i_sound.h index cacb96923..7df4b5346 100644 --- a/src/i_sound.h +++ b/src/i_sound.h @@ -55,6 +55,10 @@ void I_StartupSound(void); */ void I_ShutdownSound(void); +/** \brief Update instance of AVRecorder for audio capture. +*/ +void I_UpdateAudioRecorder(void); + /// ------------------------ /// SFX I/O /// ------------------------ diff --git a/src/m_avrecorder.cpp b/src/m_avrecorder.cpp index de43b21fe..46fdb7f39 100644 --- a/src/m_avrecorder.cpp +++ b/src/m_avrecorder.cpp @@ -171,6 +171,8 @@ boolean M_AVRecorder_Open(const char* filename) g_av_recorder = std::make_shared(cfg); + I_UpdateAudioRecorder(); + return true; } catch (const std::exception& ex) @@ -183,6 +185,8 @@ boolean M_AVRecorder_Open(const char* filename) void M_AVRecorder_Close(void) { g_av_recorder.reset(); + + I_UpdateAudioRecorder(); } const char* M_AVRecorder_GetFileExtension(void) diff --git a/src/sdl/new_sound.cpp b/src/sdl/new_sound.cpp index 49e739588..228985c83 100644 --- a/src/sdl/new_sound.cpp +++ b/src/sdl/new_sound.cpp @@ -21,6 +21,7 @@ #include "../audio/sound_effect_player.hpp" #include "../cxxutil.hpp" #include "../io/streams.hpp" +#include "../m_avrecorder.hpp" #include "../doomdef.h" #include "../i_sound.h" @@ -57,6 +58,8 @@ static shared_ptr> gain_music; static vector> sound_effect_channels; +static shared_ptr av_recorder; + static void (*music_fade_callback)(); void* I_GetSfx(sfxinfo_t* sfx) @@ -135,6 +138,9 @@ void audio_callback(void* userdata, Uint8* buffer, int len) std::clamp(float_buffer[i].amplitudes[1], -1.f, 1.f), }; } + + if (av_recorder) + av_recorder->push_audio_samples(tcb::span {float_buffer, float_len}); } catch (...) { @@ -749,3 +755,11 @@ boolean I_FadeInPlaySong(UINT32 ms, boolean looping) else return false; } + +void I_UpdateAudioRecorder(void) +{ + // must be locked since av_recorder is used by audio_callback + SdlAudioLockHandle _; + + av_recorder = g_av_recorder; +}