Simple live waveform implementation.

This commit is contained in:
David Langley 2023-10-26 23:46:03 +01:00
parent 4a390296cf
commit 510b1f63b9
10 changed files with 195 additions and 51 deletions

View file

@ -29,9 +29,9 @@ sealed class VoiceRecorderState {
* The recorder is currently recording.
*
* @property elapsedTime The elapsed time since the recording started.
* @property level The current audio level of the recording as a fraction of 1.
* @property levels The current audio levels of the recording as a fraction of 1.
*/
data class Recording(val elapsedTime: Duration, val level: Float) : VoiceRecorderState()
data class Recording(val elapsedTime: Duration, val levels: List<Float>) : VoiceRecorderState()
/**
* The recorder has finished recording.

View file

@ -96,13 +96,13 @@ class VoiceRecorderImpl @Inject constructor(
when (audio) {
is Audio.Data -> {
val audioLevel = audioLevelCalculator.calculateAudioLevel(audio.buffer)
_state.emit(VoiceRecorderState.Recording(elapsedTime, audioLevel))
levels.add(audioLevel)
_state.emit(VoiceRecorderState.Recording(elapsedTime, levels))
encoder.encode(audio.buffer, audio.readSize)
}
is Audio.Error -> {
Timber.e("Voice message error: code=${audio.audioRecordErrorCode}")
_state.emit(VoiceRecorderState.Recording(elapsedTime, 0.0f))
_state.emit(VoiceRecorderState.Recording(elapsedTime, listOf()))
}
}
}