Menggunakan Text-to-Speech API dengan Python

1. Ringkasan

1215f38908082356.png

Text-to-Speech API memungkinkan developer menghasilkan ucapan yang terdengar seperti manusia. API ini mengonversi teks menjadi format audio seperti WAV, MP3, atau Ogg Opus. API ini juga mendukung input Speech Synthesis Markup Language (SSML) untuk menentukan jeda, angka, format tanggal dan waktu, serta petunjuk pengucapan lainnya.

Dalam tutorial ini, Anda akan berfokus pada penggunaan Text-to-Speech API dengan Python.

Yang akan Anda pelajari

  • Cara menyiapkan lingkungan Anda
  • Cara membuat daftar bahasa yang didukung
  • Cara menampilkan daftar suara yang tersedia
  • Cara menyintesis audio dari teks

Yang Anda butuhkan

  • Project Google Cloud
  • Browser, seperti Chrome atau Firefox
  • Kemampuan menggunakan Python

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Python?

Pemula Menengah Mahir

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Continue.

9c92662c6a846a5c.png

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

9f0e51b578fecce5.png

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project telah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Penyiapan lingkungan

Sebelum dapat mulai menggunakan Text-to-Speech API, jalankan perintah berikut di Cloud Shell untuk mengaktifkan API:

gcloud services enable texttospeech.googleapis.com

Anda akan melihat yang seperti ini:

Operation "operations/..." finished successfully.

Sekarang, Anda dapat menggunakan Text-to-Speech API.

Buka direktori utama Anda:

cd ~

Buat lingkungan virtual Python untuk mengisolasi dependensi:

virtualenv venv-texttospeech

Aktifkan lingkungan virtual:

source venv-texttospeech/bin/activate

Instal IPython dan library klien Text-to-Speech API:

pip install ipython google-cloud-texttospeech

Anda akan melihat yang seperti ini:

...
Installing collected packages: ..., ipython, google-cloud-texttospeech
Successfully installed ... google-cloud-texttospeech-2.16.3 ...

Sekarang, Anda siap menggunakan library klien Text-to-Speech API.

Pada langkah berikutnya, Anda akan menggunakan penafsir Python interaktif yang disebut IPython, yang Anda instal pada langkah sebelumnya. Mulai sesi dengan menjalankan ipython di Cloud Shell:

ipython

Anda akan melihat yang seperti ini:

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]:

Anda siap membuat permintaan pertama dan mencantumkan bahasa yang didukung...

4. Membuat daftar bahasa yang didukung

Di bagian ini, Anda akan mendapatkan daftar semua bahasa yang didukung.

Salin kode berikut ke sesi IPython Anda:

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 "")
        

Luangkan waktu untuk mempelajari kode dan melihat cara kode tersebut menggunakan metode library klien list_voices untuk membuat daftar bahasa yang didukung.

Memanggil fungsi:

list_languages()

Anda akan mendapatkan daftar berikut (atau yang lebih besar):

---------------------- 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

Daftar ini menampilkan 58 bahasa dan varian seperti:

  • China dan Mandarin Taiwan,
  • Bahasa Inggris Australia, Inggris, India, dan Amerika,
  • Prancis dari Kanada dan Prancis,
  • Portugis dari Brasil dan Portugal.

Daftar ini tidak tetap dan akan bertambah seiring ketersediaan suara baru.

Ringkasan

Langkah ini memungkinkan Anda mencantumkan bahasa yang didukung.

5. Menampilkan daftar suara yang tersedia

Di bagian ini, Anda akan mendapatkan daftar suara yang tersedia dalam berbagai bahasa.

Salin kode berikut ke sesi IPython Anda:

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")
        

Luangkan waktu untuk mempelajari kode dan melihat cara kode tersebut menggunakan metode library klien list_voices(language_code) untuk mencantumkan suara yang tersedia untuk bahasa tertentu.

Sekarang, dapatkan daftar suara Jerman yang tersedia:

list_voices("de")

Anda akan melihat yang seperti ini:

------------------------ 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
...

Tersedia beberapa suara perempuan dan laki-laki, serta suara standar, WaveNet, Neural2, dan Studio:

  • Suara standar dihasilkan oleh algoritma pemrosesan sinyal.
  • Suara WaveNet, Neural2, dan Studio adalah suara berkualitas lebih tinggi yang disintesis oleh model machine learning dan terdengar lebih alami.

Sekarang, dapatkan daftar suara berbahasa Inggris yang tersedia:

list_voices("en")

Anda akan melihat hasil seperti ini:

------------------------ 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
...

Selain pilihan beberapa suara dengan gender dan kualitas yang berbeda, tersedia juga beberapa aksen: Inggris Australia, Inggris Inggris, Inggris India, dan Inggris Amerika.

Luangkan waktu sejenak untuk mencantumkan suara yang tersedia untuk bahasa dan varian pilihan Anda (atau bahkan semuanya):

list_voices("fr")
list_voices("pt")
list_voices()

Ringkasan

Langkah ini memungkinkan Anda mencantumkan suara yang tersedia. Anda dapat membaca lebih lanjut suara dan bahasa yang didukung.

6. Menyintesis audio dari teks

Anda dapat menggunakan Text-to-Speech API untuk mengonversi string menjadi data audio. Anda dapat mengonfigurasi output sintesis ucapan dalam berbagai cara, termasuk memilih suara yang unik atau memodulasi output dalam nada, volume, kecepatan ucapan, dan frekuensi sampel.

Salin kode berikut ke sesi IPython Anda:

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}"')
        

Luangkan waktu untuk mempelajari kode dan melihat cara kode tersebut menggunakan metode library klien synthesize_speech untuk membuat data audio dan menyimpannya sebagai file wav.

Sekarang, buat kalimat dalam beberapa aksen yang berbeda:

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 ?")

Anda akan melihat yang seperti ini:

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"

Untuk mendownload semua file yang dihasilkan sekaligus, Anda dapat menggunakan perintah Cloud Shell ini dari lingkungan Python Anda:

!cloudshell download *.wav

Validasi dan browser Anda akan mendownload file:

44382e3b7a3314b0.png 4dbccf007cd73b91.png

Buka setiap file dan dengarkan hasilnya.

Ringkasan

Pada langkah ini, Anda dapat menggunakan Text-to-Speech API untuk mengonversi kalimat menjadi file audio wav. Baca selengkapnya tentang membuat file audio suara.

7. Selamat!

1215f38908082356.png

Anda telah mempelajari cara menggunakan Text-to-Speech API menggunakan Python untuk menghasilkan ucapan yang terdengar seperti ucapan manusia.

Pembersihan

Untuk membersihkan lingkungan pengembangan Anda, dari Cloud Shell:

  • Jika Anda masih berada di sesi IPython, kembali ke shell: exit
  • Berhenti menggunakan lingkungan virtual Python: deactivate
  • Hapus folder lingkungan virtual Anda: cd ~ ; rm -rf ./venv-texttospeech

Untuk menghapus project Google Cloud Anda, dari Cloud Shell:

  • Ambil project ID Anda saat ini: PROJECT_ID=$(gcloud config get-value core/project)
  • Pastikan ini adalah project yang ingin Anda hapus: echo $PROJECT_ID
  • Menghapus project: gcloud projects delete $PROJECT_ID

Pelajari lebih lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.