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 Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ 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 เพื่อเปิดใช้ 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 ซึ่งคุณติดตั้งไว้ในขั้นตอนก่อนหน้า เริ่มเซสชันโดยเรียกใช้ 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 ภาษา เช่น
- จีนกลางและจีนกลางไต้หวัน
- ภาษาอังกฤษแบบออสเตรเลีย อังกฤษ อินเดีย และอเมริกัน
- French from Canada and France,
- โปรตุเกสจากบราซิลและโปรตุเกส
รายการนี้อาจมีการเปลี่ยนแปลงและจะเพิ่มขึ้นเมื่อมีเสียงใหม่ๆ
สรุป
ขั้นตอนนี้ช่วยให้คุณแสดงรายการภาษาที่รองรับได้
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 และเสียงระดับสตูดิโอ
- เสียงมาตรฐานสร้างขึ้นโดยอัลกอริทึมการประมวลผลสัญญาณ
- เสียง 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"
หากต้องการดาวน์โหลดไฟล์ที่สร้างขึ้นทั้งหมดพร้อมกัน คุณสามารถใช้คำสั่ง 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 Attribution License) 2.0 แบบทั่วไป