fix: Improve microphone selection

This commit is contained in:
Myzel394 2023-10-21 19:23:53 +02:00
parent 027e41d6b6
commit 5b7ce77ad3
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B

View File

@ -16,13 +16,15 @@ import app.myzel394.alibi.services.AudioRecorderService
import app.myzel394.alibi.services.RecorderService import app.myzel394.alibi.services.RecorderService
import app.myzel394.alibi.ui.utils.MicrophoneInfo import app.myzel394.alibi.ui.utils.MicrophoneInfo
class AudioRecorderModel: ViewModel() { class AudioRecorderModel : ViewModel() {
var recorderState by mutableStateOf(RecorderState.IDLE) var recorderState by mutableStateOf(RecorderState.IDLE)
private set private set
var recordingTime by mutableStateOf<Long?>(null) var recordingTime by mutableStateOf<Long?>(null)
private set private set
var amplitudes by mutableStateOf<List<Int>>(emptyList()) var amplitudes by mutableStateOf<List<Int>>(emptyList())
private set private set
var selectedMicrophone by mutableStateOf<MicrophoneInfo?>(null)
private set
var onAmplitudeChange: () -> Unit = {} var onAmplitudeChange: () -> Unit = {}
@ -46,28 +48,35 @@ class AudioRecorderModel: ViewModel() {
private val connection = object : ServiceConnection { private val connection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, service: IBinder) { override fun onServiceConnected(className: ComponentName, service: IBinder) {
recorderService = ((service as RecorderService.RecorderBinder).getService() as AudioRecorderService).also {recorder -> recorderService =
recorder.onStateChange = { state -> ((service as RecorderService.RecorderBinder).getService() as AudioRecorderService).also { recorder ->
recorderState = state // Update UI when the service changes
} recorder.onStateChange = { state ->
recorder.onRecordingTimeChange = { time -> recorderState = state
recordingTime = time }
} recorder.onRecordingTimeChange = { time ->
recorder.onAmplitudeChange = { amps -> recordingTime = time
amplitudes = amps }
onAmplitudeChange() recorder.onAmplitudeChange = { amps ->
} amplitudes = amps
recorder.onError = { onAmplitudeChange()
recorderService!!.createLastRecording() }
onError() recorder.onError = {
} recorderService!!.createLastRecording()
}.also { onError()
it.startRecording() }
recorder.onSelectedMicrophoneChange = { microphone ->
selectedMicrophone = microphone
}
}.also {
// Init UI from the service
it.startRecording()
recorderState = it.state recorderState = it.state
recordingTime = it.recordingTime recordingTime = it.recordingTime
amplitudes = it.amplitudes amplitudes = it.amplitudes
} selectedMicrophone = it.selectedMicrophone
}
} }
override fun onServiceDisconnected(arg0: ComponentName) { override fun onServiceDisconnected(arg0: ComponentName) {
@ -80,6 +89,7 @@ class AudioRecorderModel: ViewModel() {
recorderState = RecorderState.IDLE recorderState = RecorderState.IDLE
recordingTime = null recordingTime = null
amplitudes = emptyList() amplitudes = emptyList()
selectedMicrophone = null
} }
fun startRecording(context: Context) { fun startRecording(context: Context) {
@ -120,7 +130,7 @@ class AudioRecorderModel: ViewModel() {
} }
fun changeMicrophone(microphone: MicrophoneInfo?) { fun changeMicrophone(microphone: MicrophoneInfo?) {
recorderService!!.selectedDevice = microphone recorderService!!.changeMicrophone(microphone)
} }
fun bindToService(context: Context) { fun bindToService(context: Context) {