본문 바로가기
프로그래밍

텍스트 음성변환 TTS프로그램 만들기 - 구글 tts api

by astraljoker 2022. 2. 7.
728x90
반응형

최근 TTS가 쓰이는 걸 보면 인공지능이 우리 생활에 더 가까이 다가와 있는것 같습니다. 우리가 자주 이용하는 트위치나 유튜브 등에서 tts가 자주 쓰이고 있습니다. 트위치에 도네이션 할 때 잼민이 tts 가 특히 인기가 있습니다.


구글 tts api를 이용하면 텍스트를 음성으로 변환할 수 있습니다.

 

구글 Text-to-Speech

https://cloud.google.com/text-to-speech

​구글 tts사이트에 접속해서 speak it을 눌러보면 꽤나 자연스러운 결과를 얻을 수 있습니다. 주요 특징은 아래와 같습니다.

​# Custom Voice(베타)
자체 오디오 녹음 파일로 커스텀 음성 모델을 학습시켜 조직에 맞는 특별하면서 보다 자연스러운 음성을 만드세요. 조직에 맞는 음성 프로필을 정의하고 선택한 후, 필요한 음성이 바뀔 시 새 구문을 녹음할 필요 없이 빠르게 조정할 수 있습니다.

​# WaveNet 음성
DeepMind의 혁신적인 연구를 기반으로 빌드된 90여 개의 WaveNet 음성을 활용하여 사람 목소리와의 격차를 대폭 축소하는 음성을 생성합니다.

​# 음성 조정
선택한 음성의 높낮이를 기본 출력보다 최대 20반음까지 높거나 낮게 맞춤설정할 수 있습니다. 말하기 속도를 일반 속도보다 4배 빠르거나 느리게 조정할 수 있습니다.

​# 텍스트 및 SSML 지원
끊어 읽을 지점, 숫자, 날짜 및 시간 형식, 기타 발음 지침을 추가할 수 있는 SSML 태그로 음성을 맞춤설정할 수 있습니다.

​WaveNet 음성을 사용하면 로봇같은 목소리가 아닌 자연스러운 목소리가 나오게 됩니다. 최근에 Costom Voice라는 기능도 생겼군요. 내 목소리를 학습시키면 유튜브같은 컨텐츠를 만들때 유용하게 쓰일것 같습니다.

 

 

구글 Text-to-Speech 가격

기능
월별 무료 할댱량
무료 사용량 한도 소진 이후 가격
WaveNet 외의 표준 음성
0~400만 자
문자당 $0.000004(영문 기준 100만 자당 $4.00(USD))
WaveNet 음성
0~100만 자
문자당 $0.000016(영문 기준 100만 자당 $16.00(USD))

책 한권이 12만자 정도 된다고 합니다. 월별 무료 사용량만 사용해도 충분히 유용하게 사용할 수 있습니다.

 

구글 Text-to-Speech 구현

nodejs로 구현했습니다. npm이 편해서 nodejs를 선택했습니다.(귀찮아서..)

const fs = require('fs');

// Imports the Google Cloud client library
const textToSpeech = require('@google-cloud/text-to-speech');

// Creates a client
const client = new textToSpeech.TextToSpeechClient();

// The text to synthesize
const text = '안녕하세요';

// Construct the request
const request = {
  input: {text: text},
  // Select the language and SSML Voice Gender (optional)
  voice: {languageCode: 'ko_KR', ssmlGender: 'FEMALE', name: 'ko-KR-Wavenet-A'},
  // Select the type of audio encoding
  audioConfig: {audioEncoding: 'MP3'},
};

// Performs the Text-to-Speech request
client.synthesizeSpeech(request, (err, response) => {
  if (err) {
    console.error('ERROR:', err);
    return;
  }

  var ts_hms = Date.now().toString();
  fs.writeFile('./out/' + ts_hms+ '.mp3', response.audioContent, 'binary', err => {
    if (err) {
      console.error('ERROR:', err);
      return;
    }
    console.log(text);
  });
})

 

위 코드를 실행합니다. 구글에서 제공하는 코드를 아주 조금 개조했습니다. text 부분에 음성으로 변환하고 싶은 텍스트를 입력하면 됩니다. 텍스트 파일을 읽어오게 바꾸면 더 편할수도 있겠네요.


음성을 바꾸고 싶다면
voice: {languageCode: 'ko_KR', ssmlGender: 'FEMALE', name: 'ko-KR-Wavenet-A'}, 이 부분을 수정하면 됩니다. 음성 리스트는 아래 링크에서 확인할 수 있습니다.
https://cloud.google.com/text-to-speech/docs/voices

​# 에러메시지
ERROR: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.

at GoogleAuth.getApplicationDefaultAsync (/Users/byunghoon/Documents/tts/node_modules/google-auth-library/build/src/auth/googleauth.js:180:19)

at processTicksAndRejections (internal/process/task_queues.js:95:5)

at async GoogleAuth.getClient (/Users/byunghoon/Documents/tts/node_modules/google-auth-library/build/src/auth/googleauth.js:558:17)

​at async GrpcClient._getCredentials (/Users/byunghoon/Documents/tts/node_modules/google-gax/build/src/grpc.js:145:24)

​at async GrpcClient.createStub (/Users/byunghoon/Documents/tts/node_modules/google-gax/build/src/grpc.js:308:23)

​위와 같은 에러가 난다면 인증키 문제입니다. 아래 링크를 참고해주세요.
https://cloud.google.com/text-to-speech/docs/before-you-begin

실행결과로 음성파일이 나옵니다.

 

728x90
반응형

댓글