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() }