1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00
MiraiGo/client/tts.go
wdvxdr e8362691b6 feature .get_tts
ttsApi
2020-09-25 21:35:37 +08:00

45 lines
1.2 KiB
Go

package client
import (
"fmt"
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client/pb/richmedia"
"github.com/Mrs4s/MiraiGo/utils"
"github.com/golang/protobuf/proto"
)
func (c *QQClient) GetTts(text string) ([]byte, error) {
url := "https://textts.qq.com/cgi-bin/tts"
data := "{\"appid\": \"201908021016\",\"text\": \"" + text + "\"}"
rsp, err := utils.HttpPostBytesWithCookie(url, []byte(data), c.getCookies())
if err != nil {
return nil, err
}
ttsReader := binary.NewReader(rsp)
ttsWriter := binary.NewWriter()
for {
// 数据格式 69e(字符串) 十六进制 数据长度 0 为结尾
// 0D 0A (分隔符) payload 0D 0A
var dataLen []byte
for b := ttsReader.ReadByte(); b != byte(0x0d); b = ttsReader.ReadByte() {
dataLen = append(dataLen, b)
}
ttsReader.ReadByte()
var length int
_, _ = fmt.Sscan("0x"+string(dataLen), &length)
if length == 0 {
break
}
ttsRsp := &richmedia.TtsRspBody{}
err := proto.Unmarshal(ttsReader.ReadBytes(length), ttsRsp)
if err != nil {
return nil, err
}
for _, voiceItem := range ttsRsp.VoiceData {
ttsWriter.Write(voiceItem.Voice)
}
ttsReader.ReadBytes(2)
}
return ttsWriter.Bytes(), nil
}