158 lines
4.2 KiB
Dart
158 lines
4.2 KiB
Dart
import 'dart:async';
|
|
import 'package:yx_asr/yx_asr.dart';
|
|
|
|
/// 模拟语音识别服务,用于测试
|
|
class MockSpeechService implements SpeechRecognitionService {
|
|
bool _isListening = false;
|
|
bool _isAvailable = true;
|
|
bool _hasPermission = true;
|
|
bool _initializeResult = true;
|
|
|
|
// 流控制器
|
|
final StreamController<SpeechRecognitionResult> _resultController =
|
|
StreamController<SpeechRecognitionResult>.broadcast();
|
|
final StreamController<SpeechRecognitionError> _errorController =
|
|
StreamController<SpeechRecognitionError>.broadcast();
|
|
final StreamController<bool> _statusController =
|
|
StreamController<bool>.broadcast();
|
|
|
|
// 配置模拟行为
|
|
void setAvailable(bool available) => _isAvailable = available;
|
|
void setHasPermission(bool hasPermission) => _hasPermission = hasPermission;
|
|
void setInitializeResult(bool result) => _initializeResult = result;
|
|
|
|
// 模拟发送结果
|
|
void mockResult(String text, {double confidence = 1.0}) {
|
|
_resultController.add(SpeechRecognitionResult(
|
|
recognizedWords: text,
|
|
confidence: confidence,
|
|
alternatives: [],
|
|
));
|
|
}
|
|
|
|
// 模拟发送错误
|
|
void mockError(SpeechRecognitionErrorType type, String message) {
|
|
_errorController.add(SpeechRecognitionError(
|
|
errorType: type,
|
|
errorMsg: message,
|
|
errorCode: null,
|
|
));
|
|
}
|
|
|
|
// 模拟状态变化
|
|
void mockStatusChange(bool isListening) {
|
|
_isListening = isListening;
|
|
_statusController.add(isListening);
|
|
}
|
|
|
|
@override
|
|
Future<bool> isAvailable() async => _isAvailable;
|
|
|
|
@override
|
|
Future<bool> hasPermission() async => _hasPermission;
|
|
|
|
@override
|
|
Future<bool> requestPermission() async => _hasPermission;
|
|
|
|
@override
|
|
Future<bool> initialize(Map<String, dynamic> config) async {
|
|
await Future.delayed(const Duration(milliseconds: 100)); // 模拟异步操作
|
|
return _initializeResult;
|
|
}
|
|
|
|
@override
|
|
Future<void> startListening({bool partialResults = true}) async {
|
|
if (!_isListening) {
|
|
_isListening = true;
|
|
_statusController.add(true);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> stopListening() async {
|
|
if (_isListening) {
|
|
_isListening = false;
|
|
_statusController.add(false);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> cancel() async {
|
|
_isListening = false;
|
|
_statusController.add(false);
|
|
}
|
|
|
|
@override
|
|
bool get isListening => _isListening;
|
|
|
|
@override
|
|
Stream<SpeechRecognitionResult> get onResult => _resultController.stream;
|
|
|
|
@override
|
|
Stream<SpeechRecognitionError> get onError => _errorController.stream;
|
|
|
|
@override
|
|
Stream<bool> get onListeningStatusChanged => _statusController.stream;
|
|
|
|
@override
|
|
Future<void> dispose() async {
|
|
await _resultController.close();
|
|
await _errorController.close();
|
|
await _statusController.close();
|
|
}
|
|
}
|
|
|
|
/// 模拟失败的语音识别服务
|
|
class FailingSpeechService implements SpeechRecognitionService {
|
|
final StreamController<SpeechRecognitionResult> _resultController =
|
|
StreamController<SpeechRecognitionResult>.broadcast();
|
|
final StreamController<SpeechRecognitionError> _errorController =
|
|
StreamController<SpeechRecognitionError>.broadcast();
|
|
final StreamController<bool> _statusController =
|
|
StreamController<bool>.broadcast();
|
|
|
|
@override
|
|
Future<bool> isAvailable() async => false;
|
|
|
|
@override
|
|
Future<bool> hasPermission() async => false;
|
|
|
|
@override
|
|
Future<bool> requestPermission() async => false;
|
|
|
|
@override
|
|
Future<bool> initialize(Map<String, dynamic> config) async => false;
|
|
|
|
@override
|
|
Future<void> startListening({bool partialResults = true}) async {
|
|
throw Exception('模拟启动失败');
|
|
}
|
|
|
|
@override
|
|
Future<void> stopListening() async {
|
|
throw Exception('模拟停止失败');
|
|
}
|
|
|
|
@override
|
|
Future<void> cancel() async {}
|
|
|
|
@override
|
|
bool get isListening => false;
|
|
|
|
@override
|
|
Stream<SpeechRecognitionResult> get onResult => _resultController.stream;
|
|
|
|
@override
|
|
Stream<SpeechRecognitionError> get onError => _errorController.stream;
|
|
|
|
@override
|
|
Stream<bool> get onListeningStatusChanged => _statusController.stream;
|
|
|
|
@override
|
|
Future<void> dispose() async {
|
|
await _resultController.close();
|
|
await _errorController.close();
|
|
await _statusController.close();
|
|
}
|
|
}
|