1. 개요
Text-to-Speech API를 사용하면 개발자가 인간과 유사한 음성을 생성할 수 있습니다. API는 텍스트를 WAV, MP3, Ogg Opus와 같은 오디오 형식으로 변환합니다. 또한 음성 합성 마크업 언어 (SSML) 입력을 지원하여 일시중지, 숫자, 날짜 및 시간 형식, 기타 발음 지침을 지정할 수 있습니다.
이 튜토리얼에서는 Python에서 Text-to-Speech API를 사용하는 방법을 중점적으로 살펴봅니다.
학습할 내용
- 환경을 설정하는 방법
- 지원되는 언어를 나열하는 방법
- 사용 가능한 음성 나열 방법
- 텍스트에서 오디오를 합성하는 방법
필요한 항목
설문조사
이 튜토리얼을 어떻게 사용하실 계획인가요?
귀하의 Python 사용 경험이 어떤지 평가해 주세요.
귀하의 Google Cloud 서비스 경험을 평가해 주세요.
<ph type="x-smartling-placeholder">2. 설정 및 요건
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화를 클릭합니다.
Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저를 사용하여 수행할 수 있습니다.
Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 자신의 프로젝트 ID로 설정된 것을 확인할 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list
명령어 결과
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
명령어 결과
[core] project = <PROJECT_ID>
또는 다음 명령어로 설정할 수 있습니다.
gcloud config set project <PROJECT_ID>
명령어 결과
Updated property [core/project].
3. 환경 설정
Text-to-Speech API를 사용하려면 먼저 Cloud Shell에서 다음 명령어를 실행하여 API를 사용 설정합니다.
gcloud services enable texttospeech.googleapis.com
다음과 같은 결과를 확인할 수 있습니다.
Operation "operations/..." finished successfully.
이제 Text-to-Speech API를 사용할 수 있습니다.
홈 디렉터리로 이동합니다.
cd ~
Python 가상 환경을 만들어 종속 항목을 격리합니다.
virtualenv venv-texttospeech
가상 환경을 활성화합니다.
source venv-texttospeech/bin/activate
IPython 및 Text-to-Speech API 클라이언트 라이브러리를 설치합니다.
pip install ipython google-cloud-texttospeech
다음과 같은 결과를 확인할 수 있습니다.
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
이제 Text-to-Speech API 클라이언트 라이브러리를 사용할 준비가 되었습니다.
다음 단계에서는 이전 단계에서 설치한 대화형 Python 인터프리터인 IPython을 사용합니다. Cloud Shell에서 ipython
를 실행하여 세션을 시작합니다.
ipython
다음과 같은 결과를 확인할 수 있습니다.
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:
이제 첫 번째 요청을 하고 지원되는 언어를 나열할 준비가 되었습니다.
4. 지원되는 언어 목록
이 섹션에는 지원되는 모든 언어 목록이 표시됩니다.
다음 코드를 IPython 세션에 복사합니다.
from typing import Sequence
import google.cloud.texttospeech as tts
def unique_languages_from_voices(voices: Sequence[tts.Voice]):
language_set = set()
for voice in voices:
for language_code in voice.language_codes:
language_set.add(language_code)
return language_set
def list_languages():
client = tts.TextToSpeechClient()
response = client.list_voices()
languages = unique_languages_from_voices(response.voices)
print(f" Languages: {len(languages)} ".center(60, "-"))
for i, language in enumerate(sorted(languages)):
print(f"{language:>10}", end="\n" if i % 5 == 4 else "")
잠시 코드를 살펴보고 list_voices
클라이언트 라이브러리 메서드를 사용하여 지원되는 언어 목록을 빌드하는 방법을 알아보세요.
함수 호출
list_languages()
다음과 같은 (또는 더 큰) 목록이 표시됩니다.
---------------------- Languages: 58 ----------------------- af-ZA am-ET ar-XA bg-BG bn-IN ca-ES cmn-CN cmn-TW cs-CZ da-DK de-DE el-GR en-AU en-GB en-IN en-US es-ES es-US eu-ES fi-FI fil-PH fr-CA fr-FR gl-ES gu-IN he-IL hi-IN hu-HU id-ID is-IS it-IT ja-JP kn-IN ko-KR lt-LT lv-LV ml-IN mr-IN ms-MY nb-NO nl-BE nl-NL pa-IN pl-PL pt-BR pt-PT ro-RO ru-RU sk-SK sr-RS sv-SE ta-IN te-IN th-TH tr-TR uk-UA vi-VN yue-HK
이 목록에는 다음과 같은 58개의 언어와 방언이 표시됩니다.
- 중국어 및 대만어,
- 영어(오스트레일리아, 영국, 인도, 미국 영어)
- 캐나다와 프랑스에서 온 프랑스어는
- 브라질과 포르투갈에서 온 포르투갈어
이 목록은 고정되어 있지 않으며 새로운 목소리가 들어올 때마다 늘어납니다.
요약
이 단계를 통해 지원되는 언어를 나열할 수 있었습니다.
5. 사용 가능한 음성 나열
이 섹션에서는 다양한 언어로 제공되는 음성 목록을 확인할 수 있습니다.
다음 코드를 IPython 세션에 복사합니다.
import google.cloud.texttospeech as tts
def list_voices(language_code=None):
client = tts.TextToSpeechClient()
response = client.list_voices(language_code=language_code)
voices = sorted(response.voices, key=lambda voice: voice.name)
print(f" Voices: {len(voices)} ".center(60, "-"))
for voice in voices:
languages = ", ".join(voice.language_codes)
name = voice.name
gender = tts.SsmlVoiceGender(voice.ssml_gender).name
rate = voice.natural_sample_rate_hertz
print(f"{languages:<8} | {name:<24} | {gender:<8} | {rate:,} Hz")
잠시 코드를 살펴보고 클라이언트 라이브러리 메서드 list_voices(language_code)
를 사용하여 특정 언어에 사용 가능한 음성을 나열하는 방법을 알아보세요.
이제 사용 가능한 독일어 음성 목록을 가져옵니다.
list_voices("de")
다음과 같은 결과를 확인할 수 있습니다.
------------------------ Voices: 20 ------------------------ de-DE | de-DE-Neural2-A | FEMALE | 24,000 Hz de-DE | de-DE-Neural2-B | MALE | 24,000 Hz ... de-DE | de-DE-Standard-A | FEMALE | 24,000 Hz de-DE | de-DE-Standard-B | MALE | 24,000 Hz ... de-DE | de-DE-Studio-B | MALE | 24,000 Hz de-DE | de-DE-Studio-C | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-A | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-B | MALE | 24,000 Hz ...
표준, WaveNet, Neural2, Studio 음성뿐 아니라 여러 여성 및 남성 음성을 사용할 수 있습니다.
- 표준 음성은 신호 처리 알고리즘에 의해 생성됩니다.
- WaveNet, Neural2, Studio 음성은 머신러닝 모델에 의해 합성된 고품질 음성이며 더 자연스럽습니다.
이제 사용 가능한 영어 음성 목록을 가져옵니다.
list_voices("en")
다음과 같이 표시됩니다.
------------------------ Voices: 90 ------------------------ en-AU | en-AU-Neural2-A | FEMALE | 24,000 Hz ... en-AU | en-AU-Wavenet-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Neural2-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Wavenet-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Standard-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Wavenet-A | FEMALE | 24,000 Hz ... en-US | en-US-Neural2-A | MALE | 24,000 Hz ... en-US | en-US-News-K | FEMALE | 24,000 Hz ... en-US | en-US-Standard-A | MALE | 24,000 Hz ... en-US | en-US-Studio-M | MALE | 24,000 Hz ... en-US | en-US-Wavenet-A | MALE | 24,000 Hz ...
다양한 성별과 품질의 여러 음성 선택 외에도 오스트레일리아, 영국, 인도, 미국 영어 등 다양한 억양을 사용할 수 있습니다.
잠시 시간을 내어 선호하는 언어 및 방언 (또는 모든 언어)에서 사용할 수 있는 음성을 나열해 보세요.
list_voices("fr")
list_voices("pt")
list_voices()
요약
이 단계를 통해 사용 가능한 음성을 나열할 수 있었습니다. 지원되는 음성 및 언어에 대해 자세히 알아보세요.
6. 텍스트에서 오디오 합성
Text-to-Speech API를 사용하여 문자열을 오디오 데이터로 변환할 수 있습니다. 고유한 음성을 선택하거나 출력의 높낮이, 볼륨, 말하기 속도, 샘플링 레이트를 조정하는 등 다양한 방법으로 음성 합성 출력을 구성할 수 있습니다.
다음 코드를 IPython 세션에 복사합니다.
import google.cloud.texttospeech as tts
def text_to_wav(voice_name: str, text: str):
language_code = "-".join(voice_name.split("-")[:2])
text_input = tts.SynthesisInput(text=text)
voice_params = tts.VoiceSelectionParams(
language_code=language_code, name=voice_name
)
audio_config = tts.AudioConfig(audio_encoding=tts.AudioEncoding.LINEAR16)
client = tts.TextToSpeechClient()
response = client.synthesize_speech(
input=text_input,
voice=voice_params,
audio_config=audio_config,
)
filename = f"{voice_name}.wav"
with open(filename, "wb") as out:
out.write(response.audio_content)
print(f'Generated speech saved to "{filename}"')
잠시 코드를 살펴보고 synthesize_speech
클라이언트 라이브러리 메서드를 사용하여 오디오 데이터를 생성하고 wav
파일로 저장하는 방법을 알아보세요.
이제 몇 가지 억양으로 문장을 생성해 보겠습니다.
text_to_wav("en-AU-Neural2-A", "What is the temperature in Sydney?")
text_to_wav("en-GB-Neural2-B", "What is the temperature in London?")
text_to_wav("en-IN-Wavenet-C", "What is the temperature in Delhi?")
text_to_wav("en-US-Studio-O", "What is the temperature in New York?")
text_to_wav("fr-FR-Neural2-A", "Quelle est la température à Paris ?")
text_to_wav("fr-CA-Neural2-B", "Quelle est la température à Montréal ?")
다음과 같은 결과를 확인할 수 있습니다.
Generated speech saved to "en-AU-Neural2-A.wav" Generated speech saved to "en-GB-Neural2-B.wav" Generated speech saved to "en-IN-Wavenet-C.wav" Generated speech saved to "en-US-Studio-O.wav" Generated speech saved to "fr-FR-Neural2-A.wav" Generated speech saved to "fr-CA-Neural2-B.wav"
생성된 모든 파일을 한 번에 다운로드하려면 Python 환경에서 다음 Cloud Shell 명령어를 사용하면 됩니다.
!cloudshell download *.wav
유효성을 검사하면 브라우저에서 파일을 다운로드합니다.
각 파일을 열고 결과를 듣습니다.
요약
이 단계에서는 Text-to-Speech API를 사용하여 문장을 오디오 wav
파일로 변환할 수 있었습니다. 음성 오디오 파일 만들기에 관해 자세히 알아보세요.
7. 축하합니다.
Python으로 Text-to-Speech API를 사용하여 사람과 비슷한 음성을 생성하는 방법을 알아봤습니다.
삭제
Cloud Shell에서 개발 환경을 삭제하려면 다음 안내를 따르세요.
- 아직 IPython 세션에 있다면 셸로 돌아갑니다.
exit
- Python 가상 환경 사용 중지:
deactivate
- 가상 환경 폴더 삭제:
cd ~ ; rm -rf ./venv-texttospeech
Google Cloud 프로젝트를 삭제하려면 Cloud Shell에서 다음 안내를 따르세요.
- 현재 프로젝트 ID를 가져옵니다.
PROJECT_ID=$(gcloud config get-value core/project)
- 삭제하려는 프로젝트가 맞는지 확인합니다.
echo $PROJECT_ID
- 프로젝트 삭제:
gcloud projects delete $PROJECT_ID
자세히 알아보기
- 브라우저에서 데모 테스트: https://cloud.google.com/text-to-speech
- Text-to-Speech 문서: https://cloud.google.com/text-to-speech/docs
- Google Cloud 기반 Python: https://cloud.google.com/python
- Python용 Cloud 클라이언트 라이브러리: https://github.com/googleapis/google-cloud-python
라이선스
이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.