tts (Premium)

Prev Next

개요

CLOVA Voice - Premium API는 음성으로 변환할 텍스트와 음색, 속도, 감정 등을 파라미터로 입력받아 음성을 합성하여 그 결과를 반환하는 HTTP 기반의 REST API입니다.

요청

curl -i -X POST \
	-H "Content-Type:application/x-www-form-urlencoded" \
	-H "X-NCP-APIGW-API-KEY-ID:{애플리케이션 등록 시 발급받은 client id값}" \
	-H "X-NCP-APIGW-API-KEY:{애플리케이션 등록 시 발급받은 client secret값}" \
	-d 'speaker={목소리 종류}&text={텍스트}&volume={볼륨}&speed={음성 재생 속도}&pitch={피치}' \
 'https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts'

요청 헤더

헤더명 설명
X-NCP-APIGW-API-KEY-ID 앱 등록 시 발급받은 Client ID
X-NCP-APIGW-API-KEY-ID:{Client ID}
X-NCP-APIGW-API-KEY 앱 등록 시 발급 받은 Client Secret
X-NCP-APIGW-API-KEY:{Client Secret}
Content-Type application/x-www-form-urlencoded로 고정
Content-Type: application/x-www-form-urlencoded

요청 파라미터

파라미터 이름 타입 설명 기본값 필수 여부
speaker string - 음성 합성 시 사용할 목소리 종류
- 각 목소리에 대한 정보는 음성 합성 목소리 목록 참조
없음 Y
text string - 음성으로 변환할 텍스트
- UTF-8 인코딩된 텍스트만 지원
- 기호나 괄호 안의 텍스트는 미변환
- 언어별 최대 글자 수 제한
  • 한국어, 일본어, 중국어, 대만어 : 2,000자
  • 영어, 스페인어 : 3,000자
없음 Y
volume integer - 음성 볼륨
- (-)5에서 5 사이의 정수 값
- (-)5이면 0.5배 작은 볼륨, 5이면 1.5배 더 큰 볼륨, 0이면 정상 볼륨으로 음성 합성
0 N
speed integer - 음성 속도
- (-)5에서 10 사이의 정수 값
- (-)5이면 2배 빠른 속도, 10이면 0.5배 더 느린 속도, 0이면 정상 속도로 음성 합성
0 N
pitch integer - 음성 피치
- (-)5에서 5 사이의 정수 값
- (-)5이면 1.2배 높은 피치, 5이면 0.8배 더 낮은 피치, 0이면 정상 피치로 음성 합성
0 N
emotion integer - 음성 감정
- 0에서 3 사이의 정수 값
- 지원 speaker : nara, vara, vmikyung, vdain, vyuna, vgoeun, vdaeseong (단, nara 는 3: 분노 미지원)
  • 0: 중립
  • 1: 슬픔
  • 2: 기쁨
  • 3: 분노
  • 0 N
    emotion-strength integer - 감정의 강도
    - 지원 speaker : vara, vmikyung, vdain, vyuna, vgoeun, vdaeseong (nara 미지원)
  • 0: 약함
  • 1: 보통
  • 2: 강함
  • 1 N
    format string - 음성 포맷
    - mp3 또는 wav
    mp3 N
    sampling-rate integer - 샘플링 레이트
    - wav 형식만 지원
    - 예외적으로, mijin은 16000 레이트만 지원
  • 8000
  • 16000
  • 24000
  • 48000
  • 24000 N
    alpha integer - 음색
    - (-)5에서 5 사이의 정수값
    - 0보다 크면 높은 음색, 0보다 작으면 낮은 음색
    0 N
    end-pitch integer - 끝음 처리
    - (-)5에서 5 사이의 정수값
    0보다 크면 문장 끝을 올리고, 0보다 작으면 문장 끝을 내림
    - 지원 speaker : 'd'로 시작하는 speaker(ex.dara, danna..)와 clara, matt, meimei, liangliang, chiahua, kuanlin, carmen, jose
    0 N

    음성 합성 목소리 목록

    음성 합성에 사용될 목소리 종류에 대한 상세 설명은 다음과 같습니다.

    필드 이름 언어 설명
    dara_ang 아라(화남) 한국어 여성
    jinho 진호 한국어 남성
    mijin 미진 한국어 여성
    napple 늘봄 한국어 여성
    nara_call 아라(상담원) 한국어 여성
    nara 아라 한국어 여성
    nbora 보라 한국어 여성
    ndaeseong 대성 한국어 남성
    ndain 다인 한국어 아동(여)
    ndonghyun 동현 한국어 남성
    nes_c_hyeri 혜리 한국어 여성
    nes_c_kihyo 기효 한국어 남성
    nes_c_mikyung 미경 한국어 여성
    nes_c_sohyun 소현 한국어 여성
    neunseo 은서 한국어 여성
    neunwoo 은우 한국어 남성
    neunyoung 은영 한국어 여성
    ngaram 가람 한국어 아동(여)
    ngoeun 고은 한국어 여성
    ngyeongjun 경준 한국어 남성
    nhajun 하준 한국어 아동(남)
    nheera 희라 한국어 여성
    nian 이안 한국어 남성
    nihyun 이현 한국어 여성
    njaewook 재욱 한국어 남성
    njangj 드림 한국어 여성
    njihun 지훈 한국어 남성
    njihwan 지환 한국어 남성
    njinho 진호 한국어 남성
    njiwon 지원 한국어 여성
    njiyun 지윤 한국어 여성
    njonghyeok 종혁 한국어 남성
    njonghyun 종현 한국어 남성
    njooahn 주안 한국어 남성
    njoonyoung 준영 한국어 남성
    nkitae 기태 한국어 남성
    nkyunglee 경리 한국어 여성
    nkyungtae 경태 한국어 남성
    nkyuwon 규원 한국어 남성
    nmammon 악마 마몬 한국어 남성
    nmeow 야옹이 한국어 아동(여)
    nmijin 미진 한국어 여성
    nminjeong 민정 한국어 여성
    nminsang 민상 한국어 남성
    nminseo 민서 한국어 여성
    nminyoung 민영 한국어 여성
    nmovie 최무비 한국어 남성
    noyj 봄달 한국어 여성
    nraewon 래원 한국어 남성
    nreview 박리뷰 한국어 남성
    nsabina 마녀 사비나 한국어 여성
    nsangdo 상도 한국어 남성
    nseonghoon 성훈 한국어 남성
    nseungpyo 승표 한국어 남성
    nshasha 샤샤 한국어 여성
    nsinu 신우 한국어 남성
    nsiyoon 시윤 한국어 남성
    nsujin 수진 한국어 여성
    nsunhee 선희 한국어 여성
    nsunkyung 선경 한국어 여성
    ntaejin 태진 한국어 남성
    ntiffany 기서 한국어 여성
    nwontak 원탁 한국어 남성
    nwoof 멍멍이 한국어 아동(남)
    nwoosik 우식 한국어 남성
    nyeji 예지 한국어 여성
    nyejin 예진 한국어 여성
    nyounghwa 정영화 한국어 여성
    nyoungil 영일 한국어 남성
    nyoungmi 영미 한국어 여성
    nyujin 유진 한국어 여성
    nyuna 유나 한국어 여성
    dara-danna 아라&안나 한국어+영어(미국) 여성
    dsinu-matt 신우&매트 한국어+영어(미국) 남성
    liangliang 량량 중국어 남성
    meimei 메이메이 중국어 여성
    dayumu 아유무 일본어 남성
    ddaiki 다이키 일본어 남성
    deriko 에리코 일본어 여성
    dhajime 하지메 일본어 남성
    dmio 미오 일본어 여성
    dnaomi 나오미 일본어 여성
    dnaomi_formal 나오미(뉴스) 일본어 여성
    dnaomi_joyful 나오미(기쁨) 일본어 여성
    driko 리코 일본어 여성
    dsayuri 사유리 일본어 여성
    dtomoko 토모코 일본어 여성
    nnaomi 나오미 일본어 여성
    nsayuri 사유리 일본어 여성
    ntomoko 토모코 일본어 여성
    shinji 신지 일본어 남성
    clara 클라라 영어 여성
    danna 안나 영어 여성
    djoey 조이 영어 여성
    matt 매트 영어 남성
    carmen 카르멘 스페인어 여성
    jose 호세 스페인어 남성
    chiahua 차화 대만어 여성
    kuanlin 관린 대만어 남성

    요청 바디

    • 해당 API 는 요청 바디를 필요로 하지 않습니다.

    응답

    응답 바디

    • MP3 또는 WAV 바이너리 데이터

    예시

    요청 예시

    curl -i -X POST \
    	-H "Content-Type:application/x-www-form-urlencoded" \
    	-H "X-NCP-APIGW-API-KEY-ID:{애플리케이션 등록 시 발급받은 client id값}" \
    	-H "X-NCP-APIGW-API-KEY:{애플리케이션 등록 시 발급받은 client secret값}" \
    	-d 'speaker=nara&text=만나서 반갑습니다&volume=0&speed=0&pitch=0&format=mp3' \
     'https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts'
    

    응답 예시

    [HTTP Response Header]
    HTTP/1.1 200 OK
    Server: nginx
    Date: Wed, 09 Sep 2020 02:35:50 GMT
    Content-Type: audio/mpeg
    Content-Length: 15216
    Connection: keep-alive
    Keep-Alive: timeout=5
    Playtime: 1890
    X-Chars-Count: 6
    X-QUOTA: 1
    X-Ssgw-Request-Id: f53c46c5-cce6-4943-b986-47ba752f8937
    X-Text-Length: 26
    
    [HTTP Response Body]
    {MP3 형식의 바이너리 데이터}
    

    API 예제

    // 네이버 음성합성 Open API 예제
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.Date;
    
    public class APIExamTTS {
    
        public static void main(String[] args) {
            String clientId = "YOUR_CLIENT_ID";//애플리케이션 클라이언트 아이디값";
            String clientSecret = "YOUR_CLIENT_SECRET";//애플리케이션 클라이언트 시크릿값";
            try {
                String text = URLEncoder.encode("만나서 반갑습니다.", "UTF-8"); // 13자
                String apiURL = "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts";
                URL url = new URL(apiURL);
                HttpURLConnection con = (HttpURLConnection)url.openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
                con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
                // post request
                String postParams = "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=" + text;
                con.setDoOutput(true);
                DataOutputStream wr = new DataOutputStream(con.getOutputStream());
                wr.writeBytes(postParams);
                wr.flush();
                wr.close();
                int responseCode = con.getResponseCode();
                BufferedReader br;
                if(responseCode==200) { // 정상 호출
                    InputStream is = con.getInputStream();
                    int read = 0;
                    byte[] bytes = new byte[1024];
                    // 랜덤한 이름으로 mp3 파일 생성
                    String tempname = Long.valueOf(new Date().getTime()).toString();
                    File f = new File(tempname + ".mp3");
                    f.createNewFile();
                    OutputStream outputStream = new FileOutputStream(f);
                    while ((read =is.read(bytes)) != -1) {
                        outputStream.write(bytes, 0, read);
                    }
                    is.close();
                } else {  // 오류 발생
                    br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                    String inputLine;
                    StringBuffer response = new StringBuffer();
                    while ((inputLine = br.readLine()) != null) {
                        response.append(inputLine);
                    }
                    br.close();
                    System.out.println(response.toString());
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    
    // 네이버 음성합성 Open API 예제
    <?php
      $client_id = "YOUR_CLIENT_ID";
      $client_secret = "YOUR_CLIENT_SECRET";
      $encText = urlencode("반갑습니다.");
      $postvars = "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=".$encText;
      $url = "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts";
      $is_post = true;
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, $is_post);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
      $headers = array();
      $headers[] = "X-NCP-APIGW-API-KEY-ID: ".$client_id;
      $headers[] = "X-NCP-APIGW-API-KEY: ".$client_secret;
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      $response = curl_exec ($ch);
      $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      echo "status_code:".$status_code."<br />";
      curl_close ($ch);
      if($status_code == 200) {
        //echo $response;
        $fp = fopen("tts.mp3", "w+");
        fwrite($fp, $response);
        fclose($fp);
        echo "<a href='tts.mp3'>TTS재생</a>";
      } else {
        echo "Error 내용:".$response;
      }
    ?>
    
    // 네이버 음성합성 Open API 예제
    var express = require('express');
    var app = express();
    var client_id = 'YOUR_CLIENT_ID';
    var client_secret = 'YOUR_CLIENT_SECRET';
    var fs = require('fs');
    app.get('/tts', function(req, res) {
      var api_url = 'https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts';
      var request = require('request');
      var options = {
        url: api_url,
        form: { speaker: 'nara', volume: '0', speed: '0', pitch: '0', text: '좋은 하루 되세요', format: 'mp3' },
        headers: { 'X-NCP-APIGW-API-KEY-ID': client_id, 'X-NCP-APIGW-API-KEY': client_secret },
      };
      var writeStream = fs.createWriteStream('./tts1.mp3');
      var _req = request.post(options).on('response', function(response) {
        console.log(response.statusCode); // 200
        console.log(response.headers['content-type']);
      });
      _req.pipe(writeStream); // file로 출력
      _req.pipe(res); // 브라우저로 출력
    });
    app.listen(3000, function() {
      console.log('http://127.0.0.1:3000/tts app listening on port 3000!');
    });
    
    // 네이버 음성합성 Open API 예제
    import os
    import sys
    import urllib.request
    client_id = "YOUR_CLIENT_ID"
    client_secret = "YOUR_CLIENT_SECRET"
    encText = urllib.parse.quote("반갑습니다 네이버")
    data = "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=" + encText;
    url = "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts"
    request = urllib.request.Request(url)
    request.add_header("X-NCP-APIGW-API-KEY-ID",client_id)
    request.add_header("X-NCP-APIGW-API-KEY",client_secret)
    response = urllib.request.urlopen(request, data=data.encode('utf-8'))
    rescode = response.getcode()
    if(rescode==200):
        print("TTS mp3 저장")
        response_body = response.read()
        with open('1111.mp3', 'wb') as f:
            f.write(response_body)
    else:
        print("Error Code:" + rescode)
    
    # -*- coding: utf-8 -*-
    import os
    import sys
    import urllib
    import urllib2
    reload(sys)
    sys.setdefaultencoding('utf-8')
    client_id = "YOUR_CLIENT_ID" # 애플리케이션 클라이언트 아이디값"
    client_secret = "YOUR_CLIENT_SECRET" # 애플리케이션 클라이언트 시크릿값"
    text = unicode("반갑습니다 네이버") # 음성 합성할 문장
    speaker = "nara" # 음성 합성에 사용할 목소리 종류
    speed = "0" # 음성 재생 속도
    volume = "0" # 음성 볼륨
    pitch = "0" # 음성 피치
    fmt = "mp3" # 음성 포멧
    val = {
        "speaker": speaker,
        "volume": volume,
        "speed":speed,
        "pitch": pitch,
        "text":text,
        "format": fmt
    }
    data = urllib.urlencode(val)
    url = "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts"
    headers = {
        "X-NCP-APIGW-API-KEY-ID" : client_id,
        "X-NCP-APIGW-API-KEY" : client_secret
    }
    request = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        print("TTS mp3 save")
        response_body = response.read()
        with open('1111.mp3', 'wb') as f:
            f.write(response_body)
    else:
        print("Error Code:" + rescode)
    
    
    // 네이버 음성합성 Open API 예제
    using System;
    using System.Net;
    using System.Text;
    using System.IO;
    
    namespace NaverAPI_Guide
    {
        public class APIExamTTS
        {
            static void Main(string[] args)
            {
                string text = "좋은 하루 되세요."; // 음성합성할 문자값
                string url = "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Headers.Add("X-NCP-APIGW-API-KEY-ID", "YOUR-CLIENT-ID");
                request.Headers.Add("X-NCP-APIGW-API-KEY", "YOUR-CLIENT-SECRET");
                request.Method = "POST";
                byte[] byteDataParams = Encoding.UTF8.GetBytes("speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=" + text);
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteDataParams.Length;
                Stream st = request.GetRequestStream();
                st.Write(byteDataParams, 0, byteDataParams.Length);
                st.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                string status = response.StatusCode.ToString();
                Console.WriteLine("status="+ status);
                using (Stream output = File.OpenWrite("c:/tts.mp3"))
                using (Stream input = response.GetResponseStream())
                {
                    input.CopyTo(output);
                }
                Console.WriteLine("c:/tts.mp3 was created");
            }
        }
    }
    
    curl "https://naveropenapi.apigw.gov-ntruss.com/tts-premium/v1/tts" \
    	-d "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=만나서 반갑습니다." \
    	-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
    	-H "X-NCP-APIGW-API-KEY-ID: {애플리케이션 등록 시 발급받은 client id 값}" \
    	-H "X-NCP-APIGW-API-KEY: {애플리케이션 등록 시 발급받은 client secret 값}" -v \
    		> out.mp3
    

    오류 코드

    HttpStatusCode ErrorCode ErrorMessage Description
    400 VS01 speaker parameter is needed. speaker 파라미터가 누락됨
    400 VS02 Unsupported speaker. speaker 파라미터에 지원하지 않는 값이 입력된 경우 발생
    400 VS03 speed parameter is needed. speed 파라미터가 누락됨
    400 VS04 Unsupported speed. speed 파라미터에 지원하지 않는 값이 입력된 경우 발생
    400 VS05 text parameter is needed. text 파라미터가 누락됨
    400 VS06 text parameter exceeds max length. text 파라미터에 입력할 수 있는 최대 글자 수 초과
    400 VS07 Unsupported volum 지원하지 않는 볼륨
    400 VS08 Unsupported pitch 지원하지 않는 피치
    400 VS10 text parameter check text 파라미터 확인 바람
    400 VS11 Unsupported format 지원하지 않는 포맷
    400 VS18 text parameter exceeds max length per sentence text 파라미터가 문장당 최대 허용값 초과
    500 VS99 Internal server error 서버 내부 오류 발생
    고객지원을 통해 문의하시 신속히 조치 예정