123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package job
-
- import (
- "fmt"
- "git.links123.net/Slate/CorpusAI/service"
- "git.links123.net/Slate/CorpusAI/service/store/cache"
- "git.links123.net/Slate/CorpusAI/service/store/mysql"
- "git.links123.net/Slate/CorpusAI/config"
- "github.com/jinzhu/gorm"
- _ "github.com/go-sql-driver/mysql"
- "github.com/spf13/cobra"
- "net/url"
- "strconv"
- "strings"
- )
-
- type TtsRaw struct {
- ID int64
- Text string //翻译的文本
- UniqKey string //唯一键值
- Status int64
- Remark string
- }
-
- func (TtsRaw) TableName() string {
- return "lnk_corpus_tts_raw"
- }
-
- type langType struct {
- languageCode string;
- voiceName string;
- }
-
- func RunCommand() *cobra.Command {
- cmd := &cobra.Command{
- Use: "job",
- Short: "Run the job service",
- Run: func(cmd *cobra.Command, args []string) {
- //fmt.Println("Echo: " + strings.Join(args, " "))
-
- minId := args[0]
- maxId := args[1]
-
- dbConfig := config.C.DB
- settings := dbConfig.User+":"+dbConfig.Password+"@tcp("+dbConfig.Host+")/"+dbConfig.Name+"?charset=utf8&parseTime=True&loc=Local"
-
- var ttsRawList []TtsRaw
-
- db, err := gorm.Open("mysql", settings)
- if err != nil {
- panic("failed to connect database")
- }
-
- speed, _ := strconv.ParseFloat( "1.00", 64)
- pitch, _ := strconv.ParseFloat( "0.00", 64)
-
- db.Where("id <= ? and id >= ?", maxId, minId).Find(&ttsRawList)
-
- for _, ttsRaw := range ttsRawList {
-
- result, msg := SyncTtsOss(ttsRaw.Text, speed, pitch)
-
- if result == true {
- ttsRaw.Status = 1
- //更新成功
- } else {
- ttsRaw.Status = -1
- //更新错误状态和msg
- ttsRaw.Remark = msg
- }
- fmt.Println(ttsRaw)
- db.Save(&ttsRaw)
- }
-
- db.Close()
- },
- }
- return cmd
- }
-
- func SyncTtsOss(text string, speed float64, pitch float64) (bool, string) {
-
- text, _ = url.QueryUnescape(text)
-
- text = strings.Trim(text , "")
-
- if text == "" {
- return false, "Error: text null"
- }
-
- typeMap := make(map[int]langType)
- typeMap[1] = langType{"en-US","en-US-Wavenet-B"}
- typeMap[2] = langType{"en-US","en-US-Wavenet-C"}
- typeMap[3] = langType{"en-GB","en-GB-Wavenet-B"}
- typeMap[4] = langType{"en-GB","en-GB-Wavenet-C"}
-
- for _, lang := range typeMap {
-
- ossObjectKey := service.GetTtsOssKey(text, lang.voiceName, lang.languageCode, speed, pitch)
-
- textKey := cache.GetTextKey(ossObjectKey)
-
- AudioContent, err := service.TextToSpeech(text, lang.voiceName, lang.languageCode, speed, pitch)
- if err != nil {
-
- return false, "TextToSpeech Error:" + err.Error()
- }
-
- uploadResult, err := service.UploadHkOss(ossObjectKey, AudioContent)
-
- if uploadResult == true {
- uploadResult, err = service.UploadOss(ossObjectKey, AudioContent)
-
- if uploadResult == true {
-
- //hk&cn节点oss都同步成功, set db
- mysql.CreateCorpusTts(text, textKey, lang.languageCode, lang.voiceName, ossObjectKey, speed, pitch)
- }
- }
-
- if err != nil {
-
- return false, "UploadHkOss Error" + err.Error()
- }
- }
-
- return true, ""
- }
|