|
|
|
@ -2,52 +2,51 @@ import 'dart:async'; |
|
|
|
|
|
|
|
/// 语音合成服务接口 |
|
|
|
abstract class TtsService { |
|
|
|
|
|
|
|
/// 当前选择的语音 |
|
|
|
String get currentVoice; |
|
|
|
|
|
|
|
|
|
|
|
/// 当前是否正在播放 |
|
|
|
bool get isSpeaking; |
|
|
|
|
|
|
|
|
|
|
|
/// TTS事件流,用于监听语音合成事件 |
|
|
|
Stream<TtsEvent> get onEvent; |
|
|
|
|
|
|
|
|
|
|
|
/// 初始化语音合成服务 |
|
|
|
Future<bool> initialize({ |
|
|
|
List<String>? supportedLanguages, |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
/// 设置语音 |
|
|
|
Future<bool> setVoice(String voiceName); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// 单次播放文本,完成后返回 |
|
|
|
Future<bool> speakOnce(String text); |
|
|
|
|
|
|
|
|
|
|
|
/// 将文本加入播放队列,支持连续播放多段文本 |
|
|
|
Future<bool> speakStream(String text); |
|
|
|
|
|
|
|
|
|
|
|
/// 播放队列中剩余文本 |
|
|
|
Future<bool> flushStream(); |
|
|
|
|
|
|
|
|
|
|
|
/// 停止播放 |
|
|
|
Future<bool> stop(); |
|
|
|
|
|
|
|
|
|
|
|
/// 释放资源 |
|
|
|
Future<void> dispose(); |
|
|
|
Future<bool> setAudioOutputDevice(); |
|
|
|
} |
|
|
|
|
|
|
|
/// TTS事件类型 |
|
|
|
enum TtsEventType { |
|
|
|
/// 开始播放 |
|
|
|
started, |
|
|
|
|
|
|
|
|
|
|
|
/// 播放完成 |
|
|
|
completed, |
|
|
|
|
|
|
|
|
|
|
|
/// 播放取消 |
|
|
|
canceled, |
|
|
|
|
|
|
|
|
|
|
|
/// 播放错误 |
|
|
|
error, |
|
|
|
} |
|
|
|
@ -56,15 +55,15 @@ enum TtsEventType { |
|
|
|
class TtsEvent { |
|
|
|
/// 事件类型 |
|
|
|
final TtsEventType type; |
|
|
|
|
|
|
|
|
|
|
|
/// 错误信息(仅在 error 类型中有效) |
|
|
|
final String error; |
|
|
|
|
|
|
|
|
|
|
|
TtsEvent({ |
|
|
|
required this.type, |
|
|
|
this.error = '', |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
/// 创建错误事件的快捷构造函数 |
|
|
|
factory TtsEvent.error(String errorMessage) { |
|
|
|
return TtsEvent( |
|
|
|
@ -72,12 +71,12 @@ class TtsEvent { |
|
|
|
error: errorMessage, |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// 检查是否为错误 |
|
|
|
bool get isError => type == TtsEventType.error; |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
String toString() { |
|
|
|
return 'TtsEvent{type: $type, error: $error}'; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|