Merge branch 'eid/explicit-mic-device' into 'master'

Turn on and off microphone explicitly

See merge request kart-krew-dev/ring-racers-internal!2595
This commit is contained in:
Oni VelocitOni 2025-06-01 04:05:22 +00:00
commit 9397e07541
3 changed files with 36 additions and 18 deletions

View file

@ -281,7 +281,7 @@ shouldsign_t ShouldSignChallenge(uint8_t *message)
if ((max(now, then) - min(now, then)) > 60*15) if ((max(now, then) - min(now, then)) > 60*15)
return SIGN_BADTIME; return SIGN_BADTIME;
// ____ _____ ___ ____ _ // ____ _____ ___ ____ _
// / ___|_ _/ _ \| _ \| | // / ___|_ _/ _ \| _ \| |
// \___ \ | || | | | |_) | | // \___ \ | || | | | |_) | |
// ___) || || |_| | __/|_| // ___) || || |_| | __/|_|
@ -2436,6 +2436,11 @@ static void CL_ConnectToServer(void)
joinedIP[0] = '\0'; // And empty this for good measure regardless of whether or not we actually used it. joinedIP[0] = '\0'; // And empty this for good measure regardless of whether or not we actually used it.
// Enable sound input/microphone in netgames, activating the microphone device.
if (netgame)
{
S_SoundInputSetEnabled(true);
}
} }
static void Command_connect(void) static void Command_connect(void)
@ -2502,6 +2507,8 @@ static void Command_connect(void)
{ {
CONS_Alert(CONS_ERROR, M_GetText("There is no server identification with this network driver\n")); CONS_Alert(CONS_ERROR, M_GetText("There is no server identification with this network driver\n"));
D_CloseConnection(); D_CloseConnection();
S_SoundInputSetEnabled(false);
return; return;
} }
} }
@ -3659,6 +3666,7 @@ void D_QuitNetGame(void)
K_ClearClientPowerLevels(); K_ClearClientPowerLevels();
G_ObliterateParties(); G_ObliterateParties();
K_ResetMidVote(); K_ResetMidVote();
S_SoundInputSetEnabled(false);
DEBFILE("===========================================================================\n" DEBFILE("===========================================================================\n"
" Log finish\n" " Log finish\n"
@ -7376,9 +7384,6 @@ void NetVoiceUpdate(void)
return; return;
} }
// This necessarily runs every frame, not every tic
S_SoundInputSetEnabled(true);
UINT32 bytes_dequed = 0; UINT32 bytes_dequed = 0;
do do
{ {

View file

@ -72,6 +72,24 @@ static boolean input_routine(INT32)
return false; return false;
} }
static void init_routine(void)
{
if (!netgame)
{
S_SoundInputSetEnabled(true);
}
}
static boolean quit_routine(void)
{
if (!netgame)
{
S_SoundInputSetEnabled(false);
}
return true;
}
menu_t OPTIONS_VoiceDef = { menu_t OPTIONS_VoiceDef = {
sizeof (OPTIONS_Voice) / sizeof (menuitem_t), sizeof (OPTIONS_Voice) / sizeof (menuitem_t),
&OPTIONS_MainDef, &OPTIONS_MainDef,
@ -85,7 +103,7 @@ menu_t OPTIONS_VoiceDef = {
draw_routine, draw_routine,
M_DrawOptionsCogs, M_DrawOptionsCogs,
tick_routine, tick_routine,
NULL, init_routine,
NULL, quit_routine,
input_routine, input_routine,
}; };

View file

@ -198,7 +198,6 @@ static void (*music_fade_callback)();
static SDL_AudioDeviceID g_device_id; static SDL_AudioDeviceID g_device_id;
static SDL_AudioDeviceID g_input_device_id; static SDL_AudioDeviceID g_input_device_id;
static boolean g_input_device_paused;
void* I_GetSfx(sfxinfo_t* sfx) void* I_GetSfx(sfxinfo_t* sfx)
{ {
@ -999,14 +998,14 @@ void I_UpdateAudioRecorder(void)
boolean I_SoundInputIsEnabled(void) boolean I_SoundInputIsEnabled(void)
{ {
return g_input_device_id != 0 && !g_input_device_paused; return g_input_device_id != 0;
} }
boolean I_SoundInputSetEnabled(boolean enabled) boolean I_SoundInputSetEnabled(boolean enabled)
{ {
if (g_input_device_id == 0 && enabled) if (g_input_device_id == 0 && enabled)
{ {
if (SDL_GetNumAudioDevices(true) == 0) if (!sound_started || SDL_GetNumAudioDevices(true) == 0)
{ {
return false; return false;
} }
@ -1023,21 +1022,17 @@ boolean I_SoundInputSetEnabled(boolean enabled)
CONS_Alert(CONS_WARNING, "Failed to open input audio device: %s\n", SDL_GetError()); CONS_Alert(CONS_WARNING, "Failed to open input audio device: %s\n", SDL_GetError());
return false; return false;
} }
g_input_device_paused = true;
}
if (enabled && g_input_device_paused)
{
SDL_PauseAudioDevice(g_input_device_id, SDL_FALSE); SDL_PauseAudioDevice(g_input_device_id, SDL_FALSE);
g_input_device_paused = false;
} }
else if (!enabled && !g_input_device_paused) else if (g_input_device_id != 0 && !enabled)
{ {
SDL_PauseAudioDevice(g_input_device_id, SDL_TRUE); SDL_PauseAudioDevice(g_input_device_id, SDL_TRUE);
SDL_ClearQueuedAudio(g_input_device_id); SDL_ClearQueuedAudio(g_input_device_id);
g_input_device_paused = true; SDL_CloseAudioDevice(g_input_device_id);
g_input_device_id = 0;
} }
return !g_input_device_paused;
return enabled;
} }
UINT32 I_SoundInputDequeueSamples(void *data, UINT32 len) UINT32 I_SoundInputDequeueSamples(void *data, UINT32 len)