2023-07-06 16:24:45 +05:30
package utils
import (
2023-07-22 19:54:15 +05:30
"context"
"encoding/base64"
2023-07-06 16:24:45 +05:30
"github.com/carlmjohnson/requests"
2023-07-22 19:12:09 +05:30
"github.com/google/go-querystring/query"
2023-07-06 16:24:45 +05:30
"os"
)
type ReversoTTS struct {
2023-07-22 19:54:15 +05:30
Id string
2023-07-06 16:24:45 +05:30
Voice string
}
2023-08-16 11:58:03 +05:30
func TTSGoogle ( lang string , text string ) [ ] byte {
2023-07-22 19:12:09 +05:30
type Options struct {
2023-07-22 19:54:15 +05:30
Lang string ` url:"tl" `
Text string ` url:"q" `
Client string ` url:"client" `
2023-07-22 19:12:09 +05:30
}
2023-07-22 19:54:15 +05:30
opt := Options { lang , text , "tw-ob" }
2023-07-22 19:12:09 +05:30
v , _ := query . Values ( opt )
2023-07-06 16:24:45 +05:30
var file string
2023-07-22 19:54:15 +05:30
url := "https://translate.google.com/translate_tts?" + v . Encode ( )
2023-07-06 16:24:45 +05:30
err := requests .
URL ( url ) .
ToString ( & file ) .
Fetch ( context . Background ( ) )
if err != nil {
file = ""
}
2023-08-16 11:58:03 +05:30
return [ ] byte ( file )
2023-07-06 16:24:45 +05:30
}
2023-08-16 11:58:03 +05:30
func TTSReverso ( lang string , text string ) [ ] byte {
2023-07-06 16:24:45 +05:30
var TTSData = [ ] ReversoTTS {
// http://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetAvailableVoices with randomized deduplication
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "ar" ,
2023-07-06 16:24:45 +05:30
Voice : "Mehdi22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "zh" ,
2023-07-06 16:24:45 +05:30
Voice : "Lulu22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "cz" ,
2023-07-06 16:24:45 +05:30
Voice : "Eliska22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "dk" ,
2023-07-06 16:24:45 +05:30
Voice : "Mette22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "nl" ,
2023-07-06 16:24:45 +05:30
Voice : "Daan22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "en" ,
2023-07-06 16:24:45 +05:30
Voice : "Will22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "fr" ,
2023-07-06 16:24:45 +05:30
Voice : "Margaux22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "de" ,
2023-07-06 16:24:45 +05:30
Voice : "Andreas22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "gr" ,
2023-07-06 16:24:45 +05:30
Voice : "Dimitris22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "heb" ,
2023-07-06 16:24:45 +05:30
Voice : "he-IL-Asaf" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "it" ,
2023-07-06 16:24:45 +05:30
Voice : "Chiara22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "jp" ,
2023-07-06 16:24:45 +05:30
Voice : "Sakura22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "kr" ,
2023-07-06 16:24:45 +05:30
Voice : "Minji22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "pl" ,
2023-07-06 16:24:45 +05:30
Voice : "Monika22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "pt" ,
2023-07-06 16:24:45 +05:30
Voice : "Celia22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "ro" ,
2023-07-06 16:24:45 +05:30
Voice : "ro-RO-Andrei" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "ru" ,
2023-07-06 16:24:45 +05:30
Voice : "Alyona22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "es" ,
2023-07-06 16:24:45 +05:30
Voice : "Antonio22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "se" ,
2023-07-06 16:24:45 +05:30
Voice : "Erik22k" ,
} ,
ReversoTTS {
2023-07-22 19:54:15 +05:30
Id : "tr" ,
2023-07-06 16:24:45 +05:30
Voice : "Ipek22k" ,
} ,
}
// https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=Lulu22k?voiceSpeed=80&inputText=6K%20V6aqM Base64 input text
2023-07-22 19:12:09 +05:30
text2 := base64 . StdEncoding . EncodeToString ( [ ] byte ( text ) )
2023-07-22 19:54:15 +05:30
var voice string
for _ , s := range TTSData {
if s . Id == lang {
voice = s . Voice
break
}
}
2023-07-06 16:24:45 +05:30
2023-07-22 19:12:09 +05:30
type Options struct {
2023-07-22 19:54:15 +05:30
VoiceSpeed int ` url:"voiceSpeed" `
Text string ` url:"inputText" `
2023-07-22 19:12:09 +05:30
}
2023-07-22 19:54:15 +05:30
opt := Options { 80 , text2 }
2023-07-22 19:12:09 +05:30
v , _ := query . Values ( opt )
2023-07-06 16:24:45 +05:30
var file string
2023-07-22 19:54:15 +05:30
url := "https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=" + voice + "?" + v . Encode ( )
2023-07-06 16:24:45 +05:30
UserAgent , ok := os . LookupEnv ( "SIMPLYTRANSLATE_USER_AGENT" )
if ! ok {
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
err := requests .
URL ( url ) .
ToString ( & file ) .
UserAgent ( UserAgent ) .
Fetch ( context . Background ( ) )
if err != nil {
file = ""
}
2023-08-16 11:58:03 +05:30
return [ ] byte ( file )
2023-07-06 16:24:45 +05:30
}