sdl/new_sound.cpp: record audio with AVRecorder

This commit is contained in:
James R 2023-02-12 05:30:58 -08:00
parent c65f4ff893
commit fa0071e785
3 changed files with 22 additions and 0 deletions

View file

@ -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
/// ------------------------

View file

@ -171,6 +171,8 @@ boolean M_AVRecorder_Open(const char* filename)
g_av_recorder = std::make_shared<AVRecorder>(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)

View file

@ -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<2>> gain_music;
static vector<shared_ptr<SoundEffectPlayer>> sound_effect_channels;
static shared_ptr<srb2::media::AVRecorder> 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;
}