You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
|
|
"gitlab.com/cinnamon/voiceagent/icserror"
|
|
"gitlab.com/cinnamon/voiceagent/tts"
|
|
)
|
|
|
|
func main() {
|
|
ssml := `화요일인 19일은 낮 최고 기온이 26도까지 오르면서 대체로 맑고 따뜻한 봄날씨가 이어진다. 여전히 일교차가 커 건강관리에 주의가 필요하다. 기상청은 "내륙을 중심으로 낮과 밤의 기온차가 15~20도로 매우 크겠으니 건강관리에 각별히 유의하라"고 예보했다.`
|
|
fmt.Println("Text size :", len(ssml))
|
|
|
|
/*GOOGLE
|
|
voice, err := tts.TTS(ssml, 8000)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
ioutil.WriteFile("hello.pcm", voice, 0644)
|
|
*/
|
|
|
|
//SELVAS
|
|
wg := sync.WaitGroup{}
|
|
|
|
for i := 0; i < 1; i++ {
|
|
wg.Add(1)
|
|
go func(ch int) {
|
|
fmt.Printf("[%d] Start\n", ch)
|
|
|
|
start := time.Now()
|
|
stts, err := tts.NewSTTS("211.34.105.117", "6036", ssml)
|
|
if err != nil {
|
|
fmt.Printf("[%d] %s\n", ch, err.GetMessage())
|
|
wg.Done()
|
|
return
|
|
}
|
|
fmt.Printf("[%d] TTS opened\n", ch)
|
|
|
|
voiceBuf := make([]byte, 640000)
|
|
idx := 0
|
|
for {
|
|
frame, size, rerr := stts.Read()
|
|
if rerr == icserror.ICSERRTTSContinue {
|
|
copy(voiceBuf[idx:], frame[:size])
|
|
fmt.Printf("[%d] TTS continue - %d\n", ch, size)
|
|
} else if rerr == icserror.ICSERRTTSOK {
|
|
fmt.Printf("[%d] TTS Done\n", ch)
|
|
break
|
|
} else if rerr != icserror.ICSERRTTSOK {
|
|
fmt.Printf("[%d] %s\n", ch, rerr.GetMessage())
|
|
break
|
|
}
|
|
idx += size
|
|
}
|
|
stts.Close()
|
|
fmt.Printf("[%d] TTS closed\n", ch)
|
|
|
|
end := time.Since(start) //.Now().Sub(start)
|
|
fmt.Printf("[%d] Elapsed Time : %s, Total size : %d\n", ch, end, idx)
|
|
|
|
fname := fmt.Sprintf("./stts-%d.pcm", ch)
|
|
os.WriteFile(fname, voiceBuf[:idx], 0666)
|
|
|
|
wg.Done()
|
|
}(i)
|
|
}
|
|
wg.Wait()
|
|
}
|