Deskripsi
Gunakan chrome.ttsEngine
API untuk menerapkan mesin text-to-speech(TTS) menggunakan ekstensi. Jika didaftarkan 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 menghasilkan ucapan. Ekstensi Anda kemudian dapat menggunakan teknologi web apa pun yang tersedia untuk menyintesis dan menghasilkan output ucapan, dan mengirim peristiwa kembali ke fungsi panggilan untuk melaporkan status.
Izin
ttsEngine
Konsep dan penggunaan
Ekstensi dapat mendaftarkan dirinya sebagai mesin ucapan. Dengan melakukannya, kode dapat mencegat beberapa atau semua panggilan
ke fungsi seperti tts.speak()
dan tts.stop()
serta memberikan implementasi alternatif.
Ekstensi bebas menggunakan teknologi web apa pun yang tersedia untuk memberikan ucapan, termasuk streaming audio
dari server, audio HTML5. Ekstensi bahkan bisa
melakukan sesuatu yang berbeda
dengan ucapan tersebut, seperti menampilkan teks tertutup dalam pop-up atau mengirimnya sebagai pesan log ke
server jarak jauh.
Untuk menerapkan mesin TTS, ekstensi harus mendeklarasikan "ttsEngine" izin akses dan kemudian mendeklarasikan semua suara yang disediakannya 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 jumlah suara.
Parameter voice_name
wajib diisi. Nama harus cukup deskriptif
sehingga dapat mengidentifikasi
nama suara dan mesin yang digunakan. Jika dua ekstensi mendaftarkan suara, kemungkinan yang jarang terjadi
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
ucapan hanya dalam satu bahasa. Jika mesin 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 termudah 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, jangan sertakan parameter lang
dari manifes ekstensi Anda.
Terakhir, parameter event_types
diperlukan jika mesin telusur dapat mengirim peristiwa untuk memperbarui klien
tentang kemajuan sintesis ucapan. Setidaknya, mendukung jenis peristiwa 'end'
untuk menunjukkan
saat 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
dalam format camel case: misalnya, voiceName
, tidak seperti file manifes yang menggunakan
voice_name
.)
Kemungkinan jenis peristiwa yang dapat Anda kirim sesuai dengan jenis peristiwa yang digunakan oleh metode speak()
menerima:
'start'
: Mesin mulai mengucapkan ucapan.'word'
: Batas kata tercapai. Gunakanevent.charIndex
untuk menentukan ucapan saat ini posisi Anda.'sentence'
: Batas kalimat tercapai. Gunakanevent.charIndex
untuk menentukan posisi ucapan.'marker'
: Penanda SSML tercapai. Gunakanevent.charIndex
untuk menentukan ucapan saat ini posisi Anda.'end'
: Mesin telah selesai mengucapkan ucapan tersebut.'error'
: Terjadi error khusus mesin dan ucapan ini tidak dapat diucapkan. Lewati lebih banyak informasi dievent.errorMessage
.
Peristiwa 'interrupted'
dan 'cancelled'
tidak dikirim oleh mesin ucapan; kunci 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 keduanya
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 apakah akan mengirimkan permintaan ucapan tertentu ke ekstensi atau tidak hanya didasarkan pada
apakah ekstensi mendukung parameter suara yang diberikan dalam manifesnya dan telah terdaftar
pemroses untuk onSpeak
dan onStop
. Dengan kata lain, tidak ada cara bagi ekstensi untuk menerima
dan memutuskan secara dinamis 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. Ini harus memiliki panjang yang sama persis dengan audioStreamOptions.bufferSize dan dikodekan sebagai mono, pada audioStreamOptions.sampleRate, dan sebagai linear pcm, float bertanda 32-bit yaitu jenis Float32Array dalam javascript.
-
charIndex
angka opsional
Indeks karakter yang terkait dengan buffer audio ini.
-
isLastBuffer
boolean opsional
Benar jika buffer audio ini adalah teks terakhir yang diucapkan.
AudioStreamOptions
Berisi format streaming audio yang diharapkan akan diproduksi oleh mesin.
Properti
-
bufferSize
angka
Jumlah sampel dalam buffering audio.
-
sampleRate
angka
Frekuensi sampel yang diharapkan dalam buffering audio.
SpeakOptions
Opsi yang ditentukan untuk metode tts.speak().
Properti
-
gender
VoiceGender opsional
Tidak digunakan lagi sejak Chrome 92Gender tidak digunakan lagi dan akan diabaikan.
Jenis kelamin suara untuk ucapan yang disintesis.
-
lang
string opsional
Bahasa yang akan digunakan untuk sintesis, dalam bentuk bahasa-region. Contoh: 'en', 'en-US', 'en-GB', 'zh-CN'.
-
pitch
angka opsional
Tinggi nada berbicara antara 0 dan 2 inklusif, dengan 0 adalah nilai terendah dan 2 adalah yang tertinggi. 1.0 sesuai dengan tinggi nada default suara ini.
-
laju
angka opsional
Kecepatan bicara relatif terhadap frekuensi 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 rentang kecepatan penuh ini, jangan tampilkan error. Sebagai gantinya, pangkas kecepatan ke rentang yang didukung suara tersebut.
-
voiceName
string opsional
Nama suara yang akan digunakan untuk sintesis.
-
volume
angka opsional
Volume ucapan antara 0 dan 1 inklusif, dengan 0 adalah terendah dan 1 adalah tertinggi, dengan default 1,0.
VoiceGender
Gender tidak digunakan lagi dan akan diabaikan.
Enum
"laki-laki"
"perempuan"
Metode
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Dipanggil oleh mesin untuk memperbarui daftar suaranya. Daftar ini menggantikan setiap suara yang dideklarasikan dalam manifes ekstensi ini.
Parameter
-
suara
TtsVoice[]
Array objek
tts.TtsVoice
yang mewakili suara yang tersedia untuk sintesis ucapan.
Acara
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opsional: jika mesin mendukung peristiwa jeda, mesin harus menjeda ucapan yang sedang diucapkan, jika ada, hingga menerima peristiwa melanjutkan atau menghentikan peristiwa. Perhatikan bahwa peristiwa berhenti juga harus menghapus status dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Opsional: jika mesin mendukung peristiwa jeda, mesin tersebut juga harus mendukung peristiwa resume, untuk terus mengucapkan ucapan saat ini, jika ada. Perhatikan bahwa peristiwa berhenti juga harus menghapus status dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:() => 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 suara pertama yang cocok dengan objek opsi.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
ucapan
string
-
opsi
-
sendTtsEvent
fungsi
Parameter
sendTtsEvent
terlihat seperti ini:(event: tts.TtsEvent) => void
-
peristiwa
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 suara pertama yang cocok dengan objek opsi. Berbeda dari ttsEngine.onSpeak karena Chrome menyediakan layanan pemutaran audio dan menangani peristiwa pengiriman tts.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
ucapan
string
-
opsi
-
audioStreamOptions
-
sendTtsAudio
fungsi
Parameter
sendTtsAudio
terlihat seperti ini:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parameter yang berisi buffer audio dan data terkait.
-
-
sendError
fungsi
Chrome 94 dan yang lebih baruParameter
sendError
terlihat seperti ini:(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 onStop dan ucapan sudah dihentikan, ekstensi seharusnya tidak melakukan apa pun (tidak menimbulkan error). Jika ucapan dalam status dijeda, hal ini akan membatalkan status dijeda.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:() => void