123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package handler
-
- import (
- "errors"
- "fmt"
- "git.links123.net/Slate/CorpusAI/config"
- "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/links123.com/pkg/request"
- "github.com/gin-gonic/gin"
- "net/http"
- "net/url"
- "strconv"
- "strings"
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- func TextToSpeechMain(ctx *gin.Context) {
-
-
-
- speed, err := strconv.ParseFloat(ctx.DefaultQuery("speed", "1.00"), 64)
- pitch, err := strconv.ParseFloat(ctx.DefaultQuery("pitch", "0.00"), 64)
-
- text, err := url.QueryUnescape(ctx.Query("text"))
- languageCode, err := url.QueryUnescape(ctx.Query("languageCode"))
- gender, err := url.QueryUnescape(ctx.Query("gender"))
- voiceName := GetDefaultVoiceName(languageCode, gender)
-
- if err != nil || voiceName == "" || text == "" {
- request.Fail(ctx, 400, errors.New("text or voiceName error"))
- return
- }
-
- text = strings.Trim(text , "")
-
- ossObjectKey := service.GetTtsOssKey(text, voiceName, languageCode, speed, pitch)
-
- textKey := cache.GetTextKey(ossObjectKey)
-
- textKeyExists := cache.TextKeyExists(textKey)
-
-
-
- if textKeyExists == true {
-
-
- mp3Url := service.GetUrl(ossObjectKey)
-
- ctx.Redirect(302, mp3Url)
- return
- } else {
- appConfig := config.C.App
- if appConfig.InChina == true {
-
- text = url.QueryEscape(text)
- resp, err := http.Get(appConfig.ApiHost + "/v1/en/tts?text="+text+"&languageCode="+languageCode+"&gender="+gender)
-
- if err != nil || (resp.StatusCode != http.StatusFound && resp.StatusCode != http.StatusOK) {
-
- fmt.Println("service.Get Api", err , appConfig.ApiHost + "/v1/en/tts?text="+text+"&languageCode="+languageCode+"&gender="+gender)
- fmt.Println("service.Get Api resp", resp, err)
- request.Fail(ctx, 400, errors.New("Get Api error"))
- return
- }
-
- mp3Url := service.GetUrl(ossObjectKey)
-
-
- cache.SetOssObject(textKey, ossObjectKey)
-
- ctx.Redirect(302, mp3Url)
- return
- } else {
-
-
-
- AudioContent, err := service.TextToSpeech(text, voiceName, languageCode, speed, pitch)
- if err != nil {
- fmt.Println("service.TextToSpeech Error", err)
- request.Fail(ctx, 400, errors.New("Error: service.TextToSpeech"))
- return
- }
-
-
- service.UploadHkOss(ossObjectKey, AudioContent)
- uploadResult, err := service.UploadOss(ossObjectKey, AudioContent)
-
- if err != nil {
- fmt.Println("service.UploadHkOss Error", err)
- request.Fail(ctx, 400, errors.New("Error: service.UploadOss"))
- return
- }
- if uploadResult == true {
-
-
- mp3Url := service.GetUrl(ossObjectKey)
-
- cache.SetOssObject(textKey, ossObjectKey)
-
- mysql.CreateCorpusTts(text, textKey, languageCode, voiceName, ossObjectKey, speed, pitch)
-
- ctx.Redirect(302, mp3Url)
- return
- }
-
-
- }
-
- }
- }
-
-
- func GetDefaultVoiceName(LanguageCode, Gender string) string {
-
-
- switch LanguageCode {
-
- case "en-GB":
- if Gender == "FEMALE" {
-
- return "en-GB-Wavenet-C"
- } else {
-
- return "en-GB-Wavenet-B"
- }
- case "en-US":
- if Gender == "FEMALE" {
-
- return "en-US-Wavenet-C"
- } else {
-
- return "en-US-Wavenet-B"
- }
- }
-
- return ""
-
-
-
-
-
-
-
-
-
- }
-
|