增加未达到字数处理
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
This commit is contained in:
parent
9aee63f624
commit
fe13751624
@ -460,16 +460,19 @@ func (s *LLMService) handleStreamingResponse(req *http.Request, data map[string]
|
|||||||
new_message = strings.Join(segments[:len(segments)-1], "")
|
new_message = strings.Join(segments[:len(segments)-1], "")
|
||||||
// initialSessage = ""
|
// initialSessage = ""
|
||||||
} else {
|
} else {
|
||||||
continue
|
if containsPunctuation(format_message) && utf8.RuneCountInString(format_message) > 10 {
|
||||||
|
|
||||||
|
initialSessage = segments[len(segments)-1]
|
||||||
|
new_message = strings.Join(segments[:len(segments)-1], "")
|
||||||
|
} else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if utf8.RuneCountInString(initialSessage) > 15 {
|
if utf8.RuneCountInString(initialSessage) > 15 {
|
||||||
new_message = initialSessage
|
new_message = initialSessage
|
||||||
initialSessage = ""
|
initialSessage = ""
|
||||||
} else if utf8.RuneCountInString(initialSessage) <= 15 && containsPunctuation(initialSessage) {
|
|
||||||
new_message = initialSessage
|
|
||||||
initialSessage = ""
|
|
||||||
} else {
|
} else {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -544,6 +547,96 @@ func (s *LLMService) handleStreamingResponse(req *http.Request, data map[string]
|
|||||||
AudioData: audio, // Update to use the correct path to audio data
|
AudioData: audio, // Update to use the correct path to audio data
|
||||||
}
|
}
|
||||||
case "message_end":
|
case "message_end":
|
||||||
|
// 在流结束前,处理剩余的文本生成音频
|
||||||
|
if initialSessage != "" {
|
||||||
|
// 不管文本长度,直接生成音频
|
||||||
|
s_msg := strings.TrimSpace(initialSessage)
|
||||||
|
// 定义标点符号map
|
||||||
|
punctuations := map[string]bool{
|
||||||
|
",": true, ",": true, // 逗号
|
||||||
|
".": true, "。": true, // 句号
|
||||||
|
"!": true, "!": true, // 感叹号
|
||||||
|
"?": true, "?": true, // 问号
|
||||||
|
";": true, ";": true, // 分号
|
||||||
|
":": true, ":": true, // 冒号
|
||||||
|
"、": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除字符串前后的标点符号
|
||||||
|
trimPunctuation := func(s string) string {
|
||||||
|
if len(s) > 0 {
|
||||||
|
lastRune, size := utf8.DecodeLastRuneInString(s)
|
||||||
|
if punctuations[string(lastRune)] {
|
||||||
|
s = s[:len(s)-size]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
new_message := trimPunctuation(s_msg)
|
||||||
|
fmt.Println("最后一段文本生成音频:", new_message)
|
||||||
|
|
||||||
|
// 生成语音
|
||||||
|
var audio string
|
||||||
|
for i := 0; i < 1; i++ {
|
||||||
|
speechResp, err := s.SynthesizeSpeech(new_message, audio_type)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error synthesizing speech: %v\n", err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fmt.Println("语音:", speechResp)
|
||||||
|
audio = speechResp.Data.Audio
|
||||||
|
if audio != "" {
|
||||||
|
// 下载并处理音频
|
||||||
|
resp, err := http.Get(audio)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error downloading audio: %v\n", err)
|
||||||
|
} else {
|
||||||
|
defer resp.Body.Close()
|
||||||
|
audioBytes, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error reading audio data: %v\n", err)
|
||||||
|
} else {
|
||||||
|
// 保存原始音频
|
||||||
|
originalPath := fmt.Sprintf("audio/original_%d.wav", time.Now().UnixNano())
|
||||||
|
if err := os.WriteFile(originalPath, audioBytes, 0644); err != nil {
|
||||||
|
fmt.Printf("Error saving original audio: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 静音裁剪
|
||||||
|
audioBase64 := base64.StdEncoding.EncodeToString(audioBytes)
|
||||||
|
trimmedAudio, err := s.TrimAudioSilence(audioBase64)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error trimming audio silence: %v\n", err)
|
||||||
|
} else {
|
||||||
|
audio_path := fmt.Sprintf("trimmed_%d.wav", time.Now().UnixNano())
|
||||||
|
outputPath := "audio/" + audio_path
|
||||||
|
if err := s.SaveBase64AsWAV(trimmedAudio, outputPath); err != nil {
|
||||||
|
fmt.Printf("Error saving trimmed WAV file: %v\n", err)
|
||||||
|
}
|
||||||
|
audio = s.config.FILE_URL + audio_path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送最后一段文本的消息
|
||||||
|
messageChan <- Message{
|
||||||
|
Answer: s_msg,
|
||||||
|
IsEnd: false,
|
||||||
|
ConversationID: getString(jsonData, "conversation_id"),
|
||||||
|
TaskID: getString(jsonData, "task_id"),
|
||||||
|
ClientID: getString(data, "conversation_id"),
|
||||||
|
AudioData: audio,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空剩余文本
|
||||||
|
initialSessage = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送结束消息
|
||||||
messageChan <- Message{
|
messageChan <- Message{
|
||||||
Answer: "",
|
Answer: "",
|
||||||
IsEnd: true,
|
IsEnd: true,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user