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

refactor: defer SoundLock.Release function in PlayTTS

SoundLock should release before leaving the PlayTTS function
This commit is contained in:
eeeXun 2023-03-10 21:02:06 +08:00
parent ea1e23172c
commit 13e9f96c2b
4 changed files with 8 additions and 14 deletions

View File

@ -17,6 +17,7 @@ func (t *ApertiumTranslate) StopTTS() {
}
func (t *ApertiumTranslate) PlayTTS(lang, message string) error {
t.SoundLock.Release()
defer t.SoundLock.Release()
return errors.New(t.EngineName + " does not support text to speech")
}

View File

@ -17,6 +17,7 @@ func (t *ArgosTranslate) StopTTS() {
}
func (t *ArgosTranslate) PlayTTS(lang, message string) error {
t.SoundLock.Release()
defer t.SoundLock.Release()
return errors.New(t.EngineName + " does not support text to speech")
}

View File

@ -27,6 +27,8 @@ func (t *GoogleTranslate) StopTTS() {
}
func (t *GoogleTranslate) PlayTTS(lang, message string) error {
defer t.SoundLock.Release()
urlStr := fmt.Sprintf(
ttsURL,
url.QueryEscape(message),
@ -34,17 +36,14 @@ func (t *GoogleTranslate) PlayTTS(lang, message string) error {
)
res, err := http.Get(urlStr)
if err != nil {
t.SoundLock.Release()
return err
}
decoder, err := mp3.NewDecoder(res.Body)
if err != nil {
t.SoundLock.Release()
return err
}
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
if err != nil {
t.SoundLock.Release()
return err
}
<-readyChan
@ -52,16 +51,13 @@ func (t *GoogleTranslate) PlayTTS(lang, message string) error {
player.Play()
for player.IsPlaying() {
if t.SoundLock.Stop {
t.SoundLock.Release()
return nil
}
time.Sleep(time.Millisecond)
}
if err = player.Close(); err != nil {
t.SoundLock.Release()
return err
}
t.SoundLock.Release()
return nil
}

View File

@ -28,6 +28,8 @@ func (t *ReversoTranslate) StopTTS() {
}
func (t *ReversoTranslate) PlayTTS(lang, message string) error {
defer t.SoundLock.Release()
name, ok := voiceName[lang]
if !ok {
return errors.New(t.EngineName + " does not support text to speech of " + lang)
@ -41,17 +43,14 @@ func (t *ReversoTranslate) PlayTTS(lang, message string) error {
req.Header.Add("User-Agent", userAgent)
res, err := http.DefaultClient.Do(req)
if err != nil {
t.SoundLock.Release()
return err
}
decoder, err := mp3.NewDecoder(res.Body)
if err != nil {
t.SoundLock.Release()
return err
}
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
if err != nil {
t.SoundLock.Release()
return err
}
<-readyChan
@ -59,17 +58,14 @@ func (t *ReversoTranslate) PlayTTS(lang, message string) error {
player.Play()
for player.IsPlaying() {
if t.SoundLock.Stop {
t.SoundLock.Release()
return nil
} else {
time.Sleep(time.Millisecond)
}
}
if err = player.Close(); err != nil {
t.SoundLock.Release()
return err
}
t.SoundLock.Release()
return nil
}