1. סקירה כללית

Text-to-Speech API מאפשר למפתחים ליצור דיבור שנשמע כמו דיבור אנושי. ה-API ממיר טקסט לפורמטים של אודיו כמו WAV, MP3 או Ogg Opus. הוא תומך גם בקלט של Speech Synthesis Markup Language (SSML) כדי לציין הפסקות, מספרים, פורמט של תאריך ושעה והוראות אחרות לגבי הגייה.
במדריך הזה נתמקד בשימוש ב-Text-to-Speech API עם Python.
מה תלמדו
- איך מגדירים את הסביבה
- איך מציגים רשימה של שפות נתמכות
- איך מציגים רשימה של קולות זמינים
- איך מסנתזים אודיו מטקסט
מה תצטרכו
סקר
איך תשתמשו במדריך הזה?
איך היית מדרג את חוויית השימוש שלך ב-Python?
איזה דירוג מתאים לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת בענן.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים עם תיאור של השירות. אם הוצג לכם מסך ביניים, לחצו על המשך.

הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן.
אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות ושהפרויקט מוגדר לפי מזהה הפרויקט.
- מריצים את הפקודה הבאה ב-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:
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, שהתקנתם בשלב הקודם. כדי להתחיל סשן, מריצים את הפקודה ipython ב-Cloud Shell:
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 וקולות של סטודיו הם קולות באיכות גבוהה יותר שמסונתזים על ידי מודלים של למידת מכונה ונשמעים טבעיים יותר.
עכשיו, מקבלים את רשימת הקולות הזמינים באנגלית:
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"
כדי להוריד את כל הקבצים שנוצרו בבת אחת, אפשר להשתמש בפקודה הזו של Cloud Shell מסביבת Python:
!cloudshell download *.wav
הקבצים יאומתו ויוורדו לדפדפן:

פותחים כל קובץ ושומעים את התוצאה.
סיכום
בשלב הזה, השתמשתם ב-Text-to-Speech API כדי להמיר משפטים לקובצי אודיו wav. מידע נוסף על יצירת קובצי אודיו עם קול
7. מעולה!

למדתם איך להשתמש ב-Text-to-Speech API באמצעות Python כדי ליצור דיבור שנשמע כמו דיבור אנושי.
הסרת המשאבים
כדי לנקות את סביבת הפיתוח, מ-Cloud Shell:
- אם אתם עדיין בהפעלה של IPython, חוזרים אל המעטפת:
exit - מפסיקים להשתמש בסביבה הווירטואלית של Python:
deactivate - מוחקים את תיקיית הסביבה הווירטואלית:
cd ~ ; rm -rf ./venv-texttospeech
כדי למחוק את הפרויקט בענן ב-Google Cloud, מ-Cloud Shell:
- כדי לאחזר את מזהה הפרויקט הנוכחי:
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
- Python ב-Google Cloud: https://cloud.google.com/python
- ספריות לקוח של Cloud ל-Python: https://github.com/googleapis/google-cloud-python
רישיון
עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.