Google API로 TTS 구현하기

Cloud Text-to-Speech API

구글 API를 사용을 위한 프로젝트 생성하기

1. 프로젝트 생성하기

구글 API를 사용하려면 프로젝트를 생성해주어야 합니다. 만약 기존에 사용하는 프로젝트가 있다면 해당 프로젝트를 사용해도 괜찮습니다. 새 프로젝트를 생성하는 방법은 다음과 같습니다.

프로젝트 생성
[새 프로젝트] 클릭
프로젝트 이름 설정 후 만들기

새 프로젝트 생성은 위와 같은 순서로 진행이 되는데, 하나의 프로젝트는 API들을 관리하는 하나의 카테고리로 생각할 수 있습니다.

2. API 설정 및 과금

새 프로젝트 화면

위와 같이 프로젝트가 생성되면, 상단의 EABLE APIS AND SERVICES 라는 버튼을 클릭하여 프로젝트에 API를 추가할 수 있습니다.

사용할 API 검색
API 사용 설정

사용할 API을 검색하여 선택한 후, API 사용 설정 버튼을 클릭하면 결제방법을 등록하라는 창이 나오는데, API를 처음 사용하는 경우라면 일정 기간동안 사용할 수 있는 무료 크레딧이 제공됩니다.

또 제공된 무료 크레딧을 모두 사용한 경우라도, 일정 사용량까지는 API를 무료로 사용할 수 있기 때문에, 실제 상용 제품에 적용하는 경우가 아니라면, 큰 비용을 결제하는 상황이 발생하지는 않습니다.

구글 API 사용량에 따른 과금표

3. 사용자 인증정보 만들기

만약 다음과 같이 API 사용 중지라는 버튼이 활성화되어 있다면, API설정이 완료된 상태로 해당 버튼을 클릭하면 안됩니다. 말 그대로 API를 사용 중지 상태로 전환하는 버튼입니다.

API가 활성화 된 화면

위의 화면에서 우측에 있는 사용자 인증 정보 만들기 버튼을 클릭하면 다음과 같은 화면이 나옵니다.

사용자 인증 정보 추가 화면

이 화면에서 사용할 API를 선택한 후 사용자 인증 정보를 생성해줍니다.

사용자 인증 정보 추가 화면

사용자 인증정보를 생성하고 나면, 이제 해당 인증 key로 API를 사용할 수 있습니다.

** API 키는 구글 콘솔에서 특정 도메인에서만 사용할 수 있도록 설정하는 것이 좋습니다.

웹 사이트 제한

Google TTS 구현하기

Google API 사용 설정을 완료했다면, TTS를 구현하는 것은 간단합니다. 구글의 API 서버 https://texttospeech.googleapis.com/v1/text:synthesize로 텍스트를 전달하면, 전달된 텍스트를 음성 데이터로 변환하여 반환해줍니다.

function textToSpeech(_text) {
  const url = "https://texttospeech.googleapis.com/v1/text:synthesize?key={YOUR_API_KEY}";
  const data = {
    input: {
      text: _text,
    },
    voice: {
      languageCode: 'ko-KR',
      name: 'ko-KR-Neural2-c',
      ssmlGender: 'MALE',
    },
    audioConfig: {
      audioEncoding: "MP3",
    },
  };
  const otherparam = {
    headers: {
      "content-type": "application/json; charset=UTF-8",
    },
    body: JSON.stringify(data),
    method: "POST",
  };
  // 사운드 생성
  fetch(url, otherparam)
    .then((data) => {
      return data.json();
    })
    .then((res) => {
      console.log(res.audioContent); // base64
    })
    .catch((error) => {
      console.log(error);
    });
}

구글 TTS로 사용 가능한 한국어 모델

언어 음성유형 언어코드 음성이름 성별
한국어(대한민국)
Neural2
ko-KR
ko-KR-Neural2-A
여성
한국어(대한민국)
Neural2
ko-KR
ko-KR-Neural2-B
여성
한국어(대한민국)
Neural2
ko-KR
ko-KR-Neural2-C
남성
한국어(대한민국)
표준
ko-KR
ko-KR-Standard-A
여성
한국어(대한민국)
표준
ko-KR
ko-KR-Standard-B
여성
한국어(대한민국)
표준
ko-KR
ko-KR-Standard-C
남성
한국어(대한민국)
표준
ko-KR
ko-KR-Standard-D
남성
한국어(대한민국)
WaveNet
ko-KR
ko-KR-Wavenet-A
여성
한국어(대한민국)
WaveNet
ko-KR
ko-KR-Wavenet-B
여성
한국어(대한민국)
WaveNet
ko-KR
ko-KR-Wavenet-C
남성
한국어(대한민국)
WaveNet
ko-KR
ko-KR-Wavenet-D
남성

구글 TTS로 사용 가능한 일본어 모델

언어 음성유형 언어코드 음성이름 성별
일본어(일본)
Neural2
ja-JP
ja-JP-Neural2-B
여성
일본어(일본)
Neural2
ja-JP
ja-JP-Neural2-C
남성
일본어(일본)
Neural2
ja-JP
ja-JP-Neural2-D
남성
일본어(일본)
표준
ja-JP
ja-JP-Standard-A
여성
일본어(일본)
표준
ja-JP
ja-JP-Standard-B
여성
일본어(일본)
표준
ja-JP
ja-JP-Standard-C
남성
일본어(일본)
표준
ja-JP
ja-JP-Standard-D
남성
일본어(일본)
WaveNet
ja-JP
ja-JP-Wavenet-A
여성
일본어(일본)
WaveNet
ja-JP
ja-JP-Wavenet-B
여성
일본어(일본)
WaveNet
ja-JP
ja-JP-Wavenet-C
남성
일본어(일본)
WaveNet
ja-JP
ja-JP-Wavenet-D
남성

구글 TTS로 사용 가능한 영어 모델

언어 음성유형 언어코드 음성이름 성별
영어(미국)
Neural2
en-US
en-US-Neural2-A
남성
영어(미국)
Neural2
en-US
en-US-Neural2-C
여성
영어(미국)
Neural2
en-US
en-US-Neural2-D
남성
영어(미국)
Neural2
en-US
en-US-Neural2-E
여성
영어(미국)
Neural2
en-US
en-US-Neural2-F
여성
영어(미국)
Neural2
en-US
en-US-Neural2-G
여성
영어(미국)
Neural2
en-US
en-US-Neural2-H
여성
영어(미국)
Neural2
en-US
en-US-Neural2-I
남성
영어(미국)
Neural2
en-US
en-US-Neural2-J
남성
영어(미국)
WaveNet
en-US
en-US-News-K
여성
영어(미국)
WaveNet
en-US
en-US-News-L
여성
영어(미국)
WaveNet
en-US
en-US-News-M
남성
영어(미국)
WaveNet
en-US
en-US-News-N
남성
영어(미국)
표준
en-US
en-US-Standard-A
남성
영어(미국)
표준
en-US
en-US-Standard-B
남성
영어(미국)
표준
en-US
en-US-Standard-C
여성
영어(미국)
표준
en-US
en-US-Standard-D
남성
영어(미국)
표준
en-US
en-US-Standard-E
여성
영어(미국)
표준
en-US
en-US-Standard-F
여성
영어(미국)
표준
en-US
en-US-Standard-G
여성
영어(미국)
표준
en-US
en-US-Standard-H
여성
영어(미국)
표준
en-US
en-US-Standard-I
남성
영어(미국)
표준
en-US
en-US-Standard-J
남성
영어(미국)
Studio
en-US
en-US-Studio-M
남성
영어(미국)
Studio
en-US
en-US-Studio-O
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-A
남성
영어(미국)
WaveNet
en-US
en-US-Wavenet-B
남성
영어(미국)
WaveNet
en-US
en-US-Wavenet-C
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-D
남성
영어(미국)
WaveNet
en-US
en-US-Wavenet-E
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-F
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-G
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-H
여성
영어(미국)
WaveNet
en-US
en-US-Wavenet-I
남성
영어(미국)
WaveNet
en-US
en-US-Wavenet-J
남성

답글 남기기

Recent Posts

Tailwind CSS를 위한 기본 가이드

Tailwind CSS를 위한 기본 가이드

Tailwind CSS 필수 디렉티브 및 함수 가이드

Tailwind CSS 필수 디렉티브 및 함수 가이드

프런트엔드 개발의 효율성을 높이는 기능 분할 설계 아키텍처

프런트엔드 개발의 효율성을 높이는 기능 분할 설계 아키텍처

스테이블 디퓨전 설치 및 사용 가이드

스테이블 디퓨전 설치 및 사용 가이드

행복만 있는 세상, 정말 우리가 꿈꾸는 이상향일까요?

행복만 있는 세상, 정말 우리가 꿈꾸는 이상향일까요?