mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-05 03:23:50 +08:00
47 lines
1.2 KiB
Go
47 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)
|
|
}
|
|
ret := ttsWriter.Bytes()
|
|
ret[0] = '\x02'
|
|
return ret, nil
|
|
}
|