Anda dapat mengirimkan Speech Synthesis Markup Language (SSML) di permintaan Text-to-Speech untuk memungkinkan lebih banyak penyesuaian dalam respons audio Anda dengan memberikan detail pada jeda, dan pemformatan audio untuk akronim, tanggal, waktu, singkatan, atau teks yang harus disensor. Lihat tutorial SSML Text-to-Speech untuk mengetahui informasi lebih lanjut dan contoh kode.
Berikut adalah contoh dari markup SSML dan Text-to-Speech yang melakukan sintesis pada teks:
<speak> Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>. I can play a sound <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>. I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>. Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line. Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>. I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>. Finally, I can speak a paragraph with two sentences. <p><s>This is sentence one.</s><s>This is sentence two.</s></p> </speak>
Berikut adalah teks hasil sintesis untuk contoh dokumen SSML:
Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays]. I can speak in cardinals. Your number is ten. Or I can speak in ordinals. You are tenth in line. Or I can even speak in digits. The digits for ten are one oh. I can also substitute phrases, like the World Wide Web Consortium. Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.
Text-to-Speech mendukung subset tag SSML yang tersedia, yang dijelaskan dalam topik ini.
Untuk mengetahui informasi selengkapnya tentang cara membuat data audio dari input SSML dengan Text-to-Speech, lihat Membuat File Audio Suara.
Coba sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa Text-to-Speech dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Coba Text-to-Speech gratisTips menggunakan SSML
Tergantung pada implementasinya, Anda mungkin perlu menggunakan karakter escape untuk tanda petik atau kutipan dalam payload SSML yang Anda kirim ke Text-to-Speech. Contoh berikut menunjukkan cara memformat input SSML yang disertakan dalam objek JSON.
"{ 'input':{ 'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard <break time=\"1s\"/>is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>' }, 'voice':{ 'languageCode':'en-us', 'name':'en-US-Standard-B', 'ssmlGender':'MALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }"
Karakter khusus
Hindari penggunaan karakter khusus SSML dalam teks yang akan dikonversi ke audio. Jika Anda perlu menggunakan karakter khusus SSML, atur agar karakter tersebut tidak dibaca sebagai kode dengan menggunakan kode escape-nya. Tabel berikut menunjukkan karakter SSML khusus dan kode escape-nya.
| Karakter | Kode escape |
|---|---|
| " | " |
| & | & |
| ' | ' |
| < | < |
| > | > |
Memilih suara
Anda dapat menetapkan suara pada
objek
VoiceSelectionParams. Lihat tutorial SSML Text-to-Speech
untuk mengetahui contoh kode
yang menunjukkan penggunaan objek VoiceSelectionParams.
Anda dapat menggunakan tag <voice> untuk membaca SSML dalam beberapa suara, tetapi
Anda harus menetapkan nama VoiceSelectionParams ke suara yang kompatibel:
| Jenis suara yang diminta | Jenis suara yang didukung dalam tag <voice> | ||||
|---|---|---|---|---|---|
| Neural2 | Studio | Wavenet | News | Standard | |
| Neural2 | ✔ | ✔ | ✔ | ||
| Studio | ✔ | ✔ | ✔ | ||
| Wavenet | ✔ | ✔ | ✔ | ||
| Standard | ✔ | ✔ | ✔ | ||
| News | ✔ | ✔ | ✔ | ||
Dukungan untuk elemen SSML
Bagian berikut menjelaskan elemen dan opsi SSML yang dapat digunakan dalam Actions Anda.
<speak>
Elemen root respons SSML.
Untuk mempelajari lebih lanjut elemen speak, lihat spesifikasi W3.
Contoh
<speak> my SSML content </speak>
<break>
Elemen kosong yang mengontrol jeda atau batas prosodi lainnya di antara kata. Penggunaan <break> di antara pasangan token bersifat opsional. Jika elemen ini tidak ada di antara kata, jeda akan otomatis ditentukan berdasarkan konteks linguistik.
Untuk mempelajari lebih lanjut elemen break, lihat spesifikasi W3.
Atribut
| Atribut | Deskripsi |
|---|---|
time |
Menetapkan durasi jeda berdasarkan detik atau milidetik (misalnya, "3s" atau "250ms"). |
strength |
Menetapkan kekuatan jeda prosodi output berdasarkan suku relatif. Nilai yang valid adalah: "x-weak", weak", "medium", "strong", dan "x-strong". Nilai "none" menunjukkan bahwa tidak ada batas jeda prosodi yang harus dihasilkan, yang dapat digunakan untuk mencegah jeda prosodi yang akan dihasilkan pemroses. Nilai lainnya menunjukkan kekuatan jeda yang tidak menurun secara monoton (meningkat secara konseptual) di antara token. Batasan yang lebih kuat biasanya disertai dengan jeda. |
Contoh
Contoh berikut menunjukkan cara menggunakan elemen <break> untuk memberikan jeda di antara langkah-langkah:
<speak> Step 1, take a deep breath. <break time="200ms"/> Step 2, exhale. Step 3, take a deep breath again. <break strength="weak"/> Step 4, exhale. </speak>
<say‑as>
Elemen ini memungkinkan Anda menunjukkan informasi tentang jenis konstruksi teks yang terdapat dalam elemen. Hal ini juga membantu menentukan tingkat detail untuk merender teks yang ada.
Elemen <say‑as> memiliki atribut yang wajib diberikan, interpret-as, yang menentukan cara nilai diucapkan. Atribut opsional format dan detail mungkin akan digunakan tergantung pada nilai interpret-as tertentu.
Contoh
Atribut interpret-as mendukung nilai berikut:
-
currencyContoh berikut diucapkan sebagai "forty two dollars and one cent". Jika atribut bahasa dihilangkan, atribut akan menggunakan lokalitas yang saat ini digunakan.
<speak> <say-as interpret-as='currency' language='en-US'>$42.01</say-as> </speak> -
telephoneLihat deskripsi
interpret-as='telephone'dalam catatan WG nilai atribut say-as W3C SSML 1.0.Contoh berikut diucapkan sebagai "one eight zero zero two zero two one two one two". Jika atribut "google:style" dihilangkan, atribut akan menyatakan nol sebagai huruf O.
Atribut "google:style='zero-as-zero'" saat ini hanya bekerja dalam lokalitas EN.
<speak> <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as> </speak> -
verbatimatauspell-outContoh berikut dieja huruf demi huruf:
<speak> <say-as interpret-as="verbatim">abcdefg</say-as> </speak> -
dateAtribut
formatadalah urutan kode karakter kolom tanggal. Kode karakter kolom yang didukung diformatmasing-masing adalah {y,m,d} untuk tahun, bulan, dan hari (dalam bulan tersebut). Jika kode kolom muncul sekali untuk tahun, bulan, atau hari, jumlah masing-masing digit yang diharapkan adalah 4, 2, dan 2. Jika kode kolom diulang, jumlah digit yang diharapkan adalah frekuensi pengulangan kode tersebut. Kolom pada teks tanggal mungkin akan dipisahkan dengan tanda baca dan/atau spasi.Atribut
detailmengontrol bentuk tanggal yang diucapkan. Untukdetail='1', hanya kolom hari dan salah satu dari kolom bulan atau tahun yang wajib diisi, meskipun keduanya mungkin disediakan. Ini adalah setelan default jika kolom yang disediakan kurang dari ketiga kolom tersebut. Format yang diucapkan adalah "The {tanggal} of {bulan}, {tahun}" (dalam bahasa Inggris).Contoh berikut diucapkan sebagai "The tenth of September, nineteen sixty":
<speak> <say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as> </speak>Contoh berikut diucapkan sebagai "The tenth of September":
<speak> <say-as interpret-as="date" format="dm">10-9</say-as> </speak>Untuk
detail='2', kolom hari, bulan, dan tahun wajib diisi dan ini adalah setelan default saat ketiga kolom disediakan. Format pengucapannya adalah "{bulan} {tanggal}, {tahun}" (dalam bahasa Inggris).Contoh berikut diucapkan sebagai "September tenth, nineteen sixty":
<speak> <say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as> </speak> -
charactersContoh berikut diucapkan sebagai "C A N":
<speak> <say-as interpret-as="characters">can</say-as> </speak> -
cardinalContoh berikut diucapkan sebagai "Twelve thousand three hundred forty five" (untuk bahasa Inggris di AS) atau "Twelve thousand three hundred and forty five" (untuk bahasa Inggris di Inggris Raya):
<speak> <say-as interpret-as="cardinal">12345</say-as> </speak> -
ordinalContoh berikut diucapkan sebagai "First":
<speak> <say-as interpret-as="ordinal">1</say-as> </speak> -
fractionContoh berikut diucapkan sebagai "five and a half":
<speak> <say-as interpret-as="fraction">5+1/2</say-as> </speak> -
expletiveataubleepContoh berikut berbunyi sebagai bip, seperti telah disensor:
<speak> <say-as interpret-as="expletive">censor this</say-as> </speak> -
unitMengonversi unit menjadi tunggal atau jamak, tergantung pada angkanya. Contoh berikut diucapkan sebagai "10 feet":
<speak> <say-as interpret-as="unit">10 foot</say-as> </speak> -
timeContoh berikut diucapkan sebagai "Two thirty P.M.":
<speak> <say-as interpret-as="time" format="hms12">2:30pm</say-as> </speak>Atribut
formatadalah urutan kode karakter kolom waktu. Kode karakter kolom yang didukung diformatmasing-masing adalah {h,m,s,Z,12,24} untuk jam, menit (dalam jam tersebut), detik (dalam menit tersebut), zona waktu, format waktu 12 jam, dan format waktu 24 jam. Jika kode kolom muncul sekali untuk jam, menit, atau detik, jumlah digit yang diharapkan untuk masing-masing adalah 1, 2, dan 2. Jika kode kolom diulang, jumlah digit yang diharapkan adalah frekuensi pengulangan kode tersebut. Kolom pada teks waktu mungkin akan dipisahkan dengan tanda baca dan/atau spasi. Jika jam, menit, atau detik tidak ditentukan dalam format atau tidak ada digit yang cocok, kolom akan diperlakukan sebagai nilai nol.formatdefault-nya adalah "hms12".Atribut
detailmengontrol apakah format waktu yang diucapkan menggunakan format 12 jam atau 24 jam. Format waktu yang diucapkan menggunakan format 24 jam, jikadetail='1'ataudetaildihilangkan dan format waktunya ditetapkan menjadi 24 jam. Format waktu yang diucapkan menggunakan format 12 jam, jikadetail='2'ataudetaildihilangkan dan format waktunya ditetapkan menjadi 12 jam.
Untuk mempelajari lebih lanjut elemen say-as, lihat spesifikasi W3.
<audio>
Mendukung penyisipan file audio yang direkam dan penyisipan format audio lain bersama dengan output ucapan yang disintesis.
Atribut
| Atribut | Wajib | Default | Nilai |
|---|---|---|---|
src |
ya | t/a | URI yang mengacu pada sumber media audio. Protokol yang didukung adalah https. |
clipBegin |
tidak | 0 | TimeDesignation yang merupakan selisih dari awal sumber audio untuk memulai pemutaran audio. Jika nilai ini lebih besar dari atau sama dengan durasi sumber audio yang sebenarnya, tidak ada audio yang akan disisipkan. |
clipEnd |
tidak | tak terhingga | TimeDesignation yang merupakan selisih dari awal sumber audio untuk menghentikan pemutaran audio. Jika durasi sumber audio yang sebenarnya kurang dari nilai ini, pemutaran berakhir pada waktu tersebut. Jika clipBegin lebih dari atau sama dengan clipEnd, tidak ada audio yang akan disisipkan. |
speed |
tidak | 100% | Rasio output laju pemutaran bersifat relatif terhadap kecepatan input normal yang dinyatakan dalam persentase. Formatnya adalah Bilangan Riil positif yang diikuti dengan %. Rentang yang saat ini didukung adalah [50% (pelan - kecepatan setengah), 200% (cepat - kecepatan ganda)]. Nilai di luar rentang itu dapat (atau mungkin tidak) disesuaikan agar berada di dalamnya. |
repeatCount |
tidak | 1, atau 10 jika repeatDur ditetapkan |
Bilangan Riil yang menentukan frekuensi penyisipan audio (setelah kliping, jika ada, dari clipBegin dan/atau clipEnd). Pengulangan pecahan tidak didukung, sehingga nilai akan dibulatkan ke bilangan bulat terdekat. Nol bukan nilai yang valid sehingga dianggap belum ditentukan dan memiliki nilai default dalam kasus tersebut. |
repeatDur |
tidak | tak terhingga | TimeDesignation yang merupakan batas durasi audio yang disisipkan setelah sumber diproses untuk atribut clipBegin, clipEnd, repeatCount, dan speed (bukan durasi pemutaran normal). Jika durasi audio yang diproses kurang dari nilai ini, pemutaran berakhir pada saat itu. |
soundLevel |
tidak | +0 dB | Sesuaikan tingkat suara audio sebesar soundLeveldesibel. Rentang maksimum adalah +/-40 dB tetapi rentang sebenarnya mungkin lebih rendah, dan kualitas output mungkin tidak memberikan hasil yang baik untuk seluruh rentang. |
Berikut adalah setelan untuk audio yang saat ini didukung:
- Format: MP3 (MPEG v2)
- 24 ribu sampel per detik
- 24 ribu ~ 96 ribu bit per detik, kecepatan tetap
- Format: Opus di Ogg
- 24 ribu sampel per detik (super-wideband)
- 24 ribu - 96 ribu bit per detik, kecepatan tetap
- Format (tidak digunakan lagi): WAV (RIFF)
- PCM 16-bit bertanda, little endian
- 24 ribu sampel per detik
- Untuk semua format:
- Saluran tunggal lebih disarankan, tetapi stereo diperbolehkan.
- Durasi maksimum 240 detik. Jika Anda ingin memutar audio dengan durasi yang lebih lama, pertimbangkan untuk menerapkan respons media.
- Batas ukuran file 5 megabyte.
- URL sumber harus menggunakan protokol HTTPS.
- UserAgent kami saat mengambil audio adalah "Google-Speech-Actions".
Konten elemen <audio> bersifat opsional dan digunakan jika file audio tidak dapat diputar atau jika perangkat output tidak mendukung audio. Konten dapat menyertakan elemen <desc> yang dalam hal ini konten teks dari elemen tersebut akan digunakan untuk ditampilkan. Untuk mengetahui informasi selengkapnya, lihat bagian Audio yang Direkam di Checklist Respons.
URL src juga harus berupa URL https (Google Cloud Storage dapat menghosting file audio Anda di URL https).
Untuk mempelajari respons media lebih lanjut, lihat bagian respons media di panduan Respons.
Untuk mempelajari lebih lanjut elemen audio, lihat spesifikasi W3.
Contoh
<speak> <audio src="cat_purr_close.ogg"> <desc>a cat purring</desc> PURR (sound didn't load) </audio> </speak>
<p>,<s>
Elemen kalimat dan paragraf.
Untuk mempelajari lebih lanjut elemen p dan s, lihat spesifikasi W3.
Contoh
<p><s>This is sentence one.</s><s>This is sentence two.</s></p>
Praktik terbaik
- Gunakan tag <s>...</s> untuk menggabungkan kalimat lengkap, terutama jika berisi elemen SSML yang mengubah prosodi (yaitu, <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq>, dan <sub>).
- Jika jeda dalam ucapan dimaksudkan agar cukup panjang sehingga Anda dapat mendengarnya, gunakan tag <s>...</s> dan tempatkan jeda di antara kalimat.
<sub>
Menunjukkan bahwa teks dalam nilai atribut alias menggantikan teks yang ada untuk pengucapan.
Anda juga dapat menggunakan elemen sub untuk memberikan pengucapan sederhana dari kata yang sulit dibaca. Contoh terakhir di bawah ini menunjukkan kasus penggunaan ini dalam Bahasa Jepang.
Untuk mempelajari lebih lanjut elemen sub, lihat spesifikasi W3.
Contoh
<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>
<mark>
Elemen kosong yang menempatkan penanda ke dalam urutan teks atau tag. Ini dapat digunakan untuk mereferensikan lokasi tertentu dalam urutan atau untuk menyisipkan penanda ke dalam aliran output untuk notifikasi asinkron.
Untuk mempelajari lebih lanjut elemen mark, lihat spesifikasi W3.
Contoh
<speak> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
<prosody>
Digunakan untuk menyesuaikan nada, kecepatan bicara, dan volume teks yang terkandung oleh elemen. Saat ini, atribut rate, pitch, dan volume didukung.
Atribut rate dan volume dapat ditetapkan sesuai dengan spesifikasi W3. Ada tiga opsi untuk menetapkan nilai atribut pitch:
| Atribut | Deskripsi |
|---|---|
name |
ID string untuk setiap tanda. |
| Opsi | Deskripsi |
|---|---|
| Relatif | Menentukan nilai relatif (misalnya "low", "medium", "high", dll.) dengan "medium" sebagai nada default-nya. |
| Semitone | Meningkatkan atau mengurangi nada sebesar "N" semitone menggunakan "+Nst" atau "-Nst". Perhatikan bahwa "+/-" dan "st" wajib diberikan. |
| Persentase | Meningkatkan atau menurunkan nada sebesar "N" persen menggunakan "+N%" atau "-N%". Perhatikan bahwa "%" wajib diberikan, tetapi "+/-" bersifat opsional. |
Untuk mempelajari lebih lanjut elemen prosody, lihat spesifikasi W3.
Contoh
Contoh berikut menggunakan elemen <prosody> untuk berbicara perlahan pada 2 semitone lebih rendah dari biasanya:
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<emphasis>
Digunakan untuk menambahkan atau menghapus penekanan dari teks yang terkandung oleh elemen. Elemen <emphasis> mengubah ucapan yang mirip dengan <prosody>, tetapi tanpa perlu menetapkan atribut ucapan satu per satu.
Elemen ini mendukung atribut "level" opsional dengan nilai valid berikut:
strongmoderatenonereduced
Untuk mempelajari lebih lanjut elemen emphasis, lihat spesifikasi W3.
Contoh
Contoh berikut menggunakan elemen <emphasis> untuk membuat pengumuman:
<emphasis level="moderate">This is an important announcement</emphasis>
<par>
Container media paralel yang memungkinkan Anda memutar beberapa elemen media sekaligus. Konten yang diizinkan adalah kumpulan dari satu atau beberapa elemen <par>, <seq>, dan <media>. Urutan elemen <media> tidak signifikan.
Kecuali jika elemen turunan menentukan waktu mulai yang berbeda, waktu mulai implisit untuk elemen sama dengan waktu mulai container <par>. Jika elemen turunan memiliki nilai selisih yang ditetapkan untuk atribut begin atau end, selisih elemen akan bersifat relatif terhadap waktu mulai container <par>. Untuk elemen <par> root, atribut begin diabaikan dan waktu awalnya adalah saat proses sintesis ucapan SSML mulai menghasilkan output untuk elemen <par> root (yaitu secara efektif mencatat "nol").
Contoh
<speak>
<par>
<media xml:id="question" begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media xml:id="answer" begin="question.end+2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media begin="answer.end-0.2s" soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</par>
</speak><seq>
Container media berurutan yang memungkinkan Anda memutar elemen media satu per satu. Konten yang diizinkan adalah kumpulan dari satu atau beberapa elemen <seq>, <par>, dan <media>. Urutan elemen media adalah urutan proses render-nya
Atribut begin dan end dari elemen turunan dapat ditetapkan ke nilai selisih (lihat Spesifikasi Waktu di bawah). Nilai selisih elemen turunan tersebut akan bersifat relatif terhadap end dari elemen sebelumnya dalam urutan atau, untuk elemen pertama dalam urutan, relatif terhadap awal container <seq>-nya.
Contoh
<speak>
<seq>
<media begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media begin="2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</seq>
</speak><media>
Menampilkan lapisan media dalam elemen <par> atau <seq>. Konten yang diizinkan dari elemen <media> adalah elemen <speak> atau <audio> SSML. Tabel berikut menjelaskan atribut yang valid untuk elemen <media>.
Atribut
| Atribut | Wajib | Default | Nilai |
|---|---|---|---|
| xml:id | tidak | tidak ada nilai | ID XML unik untuk elemen ini. Entity yang dienkode tidak didukung. Nilai ID yang diizinkan cocok dengan ekspresi reguler "([-_#]|\p{L}|\p{D})+". Lihat XML-ID untuk mengetahui informasi selengkapnya. |
| begin | tidak | 0 | Waktu mulai untuk container media ini. Diabaikan jika ini adalah elemen container media root (diperlakukan sama dengan default "0"). Lihat bagian Spesifikasi waktu di bawah untuk mengetahui nilai string yang valid. |
| end | tidak | tidak ada nilai | Spesifikasi waktu berakhir untuk container media ini. Lihat bagian Spesifikasi waktu di bawah untuk mengetahui nilai string yang valid. |
| repeatCount | tidak | 1 | Bilangan Riil yang menentukan frekuensi penyisipan media. Pengulangan pecahan tidak didukung, sehingga nilai akan dibulatkan ke bilangan bulat terdekat. Nol bukan nilai yang valid sehingga dianggap belum ditentukan dan memiliki nilai default dalam kasus tersebut. |
| repeatDur | tidak | tidak ada nilai | TimeDesignation yang merupakan batas durasi media yang dimasukkan. Jika durasi media kurang dari nilai ini, pemutaran berakhir pada saat itu. |
| soundLevel | tidak | +0 dB | Sesuaikan tingkat suara audio sebesar soundLevel desibel. Rentang maksimum adalah +/-40 dB tetapi rentang sebenarnya mungkin lebih rendah, dan kualitas output mungkin tidak memberikan hasil yang baik untuk seluruh rentang. |
| fadeInDur | tidak | 0 d | TimeDesignation yang memungkinkan media melakukan fade-in dari senyap ke soundLevel yang ditentukan secara opsional. Jika durasi media kurang dari nilai ini, fade-in akan berhenti di akhir pemutaran dan tingkat suara tidak akan mencapai tingkat suara yang ditentukan. |
| fadeOutDur | tidak | 0 d | TimeDesignation yang memungkinkan media melakukan fade-out dari soundLevel yang ditentukan secara opsional hingga media tersebut senyap. Jika durasi media kurang dari nilai ini, tingkat suara akan disetel ke nilai yang lebih rendah untuk memastikan bagian senyap tercapai di akhir pemutaran. |
Spesifikasi waktu
Spesifikasi waktu, yang digunakan untuk nilai atribut `begin` dan `end` dari elemen <media> serta container media (elemen <par> dan <seq>), merupakan nilai selisih (misalnya, +2.5s) atau nilai syncbase (misalnya, foo_id.end-250ms).
- Nilai selisih - Nilai selisih waktu merupakan Timecount-value SMIL yang memungkinkan nilai yang cocok dengan ekspresi reguler:
"\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"String digit pertama adalah seluruh bagian dari bilangan desimal dan string digit kedua adalah bagian pecahan desimal. Tanda default (yaitu "(+|-)?") adalah "+". Nilai unit masing-masing sesuai dengan jam, menit, detik, dan milidetik. Default untuk unit adalah "s" (detik).
- Nilai Syncbase - Nilai syncbase adalah syncbase-value SMIL yang memungkinkan nilai yang cocok dengan ekspresi reguler:
"([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"Digit dan unit ditafsirkan dengan cara yang sama seperti nilai selisih.
<phoneme>
Anda dapat menggunakan tag <phoneme> untuk membuat pengucapan kata-kata kustom
yang sesuai. Text-to-Speech menerima alfabet fonetik
IPA dan
X-SAMPA. Lihat
halaman fonem untuk mengetahui daftar bahasa
dan fonem yang didukung.
Setiap penerapan tag <phoneme> mengacu pada pengucapan satu
kata:
<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
Penanda penekanan
Terdapat maksimum tiga tingkat penekanan yang dapat ditempatkan dalam transkripsi:
- Penekanan primer: Dilambangkan dengan /ˈ/ pada IPA dan /"/ pada X-SAMPA.
- Penekanan sekunder: Dilambangkan dengan /ˌ/ pada IPA dan /%/ pada X-SAMPA.
- Tanpa penekanan: Tidak dilambangkan dengan simbol (dalam salah satu notasi).
Beberapa bahasa mungkin memiliki kurang dari tiga tingkat atau tanpa penempatan penekanan sama sekali. Lihat halaman fonem untuk melihat tingkat penekanan yang tersedia untuk bahasa Anda. Penanda penekanan ditempatkan di awal setiap suku kata yang ditekankan. Misalnya, dalam Bahasa Inggris AS:
| Contoh kata | IPA | X-SAMPA |
|---|---|---|
| water | ˈwɑːtɚ | "wA:t@` |
| underwater | ˌʌndɚˈwɑːtɚ | %Vnd@"wA:t@ |
Transkripsi Luas vs Sempit
Sebagai aturan umum, pastikan transkripsi Anda lebih luas dan bersifat fonetik. Misalnya, dalam Bahasa Inggris AS, transkripsikan intervokal /t/ (daripada menggunakan ketukan):
| Contoh kata | IPA | X-SAMPA |
|---|---|---|
| butter | ˈbʌtɚ bukan ˈbʌɾɚ | "bVt@` bukan "bV4@` |
Dalam beberapa kasus, penggunaan representasi fonetik dapat membuat hasil TTS terdengar tidak natural (misalnya, jika urutan fonem secara anatomis sulit diucapkan).
Salah satu contohnya adalah menyuarakan asimilasi untuk /s/ dalam Bahasa Inggris. Dalam hal ini, asimilasi harus tercermin dalam transkripsi:
| Contoh kata | IPA | X-SAMPA |
|---|---|---|
| cats | ˈkæts | "k{ts |
| dogs | ˈdɑːgz bukan ˈdɑːgs | "dA:gz bukan "dA:gs |
Pengurangan
Setiap suku kata harus berisi satu (dan hanya satu) vokal. Artinya, Anda harus menghindari konsonan suku kata dan mentranskripsikannya dengan vokal yang dikurangi. Misalnya:
| Contoh kata | IPA | X-SAMPA |
|---|---|---|
| kitten | ˈkɪtən bukan ˈkɪtn | "kIt@n bukan "kitn |
| kettle | ˈkɛtəl bukan ˈkɛtl | "kEt@l bukan "kEtl |
Silabifikasi
Anda dapat memilih untuk menentukan batas suku kata dengan menggunakan /./. Setiap suku kata harus berisi satu (dan hanya satu) vokal. Contoh:
| Contoh kata | IPA | X-SAMPA |
|---|---|---|
| readability | ˌɹiː.də.ˈbɪ.lə.tiː | %r\i:.d@."bI.l@.ti: |
Kamus pengucapan kustom
Selain memberikan pengucapan yang sesuai dengan tag phoneme, Anda dapat memberikan kamus pengucapan kustom dalam RPC sintesis ucapan. Jika kamus pengucapan khusus ada dalam permintaan, teks input akan otomatis diubah dengan tag SSML phoneme.
Sebagai contoh, permintaan berikut yang memiliki input teks dan pengucapan kustom akan diubah dan dibuat setara dengan SSML di bawah.
Input Awal:
input: {
text: 'Hello world! It is indeed a beautiful world!',
custom_pronunciations: {
pronunciations: {
phrase: 'world'
phonetic_encoding: PHONETIC_ENCODING_IPA
pronunciation: 'wɜːld'
}
}
}Input baru:
input: {
ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}Durasi
Text-to-Speech mendukung <say-as interpret-as="duration"> untuk membaca durasi dengan benar. Misalnya, contoh berikut akan diucapkan sebagai
"five hours and thirty minutes":
<say-as interpret-as="duration" format="h:m">5:30</say-as>
String format mendukung nilai berikut:
| Singkatan | Nilai |
|---|---|
| h | jam |
| m | menit |
| s | detik |
| ms | milidetik |
<voice>
Tag <voice> memungkinkan Anda menggunakan lebih dari satu suara dalam satu permintaan SSML. Pada contoh berikut, suara defaultnya adalah suara pria berbahasa Inggris.
Semua kata akan disintesis dengan suara ini, kecuali untuk "qu'est-ce qui t'amène
ici", yang akan diucapkan dalam Bahasa Prancis menggunakan suara perempuan, bukan
bahasa default (Inggris) dengan gender (laki-laki).
<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>
Selain itu, Anda dapat menggunakan tag <voice> untuk menentukan suara individu
(nama suara di halaman suara yang didukung)
daripada menentukan suara language dan/atau gender:
<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est mignon</voice><break time="250ms"/> said a pet shop owner</speak>
Saat Anda menggunakan tag <voice>, Text-to-Speech akan menerima
name (nama suara yang ingin Anda gunakan)
atau kombinasi dari atribut berikut. Ketiga atribut tersebut
bersifat opsional, tetapi Anda harus memberikan setidaknya satu jika Anda tidak memberikan name.
gender: Salah satu dari "male", "female" atau "neutral".variant: Digunakan sebagai tiebreaker jika ada beberapa kemungkinan suara mana yang akan digunakan berdasarkan konfigurasi Anda.language: Bahasa yang Anda inginkan. Hanya satu bahasa yang dapat ditentukan dalam tag<voice>tertentu. Tentukan bahasa Anda dalam format BCP-47. Anda dapat menemukan kode BCP-47 untuk bahasa Anda pada kolom kode bahasa di halaman suara dan bahasa yang didukung.
Anda juga dapat mengontrol prioritas relatif dari setiap atribut gender, variant,
dan language menggunakan dua tag tambahan: required dan ordering.
required: Jika atribut ditetapkan sebagairequireddan tidak dikonfigurasi dengan benar, permintaan akan gagal.ordering: Atribut yang tercantum setelah tagorderingdianggap sebagai atribut pilihan, bukan wajib diberikan. Text-to-Speech API mempertimbangkan atribut yang lebih dipilih berdasarkan upaya terbaik sesuai urutan yang tercantum setelah tagordering. Jika atribut pilihan tidak dikonfigurasi dengan benar, Text-to-Speech mungkin masih menampilkan suara yang valid, tetapi konfigurasi yang salah akan dihapus.
Contoh konfigurasi menggunakan tag required dan ordering:
<speak>And there it was <voice language="en-GB" gender="male" required="gender" ordering="gender language">a flying bird </voice>roaring in the skies for the first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female" ordering="language gender">Sunday Funday.</voice></speak>
<lang>
Anda dapat menggunakan <lang> untuk menyertakan teks dalam berbagai bahasa dalam permintaan SSML yang sama. Semua bahasa akan disintesis dengan suara yang sama, kecuali jika Anda menggunakan
tag <voice> untuk mengubah suara secara eksplisit. String xml:lang harus berisi
bahasa target dalam format BCP-47 (nilai ini dicantumkan sebagai "kode bahasa" di
tabel suara yang didukung). Dalam contoh
berikut, "chat" akan diucapkan dalam bahasa Prancis, bukan bahasa default
(Inggris):
<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>
Text-to-Speech mendukung tag <lang> berdasarkan upaya terbaik. Tidak semua
kombinasi bahasa memberikan hasil kualitas yang sama jika ditentukan dalam permintaan
SSML yang sama. Dalam beberapa kasus, kombinasi bahasa mungkin menghasilkan efek yang
dapat dideteksi tetapi samar atau dianggap negatif. Masalah umum:
- Bahasa Jepang dengan karakter Kanji tidak didukung oleh tag
<lang>. Input ditransliterasi dan dibaca sebagai karakter bahasa China. - Bahasa semit seperti Arab, Ibrani, dan Persia tidak didukung
oleh tag
<lang>dan akan jadi senyap. Jika Anda ingin menggunakan salah satu bahasa ini, sebaiknya gunakan tag<voice>untuk beralih ke suara yang mengucapkan bahasa yang Anda inginkan (jika tersedia).
Timepoint SSML
Text-to-Speech API mendukung penggunaan timepoint dalam data audio yang Anda buat. Timepoint adalah stempel waktu (dalam detik, diukur dari awal
audio yang dihasilkan) yang sesuai dengan titik yang ditetapkan dalam skrip. Anda
dapat menetapkan timepoint dalam skrip menggunakan tag <mark>. Saat audio
dibuat, API akan menampilkan selisih waktu antara awal audio
dan timepoint-nya.
Terdapat dua langkah untuk menyetel timepoint:
- Tambahkan tag SSML
<mark>ke titik dalam skrip yang ingin diberi stempel waktu. - Tetapkan TimepointType
ke
SSML_MARK. Jika kolom ini tidak ditetapkan, timepoint tidak akan ditampilkan secara default.
Contoh berikut menampilkan dua timepoint:
- timepoint_1: Menunjukkan waktu (dalam detik) saat kata "Mark" muncul dalam audio yang dihasilkan.
- timepoint_2: Menunjukkan waktu (dalam detik) saat kata "see" muncul dalam audio yang dihasilkan.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak>
Gaya
Suara berikut dapat berbicara dalam berbagai gaya:- en-US-Neural2-F
- en-US-Neural2-J
Gunakan tag <google:style> untuk mengontrol gaya yang akan digunakan. Hanya gunakan tag di sekitar kalimat lengkap.
Contoh:
<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>
Kolom name mendukung nilai berikut:
apologeticcalmempatheticfirmlively