diff options
author | Arisotura <thetotalworm@gmail.com> | 2021-07-29 01:19:03 +0200 |
---|---|---|
committer | Arisotura <thetotalworm@gmail.com> | 2021-07-29 01:19:03 +0200 |
commit | aaa97c924237f60aabfe9e24f2bc6f6cee888da7 (patch) | |
tree | 53bdb2ddc8545b80b912077b13cb2e357e1d1af1 /src | |
parent | 9ee2017443a159abfb93c31f5f2884cb4f264a45 (diff) |
only open microphone when actually needed. fixes #1165
Diffstat (limited to 'src')
-rw-r--r-- | src/frontend/qt_sdl/main.cpp | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp index d7751b7..01e5e75 100644 --- a/src/frontend/qt_sdl/main.cpp +++ b/src/frontend/qt_sdl/main.cpp @@ -106,6 +106,8 @@ u32 micExtBufferWritePos; u32 micWavLength; s16* micWavBuffer; +void micCallback(void* data, Uint8* stream, int len); + void audioCallback(void* data, Uint8* stream, int len) { @@ -143,6 +145,40 @@ void audioCallback(void* data, Uint8* stream, int len) } +void micOpen() +{ + if (Config::MicInputType != 1) + { + micDevice = 0; + return; + } + + SDL_AudioSpec whatIwant, whatIget; + memset(&whatIwant, 0, sizeof(SDL_AudioSpec)); + whatIwant.freq = 44100; + whatIwant.format = AUDIO_S16LSB; + whatIwant.channels = 1; + whatIwant.samples = 1024; + whatIwant.callback = micCallback; + micDevice = SDL_OpenAudioDevice(NULL, 1, &whatIwant, &whatIget, 0); + if (!micDevice) + { + printf("Mic init failed: %s\n", SDL_GetError()); + } + else + { + SDL_PauseAudioDevice(micDevice, 0); + } +} + +void micClose() +{ + if (micDevice) + SDL_CloseAudioDevice(micDevice); + + micDevice = 0; +} + void micLoadWav(const char* name) { SDL_AudioSpec format; @@ -623,7 +659,7 @@ void EmuThread::emuRun() // checkme emit windowEmuStart(); if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0); - if (micDevice) SDL_PauseAudioDevice(micDevice, 0); + micOpen(); } void EmuThread::emuPause() @@ -636,7 +672,7 @@ void EmuThread::emuPause() while (EmuStatus != 2); if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1); - if (micDevice) SDL_PauseAudioDevice(micDevice, 1); + micClose(); } void EmuThread::emuUnpause() @@ -649,7 +685,7 @@ void EmuThread::emuUnpause() EmuRunning = PrevEmuStatus; if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0); - if (micDevice) SDL_PauseAudioDevice(micDevice, 0); + micOpen(); } void EmuThread::emuStop() @@ -658,7 +694,7 @@ void EmuThread::emuStop() EmuPause = 0; if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1); - if (micDevice) SDL_PauseAudioDevice(micDevice, 1); + micClose(); } void EmuThread::emuFrameStep() @@ -2393,6 +2429,8 @@ void MainWindow::onOpenAudioSettings() void MainWindow::onAudioSettingsFinished(int res) { + micClose(); + if (Config::MicInputType == 3) { micLoadWav(Config::MicWavPath); @@ -2408,6 +2446,8 @@ void MainWindow::onAudioSettingsFinished(int res) else Frontend::Mic_SetExternalBuffer(NULL, 0); } + + micOpen(); } void MainWindow::onOpenWifiSettings() @@ -2751,21 +2791,7 @@ int main(int argc, char** argv) SDL_PauseAudioDevice(audioDevice, 1); } - memset(&whatIwant, 0, sizeof(SDL_AudioSpec)); - whatIwant.freq = 44100; - whatIwant.format = AUDIO_S16LSB; - whatIwant.channels = 1; - whatIwant.samples = 1024; - whatIwant.callback = micCallback; - micDevice = SDL_OpenAudioDevice(NULL, 1, &whatIwant, &whatIget, 0); - if (!micDevice) - { - printf("Mic init failed: %s\n", SDL_GetError()); - } - else - { - SDL_PauseAudioDevice(micDevice, 1); - } + micDevice = 0; memset(micExtBuffer, 0, sizeof(micExtBuffer)); @@ -2836,7 +2862,7 @@ int main(int argc, char** argv) Frontend::DeInit_ROM(); if (audioDevice) SDL_CloseAudioDevice(audioDevice); - if (micDevice) SDL_CloseAudioDevice(micDevice); + micClose(); SDL_DestroyCond(audioSync); SDL_DestroyMutex(audioSyncLock); |