tts (Premium)
    • PDF

    tts (Premium)

    • PDF

    Article Summary

    概要

    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.ntruss.com/tts-premium/v1/tts'
    

    リクエストパラメータ

    パラメータ名タイプ説明デフォルト値要否
    speakerstring音声合成に使用する声の種類
    • 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: ウシク: 韓国語、男性の声
    • vara: アラ(pro): 韓国語、女性の声
    • vmikyung: ミギョン(pro): 韓国語、女性の声
    • vdain: ダイン(pro): 韓国語、女性の声
    • vyuna: ユナ(pro): 韓国語、女性の声
    • vhyeri: ヘリ(pro): 韓国語、女性の声
    • dara-danna: アラ&アンナ: 韓国語+英語(アメリカ)、女性の声
    • dsinu-matt: シヌ&マット: 韓国語+英語(アメリカ)、男性の声
    • nsabina : 魔女サビナ: 韓国語、女性の声
    • nmammon : 悪魔マーモン: 韓国語、男性の声
    • nmeow : ニャンコ: 韓国語、子供の声(女)
    • nwoof : ワンちゃん: 韓国語、子供の声(男)
    • nreview : パクレビュー: 韓国語、男性の声
    • nyounghwa : ジョンヨンファ: 韓国語、女性の声
    • nmovie : チェムービー: 韓国語、男性の声
    • nsangdo : サンド: 韓国語、男性の声
    • nshasha : シャシャ: 韓国語、女性の声
    • nian : イアン: 韓国語、男性の声
    • ndonghyun : ドンヒョン: 韓国語、男性の声
    • vian : イアン(pro): 韓国語、男性の声
    • vdonghyun : ドンヒョン(pro): 韓国語、男性の声
    • dsayuri : サユリ: 日本語、女性の声
    • dtomoko : トモコ: 日本語、女性の声
    • dnaomi : ナオミ: 日本語、女性の声
    • vgoeun : ゴウン(pro): 韓国語、女性の声
    • vdaeseong : デソン(pro): 韓国語、男性の声
    • ngyeongjun : ギョンジュン: 韓国語、男性の声
    • ndaeseong : デソン: 韓国語、男性の声
    • njonghyeok : ジョンヒョク: 韓国語、男性の声
    なしY
    textstring- 音声合成する文章
    - UTF-8 エンコードされたテキストのみサポート
    - 最大 2000字まで音声合成
    - 記号や括弧内のテキストは読まない
    なし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(ただし、naraは 3: 怒り未対応)
  • 0: 中立
  • 1: 悲しみ
  • 2: 喜び
  • 3: 怒り
  • 0N
    emotion-strengthinteger- 感情の強度
    - 対応 speaker: vara、vmikyung、vdain、vyuna(naraは未対応)
  • 0: 弱い
  • 1: 普通
  • 2: 強い
  • 1N
    formatstring- 音声フォーマット
    - mp3または wav
    mp3N
    sampling-rateinteger- サンプリングレート
    - wavフォーマット時のみ対応し、mp3フォーマットは24000から変更不可
    ただし、mijinは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

    リクエストヘッダ

    ヘッダ名説明
    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

    リクエストボディ

    • 該当 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.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のユースケース

    // NAVER音声合成 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";//アプリケーションクライアント ID値";
            String clientSecret = "YOUR_CLIENT_SECRET";//アプリケーション クライアントシークレット値";
            try {
                String text = URLEncoder.encode("お会いできて嬉しいです。"、"UTF-8"); // 13字
                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) { // 正常呼び出し
                    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);
            }
        }
    }
    
    // NAVER音声合成 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.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;
      }
    ?>
    
    // NAVER音声合成 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.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!');
    });
    
    // NAVER音声合成 Open APIのユースケース
    import os
    import sys
    import urllib.request
    client_id = "YOUR_CLIENT_ID"
    client_secret = "YOUR_CLIENT_SECRET"
    encText = urllib.parse.quote("こんにちは 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("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" # アプリケーションクライアント ID値"
    client_secret = "YOUR_CLIENT_SECRET" # アプリケーションクライアント シークレット値"
    text = unicode("こんにちは NAVER") # 音声合成する文章
    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.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音声合成 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.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=お会いできて光栄です。" \
    	-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.