Skip to content

Commit 205b600

Browse files
Some debugging and error catching improvements
1 parent 52b69aa commit 205b600

File tree

1 file changed

+30
-40
lines changed

1 file changed

+30
-40
lines changed

team_b/yappy/lib/speech_state.dart

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'dart:typed_data';
55
import 'package:flutter/foundation.dart';
66
import 'package:flutter/material.dart';
77
import 'package:record/record.dart';
8-
// import 'package:path_provider/path_provider.dart';
98

109
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
1110

@@ -200,20 +199,24 @@ class SpeechState extends ChangeNotifier {
200199

201200
Future<void> initialize() async {
202201
if (!isInitialized) {
203-
// init online recognizer
204-
sherpa_onnx.initBindings();
205-
onlineRecognizer = await createOnlineRecognizer();
206-
onlineStream = onlineRecognizer?.createStream();
202+
try {
203+
// init online recognizer
204+
sherpa_onnx.initBindings();
205+
onlineRecognizer = await createOnlineRecognizer();
206+
onlineStream = onlineRecognizer?.createStream();
207207

208-
// init offline recognizer
209-
offlineRecognizer = await createOfflineRecognizer();
208+
// init offline recognizer
209+
offlineRecognizer = await createOfflineRecognizer();
210210

211-
// init speaker identification components
212-
speakerExtractor = await createSpeakerExtractor();
213-
speakerManager = sherpa_onnx.SpeakerEmbeddingManager(speakerExtractor!.dim);
211+
// init speaker identification components
212+
speakerExtractor = await createSpeakerExtractor();
213+
speakerManager = sherpa_onnx.SpeakerEmbeddingManager(speakerExtractor!.dim);
214214

215-
isInitialized = true;
216-
notifyListeners();
215+
isInitialized = true;
216+
notifyListeners();
217+
} catch (e) {
218+
debugPrint('Sherpa initialization failed: $e');
219+
}
217220
}
218221
}
219222

@@ -256,13 +259,17 @@ class SpeechState extends ChangeNotifier {
256259
start: start,
257260
end: start, // Will be updated when segment ends
258261
));
262+
263+
debugPrint('Added new segment $currentIndex: "$text" (${start.toStringAsFixed(2)}s - ${start.toStringAsFixed(2)}s)');
259264
}
260265

261266
// Update an existing segment with improved recognition
262267
void _updateRecognizedSegment(int index, String newText, {String? speakerId, Float32List? embedding}) {
263268
final segmentIndex = recognizedSegments.indexWhere((s) => s.index == index);
264269
if (segmentIndex != -1) {
265-
recognizedSegments[segmentIndex].text = newText;
270+
if (newText.trim().isNotEmpty) {
271+
recognizedSegments[segmentIndex].text = newText;
272+
}
266273
recognizedSegments[segmentIndex].isProcessed = true;
267274

268275
if (speakerId != null) {
@@ -286,19 +293,6 @@ class SpeechState extends ChangeNotifier {
286293
}
287294

288295
try {
289-
// // Check if the segment exists in recognizedSegments
290-
// final segmentIndex = recognizedSegments.indexWhere((s) => s.index == segment.index);
291-
// if (segmentIndex == -1) {
292-
// debugPrint('Segment ${segment.index} not found in recognizedSegments, creating placeholder');
293-
// // Create a placeholder if it doesn't exist
294-
// recognizedSegments.add(RecognizedSegment(
295-
// index: segment.index,
296-
// text: "",
297-
// start: segment.start,
298-
// end: segment.end,
299-
// ));
300-
// }
301-
302296
// Perform offline speech recognition
303297
final offlineStream = offlineRecognizer!.createStream();
304298

@@ -348,15 +342,7 @@ class SpeechState extends ChangeNotifier {
348342
speakerId: speakerId,
349343
embedding: embedding,
350344
);
351-
} else {
352-
// debugPrint('Empty text result for segment ${segment.index}, only updating speaker ID');
353-
// _updateRecognizedSegment(
354-
// segment.index,
355-
// result.text,
356-
// speakerId: speakerId,
357-
// embedding: embedding,
358-
// );
359-
}
345+
}
360346

361347
// Free resources
362348
offlineStream.free();
@@ -420,10 +406,8 @@ class SpeechState extends ChangeNotifier {
420406
try {
421407
if (await audioRecorder.hasPermission()) {
422408
// Reset speakers for new recording
423-
// speakerManager?.free();
424-
// speakerManager = sherpa_onnx.SpeakerEmbeddingManager(speakerExtractor!.dim);
425409
currentSpeakerCount = 0;
426-
// recognizedSegments.clear();
410+
recognizedSegments.clear();
427411

428412
// Create a path for saving the recording
429413
recordingFilePath = await _createRecordingFilePath();
@@ -442,7 +426,7 @@ class SpeechState extends ChangeNotifier {
442426

443427
recordState = RecordState.record;
444428
controller.value = TextEditingValue(
445-
text: "Ready to record..."
429+
text: "Listening..."
446430
);
447431
notifyListeners();
448432

@@ -521,6 +505,12 @@ class SpeechState extends ChangeNotifier {
521505
currentIndex += 1;
522506
}
523507
},
508+
onError: (error) {
509+
debugPrint('Error from audio stream: $error');
510+
},
511+
onDone: () {
512+
debugPrint('Audio stream done');
513+
},
524514
);
525515
}
526516
} catch (e) {
@@ -712,4 +702,4 @@ class SpeechState extends ChangeNotifier {
712702
speakerManager?.free();
713703
super.dispose();
714704
}
715-
}
705+
}

0 commit comments

Comments
 (0)