From 6ad396e638e166e481a2446bf5ddef5c8b2c1a96 Mon Sep 17 00:00:00 2001 From: this-Aditya Date: Wed, 25 Sep 2024 15:21:02 +0530 Subject: [PATCH 1/2] Removed unnecessay log --- .../passive/phone/audio/input/utils/AudioDeviceUtils.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/utils/AudioDeviceUtils.kt b/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/utils/AudioDeviceUtils.kt index d796cab8..3292968b 100644 --- a/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/utils/AudioDeviceUtils.kt +++ b/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/utils/AudioDeviceUtils.kt @@ -47,9 +47,6 @@ object AudioDeviceUtils { microphones.add(device) logger.info("Devices found: $device") } - microphones.forEach { - logger.info("Name: ${it.productName}, type: ${it.type. toLogFriendlyType()}, encodings: ${it.encodings.joinToString(", ") { encoding -> AudioTypeFormatUtil.toLogFriendlyEncoding(encoding) }}, SampleRates: ${it.sampleRates.joinToString(", ") { srs-> srs.toString() }} channels: ${it.channelCounts.joinToString (", "){ channels -> channels.toString() }} Id: ${it.id}") - } } return microphones } From 13b1cde301612bdb6c32b3fbed3081324fc50112 Mon Sep 17 00:00:00 2001 From: this-Aditya Date: Wed, 25 Sep 2024 15:21:21 +0530 Subject: [PATCH 2/2] Corrected livedata observing --- .../audio/input/PhoneAudioInputManager.kt | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/PhoneAudioInputManager.kt b/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/PhoneAudioInputManager.kt index e07522a0..579abfbf 100644 --- a/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/PhoneAudioInputManager.kt +++ b/plugins/radar-android-phone-audio-input/src/main/java/org/radarbase/passive/phone/audio/input/PhoneAudioInputManager.kt @@ -34,6 +34,7 @@ import android.os.Looper import android.os.Process import android.widget.Toast import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer import org.radarbase.android.data.DataCache import org.radarbase.android.source.AbstractSourceManager import org.radarbase.android.source.SourceStatusListener @@ -98,6 +99,26 @@ class PhoneAudioInputManager(service: PhoneAudioInputService) : AbstractSourceMa @Volatile private var currentlyRecording: Boolean = false + private val connectedMicrophonesObserver: Observer> = Observer { connectedMicrophones -> + audioRecordingHandler.execute { + if (connectedMicrophones?.size == 0) { + logger.warn("No connected microphone") + } + if (state.microphonePrioritized && state.finalizedMicrophone.value !in connectedMicrophones) { + state.microphonePrioritized = false + logger.info("Microphone prioritized: false") + } + logger.info("PhoneAudioInputManager: Connected microphones: {}", + connectedMicrophones.map { it.productName }) + + if (!state.microphonePrioritized) { + connectedMicrophones.also(::runDeviceSelectionLogic) + } else { + state.finalizedMicrophone.value?.let(setPreferredDeviceAndUpdate) + } + } + } + init { name = service.getString(R.string.phone_audio_input_display_name) bitsPerSample = if (audioFormat == AudioFormat.ENCODING_PCM_16BIT) 16 else 8 @@ -239,25 +260,8 @@ class PhoneAudioInputManager(service: PhoneAudioInputService) : AbstractSourceMa } private fun observeMicrophones() { - state.connectedMicrophones.observe(service) { connectedMicrophones -> - audioRecordingHandler.execute { - if (connectedMicrophones?.size == 0) { - logger.warn("No connected microphone") - } - if (state.microphonePrioritized && state.finalizedMicrophone.value !in connectedMicrophones) { - state.microphonePrioritized = false - logger.info("Microphone prioritized: false") - } - logger.info( - "PhoneAudioInputManager: Connected microphones: {}", - connectedMicrophones.map { it.productName }) - - if (!state.microphonePrioritized) { - connectedMicrophones.also(::runDeviceSelectionLogic) - } else { - state.finalizedMicrophone.value?.let(setPreferredDeviceAndUpdate) - } - } + if (!state.connectedMicrophones.hasActiveObservers()) { + state.connectedMicrophones.observeForever(connectedMicrophonesObserver) } } @@ -408,6 +412,7 @@ class PhoneAudioInputManager(service: PhoneAudioInputService) : AbstractSourceMa audioRecord?.release() clearAudioDirectory() } + mainHandler.post { state.connectedMicrophones.removeObserver(connectedMicrophonesObserver) } recordProcessingHandler.stop() } companion object {