aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2021-07-29 01:19:03 +0200
committerArisotura <thetotalworm@gmail.com>2021-07-29 01:19:03 +0200
commitaaa97c924237f60aabfe9e24f2bc6f6cee888da7 (patch)
tree53bdb2ddc8545b80b912077b13cb2e357e1d1af1 /src
parent9ee2017443a159abfb93c31f5f2884cb4f264a45 (diff)
only open microphone when actually needed. fixes #1165
Diffstat (limited to 'src')
-rw-r--r--src/frontend/qt_sdl/main.cpp66
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);