mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
fix: Improve microphone selection
This commit is contained in:
parent
027e41d6b6
commit
5b7ce77ad3
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user