관련지식
Naver cloud, TTS, Clova Speech Synthesis

먼저 Clova Speech Synthesis (CSS) 에 대해 설명을 드리자면 ‘텍스트를 성우의 음성으로 자연스럽게 읽어주는 음성 합성 API’ 라고 소개하고 있습니다.

소개 URL
https://www.ncloud.com/product/aiService/css

일종의 TTS 서비스라고 볼수 있는데, 얼마전에 소개했던 ‘플러그인 없는 Text-To-Speech 만들기’ 와 다른 점은 말하는 목소리를 mp3 바이너리로 제공한다는 것입니다. 물론 네이버 클라우드에서 소개하는 것처럼 ‘현재 Clova에 적용된 음성 합성 기술 수준과 동일하게 제공됩니다.’ 도 장점일수 있지만 제가 사용하는 중국어 말하기 기능에선 어느쪽 발음이 더 좋은지 제가 구분을 못하겠네요

금액은 제 기준에선 저렴하다고 생각합니다. 제가 이 기능을 사용하려는 목적은 제가 만들고 공부하고 있는 중국어 단어장의 말하기 기능에 적용하려는 것인데, 현재 등록된 800단어를 단어 평균 6글자라고 했을때 4800글자, 즉 20원이 됩니다. 매번 들을때마다 api를 호출한다면 금액이 커지겠지만, api에서 받은 음성 바이너리를 내부에 저장하고 있을것이므로, 금액적인 부담은 전혀 없을것 같습니다.

사용 방법

우선 가입을 하고 로그인을 합니다. 좌측 메뉴에서 ‘All Products’ 를 클릭합니다.

‘AI·NAVER API’ 를 클릭합니다.

‘Application 등록’을 클릭합니다.

약관이 나오는데 스크립트 오류가 나서 그런지 약관이 안보입니다. 이상한 내용이 있었던건 아니겠죠? 그냥 동의하고 넘어갑니다.

Application 이름을 적당히 입력하고 ‘Clova Speech Synthesis (CSS)’ 를 선택합니다.
하단에는 ‘서비스 환경 등록’ 항목이 있는데 브라우저 환경이 아니라면 등록하지 않아도 될것 같습니다. 저는 제 도메인과 http://localhost 를 등록하였습니다.

저장을 하면 아래와 같이 등록이 됩니다. 인증 정보 를 클릭하면 API호출에 필요한 Client ID, Client Secret 값을 볼수가 있는데, 매우 중요한 정보이므로 노출되지 않도록 합니다.


샘플 코드 작성

API 가이드
https://apidocs.ncloud.com/ko/ai-naver/clova_speech_synthesis/tts/

위 API 가이드에 Java, JS, PHP, PYTHON, C#, BASH 별로 샘플 소스가 있습니다. JS는 Node.js 코드로 되어있는데 request 패키지를 이용하므로 설치가 안되었으면 설치를 하셔야 합니다.

  1. npm install request

샘플은 파일에 바로 저장하거나 response에 보내는것으로 작성되어있는데, 저는 DB에 저장할 생각이므로 바이너리 데이터로 꺼내는 샘플로 바꾸겠습니다. 이 값은 BLOB으로 저장했다가 <audio> 태그등에 사용할수 있습니다.

  1. var options = {
  2. url: api_url,
  3. form: { speaker: 'meimei', speed: '0', text: '往前' },
  4. headers: { 'X-NCP-APIGW-API-KEY-ID': 'Client ID', 'X-NCP-APIGW-API-KEY': 'Client Secret' },
  5. };
  6. request.post(options).on('response', function(response) {
  7. response.on('data', function(data) {
  8. console.log(data); //바이너리 버퍼
  9. });
  10. });

정리

안드로이드에서 브라우저에 내장된 TTS 기능이 불안정하고, 웹뷰에서는 TTS 기능을 제공하지 않는데 네이버 클라우드의 CSS 서비스를 사용하면 거의 모든 브라우저에서 서비스를 제공할수 있으므로 매우 매력적입니다. 다만 과금요소가 있으므로 ‘한도 및 알람설정’ 을 설정하여 과다 청구되지 않도록 하셔야 하겠습니다.

기존에 서비스 이용하던분 확인 필요

2019년 8월 28일 현재 테스트 한 결과 ‘가’ 한글자를 요청했을 때 대시보드의 사용량이 3씩 카운트 되는것을 확인하여 네이버 클라우드 측에 문의하였습니다.(두글자를 요청하면 6이 증가했습니다.) 아마 UTF-8로 인코딩했을때 만들어지는 3바이트 값을 기준으로 카운트 하고 있는듯 한데, 바이트가 아니라 글자수로 카운트되는게 맞다는 1차 답변을 받았습니다.

하지만 현재 상황은 3씩 카운트 되는 상태이며 Node.js 가 아니라 ‘https://apidocs.ncloud.com/ko/ai-naver/clova_speech_synthesis/tts/‘ 에서 공식 가이드하는 샘플로 해도 동일 했습니다.

  1. curl "https://naveropenapi.apigw.ntruss.com/voice/v1/tts" \
  2. -d "speaker=mijin&speed=0&text=가나다" \
  3. -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  4. -H "X-NCP-APIGW-API-KEY-ID: SECRET_ID" \
  5. -H "X-NCP-APIGW-API-KEY: SECRET_KEY" -v \
  6. > out.mp3

그리고 오후 3시 47분 최종 답변 받았습니다.

원래 글자수로 카운트를 하는게 맞고 그렇게 서비스하고 있었으나 최근에 바이트로 카운트 되도록 수정된것을 확인하였고, 그 부분은 원복을 했다고 합니다. 그리고 오과금 청구했던 내역은 찾아서 조치하겠다고 합니다. 원래 청구 금액의 세배가 청구될수 있는 상황이니, 이미 API를 사용중인 고객 또는 기업은 네이버 클라우드에 연락하여 환불 금액에 대해 확인해보시면 좋을것 같습니다.