123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package service
-
- import (
- "bytes"
- "cloud.google.com/go/texttospeech/apiv1"
- "crypto/md5"
- "fmt"
- "git.links123.net/Slate/CorpusAI/config"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- texttospeechpb "google.golang.org/genproto/googleapis/cloud/texttospeech/v1"
- "golang.org/x/net/context"
- )
-
- // @Description Get TTS Oss unique key
- func GetTtsOssKey(Text string, VoiceName string, LanguageCode string, Speed float64, Pitch float64) string {
-
- data := []byte(Text)
- hash := md5.Sum(data)
- md5Value := fmt.Sprintf("%x", hash)
-
- key := fmt.Sprintf("%s/%s/%s/%s/%f_%f.mp3", "tts/en/google", md5Value, LanguageCode, VoiceName, Speed, Pitch)
-
- return key
- }
-
- func GetUrl(ossObjectKey string) string {
-
- ossConfig := config.C.OSS
-
- appConfig := config.C.App
- if appConfig.InChina == true {
-
- return fmt.Sprintf("https://%s.%s/%s", ossConfig.Bucket, ossConfig.EndPoint, ossObjectKey)
-
- } else {
- return fmt.Sprintf("https://%s.%s/%s", ossConfig.HkBucket, ossConfig.HkEndPoint, ossObjectKey)
- }
- }
-
- // @Description Upload AudioContent to Oss
- func UploadOss(ossObjectKey string, AudioContent []byte) (bool , error) {
- ossConfig := config.C.OSS
- client, err := oss.New(ossConfig.EndPoint, ossConfig.AccessKey, ossConfig.SecretKey)
- bucket, err := client.Bucket(ossConfig.Bucket)
- if err != nil {
- return false, fmt.Errorf("texttospeech.UploadOss Bucket error: %v", err)
- }
-
- // 上传Byte数组。
- err = bucket.PutObject(ossObjectKey, bytes.NewReader(AudioContent))
- isExist, err := bucket.IsObjectExist(ossObjectKey)
- if err != nil {
- return false, fmt.Errorf("texttospeech.UploadOss Put error: %v", err)
- }
- return isExist, nil
- }
-
- func UploadHkOss(ossObjectKey string, AudioContent []byte) (bool , error) {
- ossConfig := config.C.OSS
- client, err := oss.New(ossConfig.HkEndPoint, ossConfig.AccessKey, ossConfig.SecretKey)
- bucket, err := client.Bucket(ossConfig.HkBucket)
- if err != nil {
- return false, fmt.Errorf("texttospeech.UploadOss Bucket error: %v", err)
- }
-
- // 上传Byte数组。
- err = bucket.PutObject(ossObjectKey, bytes.NewReader(AudioContent))
- isExist, err := bucket.IsObjectExist(ossObjectKey)
- if err != nil {
- return false, fmt.Errorf("texttospeech.UploadOss Put error: %v", err)
- }
- return isExist, nil
- }
-
- // @Description Text to speech
- func TextToSpeech(Text string, VoiceName string, LanguageCode string, Speed float64, Pitch float64) ([]byte , error) {
-
- ctx := context.Background()
-
- client, err := texttospeech.NewClient(ctx)
- if err != nil {
- return nil, fmt.Errorf("texttospeech.NewClient error: %v", err)
- }
-
- req := texttospeechpb.SynthesizeSpeechRequest{
- // Set the text input to be synthesized.
- Input: &texttospeechpb.SynthesisInput{
- InputSource: &texttospeechpb.SynthesisInput_Text{Text: Text},
- },
- // Build the voice request, select the language code ("en-US") and the SSML
- // voice gender ("neutral").
- Voice: &texttospeechpb.VoiceSelectionParams{
- Name: VoiceName,
- LanguageCode: LanguageCode,
- //SsmlGender: texttospeechpb.SsmlVoiceGender_NEUTRAL,
- },
- // Select the type of audio file you want returned.
- AudioConfig: &texttospeechpb.AudioConfig{
- AudioEncoding: texttospeechpb.AudioEncoding_MP3,
- SpeakingRate: Speed,
- Pitch: Pitch,
- },
- }
-
- resp, err := client.SynthesizeSpeech(ctx, &req)
- if err != nil {
- return nil, fmt.Errorf("texttospeech.SynthesizeSpeech error: %v", err)
- }
-
- return resp.AudioContent, nil
- }
|