动态判断等待时间结束时TTS是否有返回audio,如果没有,插入一次再次推送预定义audio

main
daixiaoyi 2 months ago
parent 5271a4507e
commit 8e909e1fde

@ -114,7 +114,7 @@ public class ChatServiceImpl implements IChatService {
.retrieve()
.bodyToFlux(StreamResponse.class)
.publishOn(Schedulers.boundedElastic()).mapNotNull(response -> {
log.info("response:时间:{},响应回答:{}", timeInterval.intervalMs(), JSONUtil.toJsonStr(response));
// log.info("response:时间:{},响应回答:{}", timeInterval.intervalMs(), JSONUtil.toJsonStr(response));
Map<String, String> map = new HashMap<>();
map.put("event", response.getEvent());
// 第一次接收数据时启动定时器
@ -128,12 +128,10 @@ public class ChatServiceImpl implements IChatService {
String text = predefinedAnswerAssistant.getHelloAnswer();
predefinedAnswerAssistant.resetInitTime(text);
String voiceBaseId = MD5.create().digestHex(text);
map.put("audioId", voiceBaseId);
map.put("event", "message");
log.info("首次接收dify响应推送预定义打招呼回答id【{}】,文本:{}", text, voiceBaseId);
log.info("首次接收dify响应推送预定义打招呼回答id【{}】,文本:{}", voiceBaseId, text);
audioCache.put(voiceBaseId, predefinedAnswerAssistant.getHelloAnswerAudio(text));
sink.tryEmitNext(ServerSentEvent.<Map<String, String>>builder()
.data(map)
.data(Map.of("audioId", voiceBaseId, "event", "message"))
.build());
Mono.delay(Duration.ofMillis(predefinedAnswerAssistant.getNextActivateTime()))
.subscribe(t -> {
@ -141,19 +139,16 @@ public class ChatServiceImpl implements IChatService {
if (!receivedAudio.get()) {
String text2 = predefinedAnswerAssistant.getPredefinedAnswer();
String voiceBaseId2 = MD5.create().digestHex(text2);
map.put("audioId", voiceBaseId2);
map.put("event", "message");
log.info("超过等待时间阈值推送预定义回答id【{}】,文本:{}", text2, voiceBaseId2);
log.info("超过等待时间阈值推送预定义回答id【{}】,文本:{}", voiceBaseId2, text2);
audioCache.put(voiceBaseId2, predefinedAnswerAssistant.getPredefinedAnswerAudio(text2));
// 插入依次推送
sink.tryEmitNext(ServerSentEvent.<Map<String, String>>builder()
.data(map)
.data(Map.of("audioId", voiceBaseId2, "event", "message"))
.build());
}
});
}
if (response.getEvent().equals("message") && response.getAnswer() != null) {
log.info("response:{}", response);
//遍历answer中的每一个字符判断是否为标点符号如果是说明是句子的结尾将标点符号前的文本拼接到sentence中并打印然后清空sentence如果标点符号后还有文本将文本拼接到sentence中
for (char ch : response.getAnswer().toCharArray()) {
sentence.append(ch);

Loading…
Cancel
Save