Decouple voice progress from amplitude stream
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m30s
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m30s
This commit is contained in:
@@ -727,12 +727,14 @@ class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
|
||||
Future<List<PlaceRecommendation>>? _nearbyPlacesFuture;
|
||||
StreamSubscription<record.Amplitude>? _amplitudeSub;
|
||||
Timer? _progressTimer;
|
||||
XFile? _recordedFile;
|
||||
var _step = 0;
|
||||
var _informationUnits = 0.0;
|
||||
var _recording = false;
|
||||
var _submitting = false;
|
||||
var _micAllowed = true;
|
||||
var _heardVoice = false;
|
||||
var _noiseDb = -72.0;
|
||||
var _voicePeakDb = -34.0;
|
||||
var _liveLevel = 0.0;
|
||||
@@ -746,6 +748,7 @@ class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
@override
|
||||
void dispose() {
|
||||
_amplitudeSub?.cancel();
|
||||
_progressTimer?.cancel();
|
||||
_audioRecorder.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -783,10 +786,16 @@ class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
_amplitudeSub = _audioRecorder
|
||||
.onAmplitudeChanged(_amplitudeInterval)
|
||||
.listen(_handleAmplitude);
|
||||
_progressTimer?.cancel();
|
||||
_progressTimer = Timer.periodic(
|
||||
_amplitudeInterval,
|
||||
(_) => _tickRecordingProgress(),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_micAllowed = true;
|
||||
_recording = true;
|
||||
_heardVoice = false;
|
||||
_liveLevel = 0;
|
||||
_informationUnits = 0;
|
||||
});
|
||||
@@ -795,6 +804,8 @@ class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
Future<void> _stopRecording() async {
|
||||
await _amplitudeSub?.cancel();
|
||||
_amplitudeSub = null;
|
||||
_progressTimer?.cancel();
|
||||
_progressTimer = null;
|
||||
final path = await _audioRecorder.stop();
|
||||
_recordStopwatch.stop();
|
||||
if (path != null && path.isNotEmpty) {
|
||||
@@ -812,12 +823,26 @@ class _AddExperienceFlowState extends ConsumerState<AddExperienceFlow> {
|
||||
|
||||
void _handleAmplitude(record.Amplitude amplitude) {
|
||||
final currentDb = amplitude.current;
|
||||
final now = DateTime.now();
|
||||
final level = _normalizeDbLevel(currentDb);
|
||||
final informationDelta = _consumeInformationDelta(level, now);
|
||||
|
||||
setState(() {
|
||||
_liveLevel = _smoothLevel(_liveLevel, level);
|
||||
_heardVoice = _heardVoice || level > 0.08;
|
||||
});
|
||||
}
|
||||
|
||||
void _tickRecordingProgress() {
|
||||
if (!_recording) {
|
||||
return;
|
||||
}
|
||||
|
||||
final effectiveLevel = _heardVoice ? math.max(_liveLevel, 0.34) : _liveLevel;
|
||||
final informationDelta = _consumeInformationDelta(
|
||||
effectiveLevel,
|
||||
DateTime.now(),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_informationUnits = math.min(
|
||||
_minimumInformationUnits,
|
||||
_informationUnits + informationDelta,
|
||||
|
||||
Reference in New Issue
Block a user