diff --git a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt index 89df173..f7fdfbd 100644 --- a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt +++ b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt @@ -154,7 +154,7 @@ data class AudioRecorderSettings( else MediaRecorder.OutputFormat.THREE_GPP } - return when(encoder) { + return when (encoder) { MediaRecorder.AudioEncoder.AAC -> MediaRecorder.OutputFormat.AAC_ADTS MediaRecorder.AudioEncoder.AAC_ELD -> MediaRecorder.OutputFormat.AAC_ADTS MediaRecorder.AudioEncoder.AMR_NB -> MediaRecorder.OutputFormat.AMR_NB @@ -167,6 +167,7 @@ data class AudioRecorderSettings( MediaRecorder.OutputFormat.AAC_ADTS } } + MediaRecorder.AudioEncoder.OPUS -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { MediaRecorder.OutputFormat.OGG @@ -174,11 +175,12 @@ data class AudioRecorderSettings( MediaRecorder.OutputFormat.AAC_ADTS } } + else -> MediaRecorder.OutputFormat.DEFAULT } } - fun getMimeType(): String = when(getOutputFormat()) { + fun getMimeType(): String = when (getOutputFormat()) { MediaRecorder.OutputFormat.AAC_ADTS -> "audio/aac" MediaRecorder.OutputFormat.THREE_GPP -> "audio/3gpp" MediaRecorder.OutputFormat.MPEG_4 -> "audio/mp4" @@ -190,7 +192,7 @@ data class AudioRecorderSettings( else -> "audio/3gpp" } - fun getSamplingRate(): Int = samplingRate ?: when(getOutputFormat()) { + fun getSamplingRate(): Int = samplingRate ?: when (getOutputFormat()) { MediaRecorder.OutputFormat.AAC_ADTS -> 96000 MediaRecorder.OutputFormat.THREE_GPP -> 44100 MediaRecorder.OutputFormat.MPEG_4 -> 44100 @@ -202,11 +204,10 @@ data class AudioRecorderSettings( else -> 48000 } - fun getEncoder(): Int = encoder ?: - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - MediaRecorder.AudioEncoder.AAC - else - MediaRecorder.AudioEncoder.AMR_NB + fun getEncoder(): Int = encoder ?: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + MediaRecorder.AudioEncoder.AAC + else + MediaRecorder.AudioEncoder.AMR_NB fun setIntervalDuration(duration: Long): AudioRecorderSettings { if (duration < 10 * 1000L || duration > 60 * 60 * 1000L) { @@ -221,7 +222,6 @@ data class AudioRecorderSettings( } fun setBitRate(bitRate: Int): AudioRecorderSettings { - println("bitRate: $bitRate") if (bitRate !in 1000..320000) { throw Exception("Bit rate must be between 1000 and 320000") } diff --git a/app/src/main/java/app/myzel394/alibi/services/AudioRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/AudioRecorderService.kt index 0ba3e88..2c5fcf3 100644 --- a/app/src/main/java/app/myzel394/alibi/services/AudioRecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/AudioRecorderService.kt @@ -30,16 +30,7 @@ class AudioRecorderService : IntervalRecorderService() { val filePath: String get() = "$folder/$counter.${settings!!.fileExtension}" - private fun clearAudioDevice() { - val audioManger = getSystemService(AUDIO_SERVICE)!! as AudioManager - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - audioManger.clearCommunicationDevice() - } else { - audioManger.stopBluetoothSco() - } - } - + /// Tell Android to use the correct bluetooth microphone, if any selected private fun startAudioDevice() { if (selectedMicrophone == null) { return @@ -54,6 +45,16 @@ class AudioRecorderService : IntervalRecorderService() { } } + private fun clearAudioDevice() { + val audioManger = getSystemService(AUDIO_SERVICE)!! as AudioManager + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + audioManger.clearCommunicationDevice() + } else { + audioManger.stopBluetoothSco() + } + } + private fun createRecorder(): MediaRecorder { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { MediaRecorder(this) @@ -185,7 +186,6 @@ class AudioRecorderService : IntervalRecorderService() { } } - @SuppressLint("NewApi") private fun registerMicrophoneListener() { val audioManager = getSystemService(Context.AUDIO_SERVICE)!! as AudioManager diff --git a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt index 2f27783..daadb7a 100644 --- a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt @@ -102,7 +102,6 @@ abstract class RecorderService : Service() { } RecorderState.IDLE -> { - stop() onDestroy() } } @@ -149,7 +148,6 @@ abstract class RecorderService : Service() { super.onDestroy() stop() - changeState(RecorderState.IDLE) stopForeground(STOP_FOREGROUND_REMOVE) NotificationManagerCompat.from(this) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt index 930afc6..36d1ebf 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt @@ -151,8 +151,6 @@ fun RecordingStatus( } LaunchedEffect(microphoneStatus) { - println(microphoneStatus) - println(previousStatus) if (microphoneStatus != previousStatus && showMicrophoneStatusDialog == null && previousStatus != null) { showMicrophoneStatusDialog = microphoneStatus } diff --git a/app/src/main/java/app/myzel394/alibi/ui/utils/available-microphones.kt b/app/src/main/java/app/myzel394/alibi/ui/utils/available-microphones.kt index cb9ebe1..b804f24 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/utils/available-microphones.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/utils/available-microphones.kt @@ -1,9 +1,9 @@ package app.myzel394.alibi.ui.utils -import android.annotation.SuppressLint import android.content.Context import android.media.AudioDeviceInfo import android.media.AudioManager +import android.os.Build data class MicrophoneInfo( val deviceInfo: AudioDeviceInfo, @@ -24,12 +24,19 @@ data class MicrophoneInfo( return MicrophoneInfo(deviceInfo) } - @SuppressLint("NewApi") fun fetchDeviceMicrophones(context: Context): List { val audioManager = context.getSystemService(Context.AUDIO_SERVICE)!! as AudioManager - return audioManager.availableCommunicationDevices.let { - it.subList(2, it.size) - }.map(::fromDeviceInfo) + val mics = + audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS).map(::fromDeviceInfo) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + audioManager.availableCommunicationDevices.let { + it.subList(2, it.size) + }.map(::fromDeviceInfo) + } else { + audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS).let { + it.slice(1 until it.size) + }.map(::fromDeviceInfo) + } } }