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
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}';
|
|
}
|
|
}
|
|
|