mirror of
https://github.com/eeeXun/GTT.git
synced 2025-05-19 09:10:42 -07:00
refactor: defer SoundLock.Release
function in PlayTTS
SoundLock should release before leaving the PlayTTS function
This commit is contained in:
parent
ea1e23172c
commit
13e9f96c2b
@ -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")
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user