v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-22 02:20:32 -07:00

feat: tts

This commit is contained in:
eeeXun 2023-02-19 02:46:33 +08:00
parent 40fe5397ab
commit bbb18c3614
2 changed files with 78 additions and 55 deletions

View File

@ -58,20 +58,25 @@ var (
"Ukrainian": "ukr", "Ukrainian": "ukr",
} }
voiceName = map[string]string{ voiceName = map[string]string{
"Arabic": "Mehdi22k", "Arabic": "Mehdi22k",
"Chinese": "Lulu22k", "Chinese (Simplified)": "Lulu22k",
"Dutch": "Femke22k", "Czech": "Eliska22k",
"English": "Heather22k", "Danish": "Mette22k",
"French": "Alice22k", "Dutch": "Sofie22k",
"German": "Claudia22k", "English": "Heather22k",
"Hebrew": "he-IL-Asaf", "French": "Alice22k",
"Italian": "Chiara22k", "German": "Andreas22k",
"Japanese": "Sakura22k", "Greek": "Dimitris22k",
"Polish": "Ania22k", "Hebrew": "he-IL-Asaf",
"Portuguese": "Celia22k", "Italian": "Fabiana22k",
"Romanian": "ro-RO-Andrei", "Japanese": "Sakura22k",
"Russian": "Alyona22k", "Korean": "Minji22k",
"Spanish": "Ines22k", "Polish": "Monika22k",
"Turkish": "Ipek22k", "Portuguese": "Celia22k",
"Romanian": "ro-RO-Andrei",
"Russian": "Alyona22k",
"Spanish": "Antonio22k",
"Swedish": "Emma22k",
"Turkish": "Ipek22k",
} }
) )

View File

@ -1,11 +1,23 @@
// echo 'nice' | base64 // echo 'nice' | base64
// curl -A "Mozilla/4.0" \ //
// "https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=Heather22k?voiceSpeed=80&inputText=bmljZQ==" \ // curl -A "Mozilla/4.0" \
// --output a.mp // "https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=Heather22k?voiceSpeed=80&inputText=bmljZQ==" \
// --output a.mp
package reversotranslate package reversotranslate
import (
"encoding/base64"
"errors"
"fmt"
"net/http"
"time"
"github.com/hajimehoshi/go-mp3"
"github.com/hajimehoshi/oto/v2"
)
const ( const (
ttsURL = "https://translate.google.com.vn/translate_tts?ie=UTF-8&q=%s&tl=%s&client=tw-ob" ttsURL = "https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=%s?voiceSpeed=80&inputText=%s"
) )
func (t *ReversoTranslate) LockAvailable() bool { func (t *ReversoTranslate) LockAvailable() bool {
@ -21,42 +33,48 @@ func (t *ReversoTranslate) StopTTS() {
} }
func (t *ReversoTranslate) PlayTTS(lang, message string) error { func (t *ReversoTranslate) PlayTTS(lang, message string) error {
// urlStr := fmt.Sprintf( name, ok := voiceName[lang]
// ttsURL, if !ok {
// url.QueryEscape(message), return errors.New(t.EngineName + " does not support text to speech of " + lang)
// langCode[lang], }
// ) urlStr := fmt.Sprintf(
// res, err := http.Get(urlStr) ttsURL,
// if err != nil { name,
// t.SoundLock.Release() base64.StdEncoding.EncodeToString([]byte(message)),
// return err )
// } req, _ := http.NewRequest("GET", urlStr, nil)
// decoder, err := mp3.NewDecoder(res.Body) req.Header.Add("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36")
// if err != nil { res, err := http.DefaultClient.Do(req)
// t.SoundLock.Release() if err != nil {
// return err t.SoundLock.Release()
// } return err
// otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2) }
// if err != nil { decoder, err := mp3.NewDecoder(res.Body)
// t.SoundLock.Release() if err != nil {
// return err t.SoundLock.Release()
// } return err
// <-readyChan }
// player := otoCtx.NewPlayer(decoder) otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
// player.Play() if err != nil {
// for player.IsPlaying() { t.SoundLock.Release()
// if t.SoundLock.Stop { return err
// t.SoundLock.Release() }
// return nil <-readyChan
// } else { player := otoCtx.NewPlayer(decoder)
// time.Sleep(time.Millisecond) player.Play()
// } for player.IsPlaying() {
// } if t.SoundLock.Stop {
// if err = player.Close(); err != nil { t.SoundLock.Release()
// t.SoundLock.Release() return nil
// return err } else {
// } time.Sleep(time.Millisecond)
// }
}
if err = player.Close(); err != nil {
t.SoundLock.Release()
return err
}
t.SoundLock.Release() t.SoundLock.Release()
return nil return nil
} }