tts (Premium)
    • PDF

    tts (Premium)

    • PDF

    Article Summary

    Overview

    CLOVA Voice - Premium API is an HTTP-based REST API that synthesizes speech from text using parameters, such as tone, speed, and emotion.

    Requests

    curl -i -X POST \
    	-H "Content-Type:application/x-www-form-urlencoded" \
    	-H "X-NCP-APIGW-API-KEY-ID:{Client ID value issued upon registering the application}" \
    	-H "X-NCP-APIGW-API-KEY:{Client secret value issued upon registering the application}" \
    	-d 'speaker={voice type}&text={text}&volume={volume}&speed={speech playback speed}&pitch={pitch}’ \
     'https://naveropenapi.apigw.ntruss.com/tts-premium/v1/tts'
    

    Request parameters

    Parameter nameTypeDescriptionDefault valueRequirement status
    speakerstringType of voice to use for speech synthesis
    • nara: Ara: Korean, female voice
    • nara_call: Ara (agent): Korean, female voice
    • nminyoung: Minyoung: Korean, female voice
    • nyejin: Yejin: Korean, female voice
    • mijin: Mijin: Korean, female voice
    • jinho: Jinho: Korean, male voice
    • clara: Clara: English, female voice
    • matt: Matt: English, male voice
    • shinji: Shinji: Japanese, male voice
    • meimei: Meimei: Chinese, female voice
    • liangliang: Liangliang: Chinese, male voice
    • jose: Jose: Spanish, male voice
    • carmen: Carmen: Spanish, female voice
    • nminsang: Minsang: Korean, male voice
    • nsinu: Sinwoo: Korean, male voice
    • nhajun: Hajun: Korean, child voice (male)
    • ndain: Dain: Korean, child voice (female)
    • njiyun: Jiyun: Korean, female voice
    • nsujin: Sujin: Korean, female voice
    • njinho: Jinho: Korean, male voice
    • njihun: Jihun: Korean, male voice
    • njooahn: Jooahn: Korean, male voice
    • nseonghoon: Seonghoon: Korean, male voice
    • njihwan: Jihwan: Korean, male voice
    • nsiyoon: Siyoon: Korean, male voice
    • ngaram: Garam: Korean, child voice (female)
    • ntomoko: Tomoko: Japanese, female voice
    • nnaomi: Naomi: Japanese, female voice
    • dnaomi_joyful: Naomi (joyful): Japanese, female voice
    • dnaomi_formal: Naomi (news): Japanese, female voice
    • driko: Riko: Japanese, female voice
    • deriko: Eriko: Japanese, female voice
    • nsayuri: Sayuri: Japanese, female voice
    • ngoeun: Goeun: Korean, female voice
    • neunyoung: Eunyoung: Korean, female voice
    • nsunkyung: Sunkyung: Korean, female voice
    • nyujin: Yujin: Korean, female voice
    • ntaejin: Taejin: Korean, male voice
    • nyoungil: Youngil: Korean, male voice
    • nseungpyo: Seungpyo: Korean, male voice
    • nwontak: Wontak: Korean, male voice
    • dara_ang: Ara (angry): Korean, female voice
    • nsunhee: Sunhee: Korean, female voice
    • nminseo: Minseo: Korean, female voice
    • njiwon: Jiwon: Korean, female voice
    • nbora: Bora: Korean, female voice
    • njonghyun: Jonghyun: Korean, male voice
    • njoonyoung: Joonyoung: Korean, male voice
    • njaewook: Jaewook: Korean, male voice
    • danna: Anna: English, female voice
    • djoey: Joey: English, female voice
    • dhajime: Hajime: Japanese, male voice
    • ddaiki: Daiki: Japanese, male voice
    • dayumu: Ayumu: Japanese, male voice
    • dmio: Mio: Japanese, female voice
    • chiahua: Chiahua: Taiwanese, female voice
    • kuanlin: Kuanlin: Taiwanese, male voice
    • nes_c_hyeri: Hyeri: Korean, female voice
    • nes_c_sohyun: Sohyun: Korean, female voice
    • nes_c_mikyung: Mikyung: Korean, female voice
    • nes_c_kihyo: Kihyo: Korean, male voice
    • ntiffany: Kiseo: Korean, female voice
    • napple: Neulbom: Korean, female voice
    • njangj: Deurim: Korean, female voice
    • noyj: Bomdal: Korean, female voice
    • neunseo: Eunseo: Korean, female voice
    • nheera: Heera: Korean, female voice
    • nyoungmi: Youngmi: Korean, female voice
    • nnarae: Narae: Korean, female voice
    • nyeji: Yeji: Korean, female voice
    • nyuna: Yuna: Korean, female voice
    • nkyunglee: Kyunglee: Korean, female voice
    • nminjeong: Minjeong: Korean, female voice
    • nihyun: Leehyeon: Korean, female voice
    • nraewon: Raewon: Korean, male voice
    • nkyuwon: Kyuwon: Korean, male voice
    • nkitae: Kitae: Korean, male voice
    • neunwoo: Eunwoo: Korean, male voice
    • nkyungtae: Kyungtae: Korean, male voice
    • nwoosik: Woosik: Korean, male voice
    • vara: Ara (pro): Korean, female voice
    • vmikyung: Mikyung (pro): Korean, female voice
    • vdain: Dain (pro): Korean, female voice
    • vyuna: Yuna (pro): Korean, female voice
    • vhyeri: Hyeri (pro): Korean, female voice
    • dara-danna: Ara & Anna: Korean + English (US), female voice
    • dsinu-matt: Shinwoo & Matt: Korean + English (US), male voice
    • nsabina: Witch Sabina: Korean, female voice
    • nmammon: Demon Mammon: Korean, male voice
    • nmeow: Kitty: Korean, child voice (female)
    • nwoof: Doggy: Korean, child voice (male)
    • nreview: Park Leebyu: Korean, male voice
    • nyounghwa: Jung Younghwa: Korean, female voice
    • nmovie: Choi Moobi: Korean, male voice
    • nsangdo: Sangdo: Korean, male voice
    • nshasha: Shasha: Korean, female voice
    • nian: Ian: Korean, male voice
    • ndonghyun: Donghyun: Korean, male voice
    • vian: Ian (pro): Korean, male voice
    • vdonghyun: Donghyun (pro): Korean, male voice
    • dsayuri: Sayuri: Japanese, female voice
    • dtomoko: Tomoko: Japanese, female voice
    • dnaomi: Naomi: Japanese, female voice
    • vgoeun: Goeun (pro): Korean, female voice
    • vdaeseong: Daeseong (pro): Korean, male voice
    • ngyeongjun: Gyeongjun: Korean, male voice
    • ndaeseong: Daeseong: Korean, male voice
    • njonghyeok: Jonghyeok: Korean, male voice
    NoneY
    textstring- Sentence to be synthesized
    - Supports UTF-8-encoded text only
    - Speech synthesis of up to 2000 characters
    - Does not read symbols or text in parentheses
    NoneY
    volumeinteger- Speech volume
    - Integer value between (-)5 and 5
    - (-)5 for 0.5 times lower volume, 5 for 1.5 times higher volume, and 0 for normal volume for speech synthesis
    0N
    speedinteger- Speech speed
    - Integer value between (-)5 and 5
    - (-)5 for 2 times faster speed, 5 for 0.5 times slower speed, and 0 for normal speed for speech synthesis
    0N
    pitchinteger- Speech pitch
    - Integer value between (-)5 and 5
    - (-)5 for 1.2 times higher pitch, 5 for 0.8 times lower pitch, and 0 for normal pitch for speech synthesis
    0N
    emotioninteger- Speech emotion
    - Integer value between 0 and 3
    - Supported speakers: nara, vara, vmikyung, vdain, vyuna (however, 3: angry is not supported by nara)
  • 0: neutral
  • 1: sad
  • 2: joyful
  • 3: angry
  • 0N
    emotion-strengthinteger- Intensity of emotion
    - Supported speakers: vara, vmikyung, vdain, vyuna (nara not supported)
  • 0: weak
  • 1: normal
  • 2: strong
  • 1N
    formatstring- Speech format
    - mp3 or wav
    mp3N
    sampling-rateinteger- Sampling rate
    - Supported only in WAV format; MP3 format is fixed at 24000 and cannot be changed
    However, mijin only supports 16000
  • 8000
  • 16000
  • 24000
  • 48000
  • 24000N
    alphainteger- Tone
    - Integer value between (-)5 and 5
    - Higher tone when greater than 0, lower tone when less than 0
    0N
    end-pitchinteger- End-pitch processing
    - Integer value between (-)5 and 5
    Raise the end of the sentence if greater than 0, and lower the end of the sentence if less than 0
    - Supported speakers: speakers starting with "d" (e.g., dara, danna) and clara, matt, meimei, liangliang, chiahua, kuanlin, carmen, jose
    0N

    Request headers

    Header nameDescription
    X-NCP-APIGW-API-KEY-IDClient ID issued upon registering the app
    X-NCP-APIGW-API-KEY-ID:{Client ID}
    X-NCP-APIGW-API-KEYClient secret issued upon registering the app
    X-NCP-APIGW-API-KEY:{Client Secret}
    Content-TypeFixed as application/x-www-form-urlencoded
    Content-Type: application/x-www-form-urlencoded

    Request bodies

    • This API does not require request bodies.

    Responses

    Response bodies

    • Binary MP3 or WAV data

    Examples

    Request examples

    curl -i -X POST \
    	-H "Content-Type:application/x-www-form-urlencoded" \
    	-H "X-NCP-APIGW-API-KEY-ID:{Client ID value issued upon registering the application}" \
    	-H "X-NCP-APIGW-API-KEY:{Client secret value issued upon registering the application}" \
    	-d 'speaker=nara&text=Nice to meet you&volume=0&speed=0&pitch=0&format=mp3' \
     'https://naveropenapi.apigw.ntruss.com/tts-premium/v1/tts'
    

    Response examples

    [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]
    {Binary data in MP3 format}
    

    API examples

    // NAVER speech synthesis open API example
    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";//Application client ID value";
            String clientSecret = "YOUR_CLIENT_SECRET";//Application client secret value";
            try {
                String text = URLEncoder.encode("Nice to meet you.", "UTF-8"); // 13 characters
                String apiURL = "https://naveropenapi.apigw.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) { // Successful call
                    InputStream is = con.getInputStream();
                    int read = 0;
                    byte[] bytes = new byte[1024];
                    // Randomly generates the MP3 file name
                    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 {  // Error occurred
                    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);
            }
        }
    }
    
    // NAVER speech synthesis open API example
    <?php
      $client_id = "YOUR_CLIENT_ID";
      $client_secret = "YOUR_CLIENT_SECRET";
      $encText = urlencode("Nice to meet you.");
      $postvars = "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=".$encText;
      $url = "https://naveropenapi.apigw.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'>play TTS</a>";
      } else {
        echo "Error content:".$response;
      }
    ?>
    
    // NAVER speech synthesis open API example
    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.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: 'Have a good day', 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); // Output to file
      _req.pipe(res); // Output to browser
    });
    app.listen(3000, function() {
      console.log('http://127.0.0.1:3000/tts app listening on port 3000!');
    });
    
    // NAVER speech synthesis open API example
    import os
    import sys
    import urllib.request
    client_id = "YOUR_CLIENT_ID"
    client_secret = "YOUR_CLIENT_SECRET"
    encText = urllib.parse.quote("Hello, NAVER")
    data = "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=" + encText;
    url = "https://naveropenapi.apigw.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("save 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" # application client ID value";
    client_secret = "YOUR_CLIENT_SECRET" # application client secret value"
    text = unicode("Hello, NAVER") # sentence for speech synthesis
    speaker = "nara" # type of voice to use for speech synthesis
    speed = "0" # speech playback speed
    volume = "0" # speech volume
    pitch = "0" # speech pitch
    fmt = "mp3" # speech format
    val = {
        "speaker": speaker,
        "volume": volume,
        "speed":speed,
        "pitch": pitch,
        "text":text,
        "format": fmt
    }
    data = urllib.urlencode(val)
    url = "https://naveropenapi.apigw.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)
    
    
    // NAVER speech synthesis open API example
    using System;
    using System.Net;
    using System.Text;
    using System.IO;
    
    namespace NaverAPI_Guide
    {
        public class APIExamTTS
        {
            static void Main(string[] args)
            {
                string text = "Have a good day."; // Character value for speech synthesis
                string url = "https://naveropenapi.apigw.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.ntruss.com/tts-premium/v1/tts" \
    	-d "speaker=nara&volume=0&speed=0&pitch=0&format=mp3&text=Nice to meet you." \
    	-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
    	-H "X-NCP-APIGW-API-KEY-ID: {Client ID value issued upon registering the application}" \
    	-H "X-NCP-APIGW-API-KEY: {Client secret value issued upon registering the application}" -v \
    		> out.mp3
    

    Error codes

    HttpStatusCodeErrorCodeErrorMessageDescription
    400VS01speaker parameter is needed.Missing speaker parameter
    400VS02Unsupported speaker.Unsupported speaker parameter
    400VS03Speed parameter is needed.Missing speed parameter
    400VS04Unsupported speed.Unsupported speed parameter
    400VS05text parameter is needed.Text parameter is missing
    400VS06text parameter exceeds max length.Text parameter exceeds the maximum number of characters
    400VS07Unsupported volume.Unsupported volume
    400VS08Unsupported pitch.Unsupported pitch
    400VS09Unsupported alpha.Unsupported tone
    400VS10Text parameter check.Existence of text that cannot be synthesized
    400VS11Unsupported format.Unsupported format
    400VS14Unsupported emotion value.Unsupported emotion parameter
    400VS18Text parameter exceeds max length per sentence.Exceeds the maximum length per sentence (200 characters)
    400VS19Unsupported emotion-strength.Unsupported intensity of emotion
    400VS26Failed to make tts.TTS creation failed
    400VS46Unsupported end-pitch.Unsupported end-pitch processing
    500VS99Internal server errorOccurrence of internal server error
    Requires customer support

    Was this article helpful?

    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.