Deskripsi
Gunakan chrome.ttsEngine
API untuk mengimplementasikan mesin text-to-speech(TTS) menggunakan ekstensi. Jika ekstensi Anda mendaftar menggunakan API ini, ekstensi akan menerima peristiwa yang berisi ucapan yang akan diucapkan dan parameter lainnya saat ekstensi atau Aplikasi Chrome apa pun menggunakan tts
API untuk membuat ucapan. Selanjutnya, ekstensi Anda dapat menggunakan teknologi web apa pun yang tersedia untuk menyintesis dan menghasilkan ucapan, serta mengirimkan peristiwa kembali ke fungsi panggilan untuk melaporkan status.
Izin
ttsEngine
Ringkasan
Ekstensi dapat mendaftarkan dirinya sebagai mesin ucapan. Dengan demikian, aplikasi ini dapat menangkap beberapa atau semua panggilan
ke fungsi seperti tts.speak
dan tts.stop
serta memberikan implementasi alternatif.
Ekstensi dapat menggunakan teknologi web apa pun yang tersedia untuk menyediakan ucapan, termasuk streaming audio
dari server, audio HTML5. Ekstensi bahkan dapat melakukan sesuatu yang berbeda dengan ucapan, seperti menampilkan teks tertutup di jendela pop-up atau mengirimnya sebagai pesan log ke server jarak jauh.
Manifes
Untuk mengimplementasikan mesin TTS, ekstensi harus mendeklarasikan izin "ttsEngine", lalu mendeklarasikan semua suara yang disediakan dalam manifes ekstensi, seperti ini:
{
"name": "My TTS Engine",
"version": "1.0",
"permissions": ["ttsEngine"],
"tts_engine": {
"voices": [
{
"voice_name": "Alice",
"lang": "en-US",
"event_types": ["start", "marker", "end"]
},
{
"voice_name": "Pat",
"lang": "en-US",
"event_types": ["end"]
}
]
},
"background": {
"page": "background.html",
"persistent": false
}
}
Ekstensi dapat menentukan berapa pun jumlah suara.
Parameter voice_name
wajib diisi. Nama harus cukup deskriptif agar dapat mengidentifikasi
nama suara dan mesin yang digunakan. Jika dua ekstensi mendaftarkan suara dengan nama yang sama, klien dapat menentukan ID ekstensi yang harus melakukan sintesis.
Parameter lang
bersifat opsional, tetapi sangat direkomendasikan. Hampir selalu, suara dapat menyintesis
suara hanya dalam satu bahasa. Saat mendukung lebih dari satu bahasa, mesin dapat dengan mudah
mendaftarkan suara terpisah untuk setiap bahasa. Dalam situasi yang jarang terjadi, saat satu suara dapat
menangani lebih dari satu bahasa, cara yang paling mudah adalah cukup mencantumkan dua suara terpisah dan menanganinya menggunakan
logika yang sama secara internal. Namun, jika Anda ingin membuat suara yang akan menangani ucapan dalam bahasa apa pun, kosongkan parameter lang
dari manifes ekstensi Anda.
Terakhir, parameter event_types
diperlukan jika mesin dapat mengirim peristiwa untuk memberi tahu klien
tentang progres sintesis ucapan. Setidaknya, mendukung jenis peristiwa 'end'
untuk menunjukkan
kapan ucapan selesai sangat direkomendasikan. Jika tidak, Chrome tidak dapat menjadwalkan ucapan dalam antrean.
Setelah dimuat, ekstensi dapat menggantikan daftar suara yang dideklarasikan dengan memanggil chrome.ttsEngine.updateVoices
. (Perhatikan bahwa parameter yang digunakan dalam panggilan terprogram ke
updateVoices
berada dalam camel case: misalnya, voiceName
, tidak seperti file manifes yang menggunakan
voice_name
.)
Kemungkinan jenis peristiwa yang dapat Anda kirim sesuai dengan jenis peristiwa yang diterima metode speak()
:
'start'
: Mesin telah mulai mengucapkan ucapan.'word'
: Batas kata tercapai. Gunakanevent.charIndex
untuk menentukan posisi ucapan saat ini.'sentence'
: Batas kalimat tercapai. Gunakanevent.charIndex
untuk menentukan posisi ucapan saat ini.'marker'
: Penanda SSML tercapai. Gunakanevent.charIndex
untuk menentukan posisi ucapan saat ini.'end'
: Mesin telah selesai mengucapkan ucapan.'error'
: Terjadi error khusus mesin dan ucapan ini tidak dapat diucapkan. Teruskan informasi selengkapnya dievent.errorMessage
.
Peristiwa 'interrupted'
dan 'cancelled'
tidak dikirim oleh mesin ucapan; peristiwa tersebut dibuat
secara otomatis oleh Chrome.
Klien text-to-speech bisa mendapatkan informasi suara dari manifes ekstensi Anda dengan memanggil
tts.getVoices
, dengan asumsi Anda telah mendaftarkan pemroses peristiwa ucapan seperti yang dijelaskan di bawah.
Menangani peristiwa ucapan
Untuk menghasilkan ucapan atas permintaan klien, ekstensi Anda harus mendaftarkan pemroses untuk onSpeak
dan onStop
, seperti ini:
const speakListener = (utterance, options, sendTtsEvent) => {
sendTtsEvent({type: 'start', charIndex: 0})
// (start speaking)
sendTtsEvent({type: 'end', charIndex: utterance.length})
};
const stopListener = () => {
// (stop all speech)
};
chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);
Keputusan untuk mengirim permintaan ucapan tertentu ke ekstensi atau tidak hanya didasarkan pada apakah ekstensi mendukung parameter suara tertentu dalam manifesnya dan telah mendaftarkan pemroses untuk onSpeak
dan onStop
. Dengan kata lain, tidak ada cara bagi ekstensi untuk menerima permintaan ucapan dan secara dinamis memutuskan apakah akan menanganinya atau tidak.
Jenis
AudioBuffer
Parameter yang berisi buffer audio dan data terkait.
Properti
-
audioBuffer
ArrayBuffer
Buffer audio dari mesin text-to-speech. Panjangnya harus sama persis dengan audioStreamOptions.bufferSize dan dienkode sebagai mono, pada audioStreamOptions.sampleRate, dan sebagai pcm linear, float bertanda tangan 32-bit, yaitu jenis Float32Array di JavaScript.
-
charIndex
nomor opsional
Indeks karakter yang terkait dengan buffer audio ini.
-
isLastBuffer
boolean opsional
True jika buffer audio ini adalah yang terakhir untuk teks yang diucapkan.
AudioStreamOptions
Berisi format streaming audio yang diharapkan akan dihasilkan oleh mesin.
Properti
-
bufferSize
angka
Jumlah sampel dalam buffer audio.
-
sampleRate
angka
Frekuensi sampel yang diharapkan dalam buffer audio.
SpeakOptions
Opsi yang ditentukan ke metode tts.speak().
Properti
-
gender
VoiceGender opsional
Tidak digunakan lagi sejak Chrome 92Gender tidak digunakan lagi dan akan diabaikan.
Gender suara untuk ucapan yang disintesis.
-
lang
string opsional
Bahasa yang akan digunakan untuk sintesis, dalam bentuk language-region. Contoh: 'en', 'en-US', 'en-GB', 'zh-CN'.
-
pitch
nomor opsional
Berbicara dengan nada antara 0 dan 2 inklusif, dengan 0 sebagai terendah dan 2 sebagai tertinggi. 1.0 sesuai dengan nada default suara ini.
-
laju
nomor opsional
Kecepatan bicara relatif terhadap kecepatan default untuk suara ini. 1.0 adalah tingkat default, biasanya sekitar 180 hingga 220 kata per menit. 2,0 dua kali lebih cepat, dan 0,5 adalah setengah lebih cepat. Nilai ini dijamin antara 0,1 dan 10,0, inklusif. Jika suara tidak mendukung kecepatan penuh ini, jangan tampilkan error. Sebagai gantinya, potong kecepatan ke rentang yang didukung suara.
-
voiceName
string opsional
Nama suara yang akan digunakan untuk sintesis.
-
volume
nomor opsional
Volume berbicara antara 0 dan 1 inklusif, dengan 0 sebagai terendah dan 1 sebagai tertinggi, dengan default 1.0.
VoiceGender
Gender tidak digunakan lagi dan akan diabaikan.
Enum
Metode
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Dipanggil oleh mesin untuk memperbarui daftar suaranya. Daftar ini mengganti suara apa pun yang dideklarasikan dalam manifes ekstensi ini.
Parameter
-
suara
TtsVoice[]
Array objek
tts.TtsVoice
yang mewakili suara yang tersedia untuk sintesis ucapan.
Peristiwa
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opsional: jika mesin mendukung peristiwa jeda, mesin harus menjeda ucapan saat ini yang sedang diucapkan, jika ada, hingga menerima peristiwa lanjutkan atau peristiwa penghentian. Perhatikan bahwa peristiwa berhenti juga harus menghapus status dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Opsional: jika mesin mendukung peristiwa jeda, mesin juga harus mendukung peristiwa lanjutkan, untuk terus mengucapkan ucapan saat ini, jika ada. Perhatikan bahwa peristiwa berhenti juga harus menghapus status dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Dipanggil saat pengguna melakukan panggilan ke tts.speak() dan salah satu suara dari manifes ekstensi ini adalah yang pertama cocok dengan objek opsi.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
ucapan
string
-
opsi
-
sendTtsEvent
fungsi
Parameter
sendTtsEvent
terlihat seperti:(event: tts.TtsEvent) => void
-
event
Peristiwa dari mesin text-to-speech yang menunjukkan status ucapan ini.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Dipanggil saat pengguna melakukan panggilan ke tts.speak() dan salah satu suara dari manifes ekstensi ini adalah yang pertama cocok dengan objek opsi. Berbeda dengan ttsEngine.onSpeak bahwa Chrome menyediakan layanan pemutaran audio dan menangani pengiriman peristiwa tts.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
ucapan
string
-
opsi
-
audioStreamOptions
-
sendTtsAudio
fungsi
Parameter
sendTtsAudio
terlihat seperti:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parameter yang berisi buffer audio dan data terkait.
-
-
sendError
fungsi
Chrome 94 dan yang lebih baruParameter
sendError
terlihat seperti:(errorMessage?: string) => void
-
errorMessage
string opsional
String yang menjelaskan error.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Diaktifkan saat panggilan dilakukan ke tts.stop dan ekstensi ini mungkin sedang berbicara. Jika ekstensi menerima panggilan ke onCreate dan ucapan sudah dihentikan, ekstensi itu seharusnya tidak melakukan apa pun (jangan memunculkan error). Jika ucapan dalam keadaan dijeda, ini akan membatalkan keadaan dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:() => void