tts (Premium)
    • PDF

    tts (Premium)

    • PDF

    기사 요약

    개요

    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-pub.fin-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-Typeapplication/x-www-form-urlencoded로 고정
    Content-Type: application/x-www-form-urlencoded

    요청 파라미터

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

    음성 합성 목소리 목록

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

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

    요청 바디

    • 해당 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-pub.fin-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 예제

    {{% code-template %}}

    // 네이버 음성합성 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-pub.fin-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-pub.fin-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-pub.fin-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-pub.fin-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-pub.fin-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-pub.fin-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-pub.fin-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
    

    오류 코드

    HttpStatusCodeErrorCodeErrorMessageDescription
    400VS01speaker parameter is needed.speaker 파라미터 누락
    400VS02Unsupported speaker.지원하지 않는 speaker 파라미터
    400VS03Speed parameter is needed.speed 파라미터 누락
    400VS04Unsupported speed.지원하지 않는 speed 파라미터
    400VS05text parameter is needed.text 파라미터 누락
    400VS06text parameter exceeds max length.text 파라미터 입력 글자수 초과
    400VS07Unsupported volume.지원하지 않는 볼륨
    400VS08Unsupported pitch.지원하지 않는 피치
    400VS09Unsupported alpha.지원하지 않는 음색
    400VS10Text parameter check.합성할 수 없는 text 존재
    400VS11Unsupported format.지원하지 않는 포맷
    400VS14Unsupported emotion value.지원하지 않는 감정 파라미터
    400VS18Text parameter exceeds max length per sentence.문장당 최대 길이(200자) 초과
    400VS19Unsupported emotion-strength.지원하지 않는 감정 강도
    400VS26Failed to make tts.TTS 생성 실패
    400VS46Unsupported end-pitch.지원하지 않는 끝음 처리
    500VS99Internal server error서버 내부 오류 발생
    고객지원 문의 필요

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.