HTTP 인터페이스

IBM Watson® Text to Speech 서비스의 HTTP REST 인터페이스를 사용하여 문자-음성 변환을 합성하기 위해 GET 또는 POST /v1/synthesize 메소드를 호출합니다. 합성될 텍스트와 음성화된 오디오의 음성 및 형식을 지정합니다. 요청에 사용될 사용자 정의 모델을 지정할 수도 있습니다.

HTTP 인터페이스에 대한 자세한 정보는 API & SDK 참조를 참조하십시오.

텍스트-오디오 변환 합성

텍스트-오디오 변환을 합성하려면 서비스의 /v1/synthesize 메소드의 두 가지 버전 중 하나를 호출합니다.

  • GET /v1/synthesize 메소드는 필수 text 조회 매개변수로 합성될 텍스트를 허용합니다. 최대 요청 크기는 입력 텍스트, 지정한 SSML, URL 및 헤더를 포함하여 8KB입니다.
  • POST /v1/synthesize 메소드는 필수 요청 본문에서 JSON 구성으로 합성될 텍스트를 허용합니다. 최대 요청 크기는 8KB(URL 및 헤더용) 및 5KB(요청의 본문에 전송된 입력 텍스트용)입니다. 5KB 제한에는 지정하는 SSML이 포함됩니다.

/v1/synthesize 메소드의 두 가지 버전에는 다음 매개변수가 공통적으로 포함됩니다.

accept(조회 매개변수, 선택적 문자열)

서비스가 오디오를 리턴하는 요청된 오디오 형식 또는 MIME 유형을 지정합니다. HTTP Accept 요청 헤더로 이 값을 지정할 수도 있습니다. accept 조회 매개변수에 대한 인수를 URL로 인코딩합니다. 기본적으로 이 서비스는 오디오를 audio/ogg;codecs=opus 형식으로 반환합니다. 자세한 정보는 오디오 형식 사용을 참조하십시오.

Ogg 오디오 형식은 Safari 브라우저에서 지원되지 않습니다. Safari 브라우저에서 Text to Speech 서비스를 사용하는 경우에는 서비스에서 오디오를 반환할 다른 형식을 지정해야 합니다.

voice(조회 매개변수, 선택적 문자열)

텍스트가 오디오에서 음성화될 음성을 지정합니다. /v1/voices 메소드를 사용하여 지원되는 음성의 현재 목록을 가져오십시오. 기본 음성을 사용하도록 매개변수를 생략하십시오. 자세한 내용은 언어 및 음성기본 음성 사용하기를 참조하세요.

customization_id(조회 매개변수, 선택적 문자열)

합성에 사용할 사용자 정의 모델의 GUID(Globally Unique Identifier)를 지정합니다. 지정된 사용자 정의 모델은 합성에 사용되는 음성의 언어와 일치해야 합니다. 사용자 정의 ID를 포함하는 경우 사용자 정의 모델을 소유하는 서비스 인스턴스의 인증 정보를 사용하여 요청해야 합니다. 사용자 정의가 없는 지정된 음성을 사용하려면 매개변수를 생략하십시오. 자세한 정보는 사용자 정의 이해를 참조하십시오.

rate_percentage (query parameter, 선택 사항 integer)

전체 합성 요청에 대한 글로벌 말하기 속도를 지정합니다. 말하기 속도는 서비스가 합성한 텍스트를 음성으로 말하는 속도입니다. 속도가 높을수록 텍스트가 더 빨리 말하고 속도가 낮을수록 텍스트가 더 느리게 말하게 됩니다. 이 매개변수는 전체 요청에 대한 음성당 기본 요금을 변경합니다. 자세한 내용은 말하기 속도 수정하기를 참조하세요.

pitch_percentage (query parameter, 선택 사항 integer)

전체 합성 요청에 대한 글로벌 말하기 피치를 지정합니다. 말하기 음조는 서비스에서 합성하는 음성의 톤을 나타냅니다. 청취자가 음성의 톤을 얼마나 높거나 낮게 인식하는지를 나타냅니다. 음높이가 높으면 높은 톤으로 말하고, 음높이가 낮으면 낮은 톤으로 말하게 됩니다. 이 매개변수는 전체 요청에 대한 음성별 기본 피치를 변경합니다. 자세한 내용은 말하기 음조 수정을 참조하세요.

spell_out_mode(조회 매개변수, 선택적 문자열)

독일어 음성의 경우 문자열의 개별 문자를 어떻게 철자할지 지정합니다. 기본적으로 이 서비스는 언어의 텍스트를 합성하는 속도와 동일한 속도로 개별 문자를 철자합니다. 이 매개변수를 사용하여 서비스가 개별 문자의 철자를 1 singles, 2 pairs 또는 3 triples 그룹으로 더 느리게 철자하도록 지시할 수 있습니다. 자세한 내용은 문자열 철자법 지정하기를 참조하세요.

X-Watson-Metadata(요청 헤더, 선택적 문자열)

고객 ID를 요청과 함께 전달되는 데이터와 연관시키십시오. 자세한 정보는 정보 보안을 참조하십시오.

X-Watson-Learning-Opt-Out(요청 헤더, 선택적 부울)

IBM Cloud 서비스가 향후 사용자를 위해 서비스를 개선하기 위해 요청 및 응답 데이터를 기록하는지 여부를 나타냅니다. IBM에서 일반적인 서비스 개선을 위해 데이터에 액세스하지 못하게 하려면 이 매개변수를 true로 지정하십시오. 옵트 아웃은 IBM이 요청에 대해 사용자 데이터(텍스트 또는 오디오)를 디스크에 쓰지 않도록 지시합니다. 계정 수준에서 옵트아웃할 수도 있습니다. 자세한 정보는 요청 로깅을 참조하십시오.

/v1/synthesize 메소드에 대한 입력의 일부로 올바르지 않은 조회 매개변수 또는 JSON 필드를 지정하는 경우 서비스는 올바르지 않은 각 인수를 설명하고 나열하는 Warnings 응답 헤더를 리턴합니다. 경고가 발생하지만 요청이 성공합니다.

입력 텍스트 지정

POSTGET /v1/synthesize 메소드는 둘 다 SSML로 어노테이션이 지정된 텍스트 또는 일반 입력 텍스트를 채택합니다. 두 버전은 주로 합성할 텍스트를 지정하는 방법에 따라 다릅니다. 다음 예에서는 Hello world 일반 텍스트를 전달합니다.

  • POST /v1/synthesize 메소드는 요청의 본문에서 입력 텍스트를 허용합니다. 일반 텍스트 또는 SSML을 포함하는 간단한 JSON 구문을 사용하여 입력을 지정하십시오. application/json 헤더에 Content-Type 값도 지정해야 합니다.

    IBM Cloud

    curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X POST \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    
  • GET /v1/synthesize 메소드는 text 조회 매개변수로 지정되는 입력 텍스트를 허용합니다. 입력을 일반 텍스트 또는 SSML로 지정하며, 둘 다 URL로 인코딩되어야 합니다.

    IBM Cloud

    curl -X GET -u "apikey:{apikey}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X GET \
    --header "Authorization: Bearer {token}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"""
    

POSTGET 메소드는 동등한 기능을 제공하지만 POST 메소드를 사용하여 서비스에 입력 텍스트를 전달하는 것이 항상 더 안전합니다. POST 요청은 요청 본문의 입력을 전달합니다. GET 요청은 URL의 데이터를 표시합니다.

입력 텍스트 구두점 찍기

일반적으로 사용하는 구두점을 사용하여 합성을 위한 텍스트를 작성하십시오. 예를 들어, 일반적인 쓰기의 경우와 같이 쉼표, 마침표, 느낌표, 물음표를 포함하십시오.

서비스는 텍스트를 합성할 때 구두점을 고려합니다. 예를 들어, 쉼표 및 문장 끝 구두점은 합성된 음성의 적절한 위치에 일시정지를 삽입하여 오디오에 적용됩니다. 마침표, 느낌표, 물음표와 같은 문장 끝 구두점은 음성의 억양과 굴절도 변경합니다. 또한 SSML 요소를 사용하여 이러한 측면의 음성을 적용할 수 있습니다.

SSML 입력 지정

SSML(Speech Synthesis Markup Language)은 Text to Speech 서비스와 같은 음성 합성 애플리케이션을 위해 텍스트의 어노테이션을 제공하도록 설계된 XML 기반 마크업 언어입니다. SSML 요소 및 속성을 사용하여 합성과 생성되는 오디오 출력을 더욱 강력하게 제어할 수 있습니다.

SSML을 사용하여 입력 텍스트에 어노테이션을 지정하는 방법에 관한 자세한 정보는 SSML 이해를 참조하십시오. 지원되는 모든 요소 및 속성의 인벤토리는 SSML 요소를 참조하십시오.

XML 제어 문자 이스케이프

XML 기반 SSML 어노테이션이 포함된 입력 텍스트를 제출할 수 있으므로 SSML이 올바르며 제대로 구성되어 있는지 확인하기 위해 서비스는 모든 입력을 유효성 검증합니다. 그러므로 입력에 SSML이 포함되는지 여부에 관계 없이 입력 텍스트에 표시되는 모든 XML 제어 문서를 이스케이프해야 합니다. 표시된 문자 대신 표 1의 동등한 이스케이프 문자열 또는 문자 인코딩을 사용하십시오.

XML 제어 문자 이스케이프
문자 이스케이프 문자열 문자 인코딩
"
(큰따옴표)
" "
'
(어포스트로피 또는 작은따옴표)
' '
&
(앰퍼샌드)
& &
<
(왼쪽 꺾쇠 괄호)
&lt; &#60;
>
(오른쪽 꺾쇠 괄호)
&gt; &#62;
/
(슬래시)
없음 &#47;

서비스가 입력 텍스트를 유효성 검증하는 방법에 대한 자세한 정보는 SSML 유효성 검증을 참조하십시오.

입력 텍스트 예

다음 예에서는 HTTP 인터페이스의 두 메소드를 사용하여 입력 텍스트를 지정하는 방법을 보여줍니다. XML 제어 문자를 이스케이프하는 방법도 보여줍니다. 예에는 가독성을 위한 행 바꾸기가 포함됩니다. 실제 입력에는 행 바꾸기를 포함하지 마십시오.

GET 요청이 포함된 입력 예

다음 예에서는 text 메소드의 GET /v1/synthesize 조회 매개변수를 사용하여 URL 인코딩 입력을 전달합니다.

  • 일반 텍스트 입력:

    text=This&20is&20the&20first&20sentence&20of&20the&20paragraph.&20Here
    &20is&20another&20sentence.&20Finally,&20this&20is&20the&20last&20sentence.
    
  • SSML 입력:

    text=%22%3Cp%3E%3Cs%3EThis%20is%20the%20first%20sentence%20of%20the%20%3C
    break%20time=%225s%22/%3E%20paragraph.%3C/s%3E%3Cs%3EHere%20is%20another
    %20sentence.%3C/s%3E%3Cs%3EFinally,%20this%20is%20the%20last%20sentence.
    %3C/s%3E%3C/p%3E%22
    

POST 요청이 포함된 입력 예

다음 예에서는 POST /v1/synthesize 메소드의 본문에서 입력을 전달합니다.

  • 일반 텍스트 입력:

    {
      "text": "This is the first sentence of the paragraph. Here is another
        sentence. Finally, this is the last sentence."
    }
    
  • SSML 입력:

    {
      "text": "<p><s>This is the first sentence of the <break time=\"5s\"/>
        paragraph.</s><s>Here is another sentence.</s><s>Finally, this is
        the last sentence.</s></p>"
    }
    

XML 제어 문자가 포함된 입력 예

다음 예는 두 가지 문장을 POST /v1/synthesize 메소드에 전송합니다. 예에서는 임베디드 XML 문자를 올바르게 이스케이프합니다.

"What have I learned?" he asked. "Everything!"
  • 일반 텍스트 입력:

    {
      "text": ""What have I learned?" he asked. "Everything!""
    }
    
  • SSML 입력:

    {
      "text": "<s>"What have I learned?" he asked.
        "<prodody rate=\"50\">Everything!</prosody>"</s>"
    }