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.
voicebot/testtts/testtts.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()
}