[Golang] Golang으로 Naver TTS (Clova Speech Synthesis API) 사용하기
- 꼬반
- 2017. 8. 23. 13:38
Naver TTS API를 사용하기 위해서는 먼저 아래 링크를 참고하여 API 이용신청을 먼저 해야 한다.
https://developers.naver.com/docs/clova/api/#/CSS/API_Guide.md#clova-speech-synthesis-api-가이드
이후 발급받은 키와 시크릿 키를 가지고 진행한다.
위 가이드에는 Golang 구현 예제가 없어 아래와 같이 테스트 해보았다. (소스는 테스트 목적으로 허접...)
다른 언어들의 경우 대부분 위 링크에 나와 있으니 참고할 것.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package main import ( "bytes" "fmt" "io" "net/http" "net/url" "os" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/tts", func(c *gin.Context) { api_uri := "https://openapi.naver.com/v1/voice/tts.bin" client_key := "api_key" client_secret := "api_secret" data := url.Values{} data.Set("speaker", "clara") data.Add("speed", "0") data.Add("text", "Hello, Clara.") client := &http.Client{} req, _ := http.NewRequest("POST", api_uri, bytes.NewBufferString(data.Encode())) req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") req.Header.Add("X-Naver-Client-Id", client_key) req.Header.Add("X-Naver-Client-Secret", client_secret) resp, _ := client.Do(req) fmt.Println(resp.Status) defer resp.Body.Close() out, _ := os.Create("out.mp3") io.Copy(out, resp.Body) c.JSON(http.StatusOK, gin.H{ "result": "ok", }) }) } | cs |
이걸 테스트 한 목적은 이전 글에서 작성한 것처럼 토익 공부 중에 오답노트 웹앱을 만드는데
LC를 어떻게 하면 좋을까 생각하다가 TTS API를 활용해보기로 한것.
Golang 을 백엔드로 사용하고 있기 때문에 Golang 으로 구현해보았고 이걸 이용해서 LC 오답문제를
불러오면 해당 메세지를 위 api로 mp3로 변환 후 재생해줄 예정이다.
다만 미흡한 점이 메세지가 바로 바로 재생되고 중간에 스페이스로 메세지간에 공백을 넣어도 문장 간 여백을
설정할 수 없는 점이 있다. 아쉬운 부분이 있지만 Naver TTS API 품질이 생각보다 만족스러워서 다행이다.
참고 링크
https://stackoverflow.com/questions/19253469/make-a-url-encoded-post-request-using-http-newrequest
https://stackoverflow.com/questions/16311232/how-to-pipe-an-http-response-to-a-file-in-go
http://golang.site/go/article/103-HTTP-POST-%ED%98%B8%EC%B6%9C