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 {
|
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")
|
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 {
|
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")
|
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 {
|
func (t *GoogleTranslate) PlayTTS(lang, message string) error {
|
||||||
|
defer t.SoundLock.Release()
|
||||||
|
|
||||||
urlStr := fmt.Sprintf(
|
urlStr := fmt.Sprintf(
|
||||||
ttsURL,
|
ttsURL,
|
||||||
url.QueryEscape(message),
|
url.QueryEscape(message),
|
||||||
@ -34,17 +36,14 @@ func (t *GoogleTranslate) PlayTTS(lang, message string) error {
|
|||||||
)
|
)
|
||||||
res, err := http.Get(urlStr)
|
res, err := http.Get(urlStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
decoder, err := mp3.NewDecoder(res.Body)
|
decoder, err := mp3.NewDecoder(res.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
|
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
<-readyChan
|
<-readyChan
|
||||||
@ -52,16 +51,13 @@ func (t *GoogleTranslate) PlayTTS(lang, message string) error {
|
|||||||
player.Play()
|
player.Play()
|
||||||
for player.IsPlaying() {
|
for player.IsPlaying() {
|
||||||
if t.SoundLock.Stop {
|
if t.SoundLock.Stop {
|
||||||
t.SoundLock.Release()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
time.Sleep(time.Millisecond)
|
time.Sleep(time.Millisecond)
|
||||||
}
|
}
|
||||||
if err = player.Close(); err != nil {
|
if err = player.Close(); err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
t.SoundLock.Release()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,8 @@ func (t *ReversoTranslate) StopTTS() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *ReversoTranslate) PlayTTS(lang, message string) error {
|
func (t *ReversoTranslate) PlayTTS(lang, message string) error {
|
||||||
|
defer t.SoundLock.Release()
|
||||||
|
|
||||||
name, ok := voiceName[lang]
|
name, ok := voiceName[lang]
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New(t.EngineName + " does not support text to speech of " + lang)
|
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)
|
req.Header.Add("User-Agent", userAgent)
|
||||||
res, err := http.DefaultClient.Do(req)
|
res, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
decoder, err := mp3.NewDecoder(res.Body)
|
decoder, err := mp3.NewDecoder(res.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
|
otoCtx, readyChan, err := oto.NewContext(decoder.SampleRate(), 2, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
<-readyChan
|
<-readyChan
|
||||||
@ -59,17 +58,14 @@ func (t *ReversoTranslate) PlayTTS(lang, message string) error {
|
|||||||
player.Play()
|
player.Play()
|
||||||
for player.IsPlaying() {
|
for player.IsPlaying() {
|
||||||
if t.SoundLock.Stop {
|
if t.SoundLock.Stop {
|
||||||
t.SoundLock.Release()
|
|
||||||
return nil
|
return nil
|
||||||
} else {
|
} else {
|
||||||
time.Sleep(time.Millisecond)
|
time.Sleep(time.Millisecond)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err = player.Close(); err != nil {
|
if err = player.Close(); err != nil {
|
||||||
t.SoundLock.Release()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
t.SoundLock.Release()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user