You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.7 KiB

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> startspeak(String sessionid);
/// 单次播放文本,完成后返回
Future<bool> speakOnce(String sessionid, String text);
/// 将文本加入播放队列,支持连续播放多段文本
Future<bool> speakStream(String sessionid, String text);
/// 播放队列中剩余文本
Future<bool> flushStream(String sessionid);
/// 停止播放
Future<bool> stop();
/// 释放资源
Future<void> dispose();
/// 切换音频输出设备
Future<bool> setAudioOutputDevice(int type);
}
/// TTS事件类型
enum TtsEventType {
/// 开始播放
started,
/// 播放完成
completed,
/// 播放取消
canceled,
/// 播放错误
error,
}
/// TTS事件
class TtsEvent {
/// 事件类型
final TtsEventType type;
/// 错误信息(仅在 error 类型中有效)
final String error;
TtsEvent({
required this.type,
this.error = '',
});
/// 创建错误事件的快捷构造函数
factory TtsEvent.error(String errorMessage) {
return TtsEvent(
type: TtsEventType.error,
error: errorMessage,
);
}
/// 检查是否为错误
bool get isError => type == TtsEventType.error;
@override
String toString() {
return 'TtsEvent{type: $type, error: $error}';
}
}