feat: add SSML processing capabilities and configuration support

This commit is contained in:
王锦强
2025-03-11 12:23:46 +08:00
parent 886377b77d
commit 4225e5771f
3 changed files with 104 additions and 3 deletions

View File

@@ -6,7 +6,6 @@ import (
"encoding/json"
"errors"
"fmt"
"html"
"io"
"log"
"net/http"
@@ -50,10 +49,16 @@ type Client struct {
endpoint map[string]interface{}
endpointMu sync.RWMutex
endpointExpiry time.Time
ssmProcessor *config.SSMLProcessor
}
// NewClient 创建一个新的Microsoft TTS客户端
func NewClient(cfg *config.Config) *Client {
// 从Viper配置中创建SSML处理器
ssmProcessor, err := config.NewSSMLProcessor(&cfg.SSML)
if err != nil {
log.Fatalf("创建SSML处理器失败: %v", err)
}
client := &Client{
defaultVoice: cfg.TTS.DefaultVoice,
defaultRate: cfg.TTS.DefaultRate,
@@ -65,6 +70,7 @@ func NewClient(cfg *config.Config) *Client {
},
voicesCacheExpiry: time.Time{}, // 初始时缓存为空
endpointExpiry: time.Time{}, // 初始时端点为空
ssmProcessor: ssmProcessor,
}
return client
@@ -245,8 +251,7 @@ func (c *Client) createTTSRequest(ctx context.Context, req models.TTSRequest) (*
}
// 对文本进行HTML转义防止XML解析错误
escapedText := html.EscapeString(req.Text)
escapedText := c.ssmProcessor.EscapeSSML(req.Text)
// 准备SSML内容
ssml := fmt.Sprintf(ssmlTemplate, locale, voice, style, rate, pitch, escapedText)