chrome.ttsEngine

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 menggunakan tts API untuk menghasilkan ucapan. Ekstensi Anda kemudian dapat menggunakan teknologi web yang tersedia untuk menyintesis dan menghasilkan ucapan, serta mengirim peristiwa kembali ke fungsi panggilan untuk melaporkan status.

Izin

ttsEngine

Ringkasan

Ekstensi dapat mendaftarkan dirinya sebagai mesin ucapan. Dengan melakukannya, ia dapat mencegat beberapa atau semua panggilan ke fungsi seperti tts.speak dan tts.stop serta memberikan penerapan alternatif. Ekstensi bebas menggunakan teknologi web 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 mengirimkannya sebagai pesan log ke server jarak jauh.

Manifes

Untuk menerapkan 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 sejumlah suara.

Parameter voice_name wajib diisi. Nama harus cukup deskriptif sehingga 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 menyintesiskan ucapan hanya dalam satu bahasa. Jika mendukung lebih dari satu bahasa, mesin dapat dengan mudah mendaftarkan suara yang berbeda untuk setiap bahasa. Dalam keadaan langka ketika satu suara dapat menangani lebih dari satu bahasa, cara termudah adalah 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, jangan sertakan parameter lang dari manifes ekstensi Anda.

Terakhir, parameter event_types diperlukan jika mesin dapat mengirim peristiwa untuk memperbarui klien tentang progres sintesis ucapan. Setidaknya, mendukung jenis peristiwa 'end' untuk menunjukkan kapan ucapan selesai sangat direkomendasikan, jika tidak, Chrome tidak dapat menjadwalkan ucapan yang diantrekan.

Setelah dimuat, ekstensi dapat mengganti daftar suara yang dideklarasikan dengan memanggil chrome.ttsEngine.updateVoices. (Perhatikan bahwa parameter yang digunakan dalam panggilan terprogram ke updateVoices menggunakan camel case: misalnya, voiceName, tidak seperti file manifes yang menggunakan voice_name.)

Jenis peristiwa yang dapat Anda kirimkan sesuai dengan jenis peristiwa yang diterima metode speak():

  • 'start': Mesin telah mulai mengucapkan ucapan.
  • 'word': Batas kata telah tercapai. Gunakan event.charIndex untuk menentukan posisi ucapan saat ini.
  • 'sentence': Batas kalimat telah tercapai. Gunakan event.charIndex untuk menentukan posisi ucapan saat ini.
  • 'marker': Penanda SSML telah tercapai. Gunakan event.charIndex untuk menentukan posisi ucapan saat ini.
  • 'end': Mesin telah selesai mengucapkan kata.
  • 'error': Terjadi error khusus mesin dan ucapan ini tidak dapat diucapkan. Sampaikan informasi selengkapnya di event.errorMessage.

Peristiwa 'interrupted' dan 'cancelled' tidak dikirim oleh mesin ucapan; peristiwa tersebut dibuat secara otomatis oleh Chrome.

Klien text-to-speech dapat memperoleh 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 atau tidak mengirim permintaan ucapan tertentu ke ekstensi hanya didasarkan pada apakah ekstensi mendukung parameter suara tertentu dalam manifesnya dan telah mendaftarkan pendengar untuk onSpeak dan onStop. Dengan kata lain, tidak ada cara bagi ekstensi untuk menerima permintaan ucapan dan memutuskan secara dinamis apakah akan menanganinya.

Jenis

AudioBuffer

Chrome 92+

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 32-bit bertanda, yaitu jenis Float32Array di JavaScript.

  • charIndex

    nomor opsional

    Indeks karakter yang terkait dengan buffer audio ini.

  • isLastBuffer

    boolean opsional

    Benar jika buffer audio ini adalah yang terakhir untuk teks yang sedang diucapkan.

AudioStreamOptions

Chrome 92+

Berisi format streaming audio yang diharapkan dihasilkan oleh mesin.

Properti

  • bufferSize

    angka

    Jumlah sampel dalam buffer audio.

  • sampleRate

    angka

    Frekuensi sampel yang diharapkan dalam buffer audio.

LanguageInstallStatus

Chrome 132+

Status penginstalan suara.

Enum

"notInstalled"

"menginstal"

"terinstal"

"gagal"

LanguageStatus

Chrome 132+

Status penginstalan bahasa.

Properti

  • error

    string opsional

    Detail tentang kegagalan penginstalan. Diisi secara opsional jika bahasa gagal diinstal.

  • installStatus

    Status penginstalan.

  • lang

    string

    String bahasa dalam bentuk kode bahasa-kode wilayah, dengan wilayah dapat dihilangkan. Contohnya adalah en, en-AU, zh-CH.

LanguageUninstallOptions

Chrome 132+

Opsi untuk meng-uninstal bahasa tertentu.

Properti

  • uninstallImmediately

    boolean

    Benar jika klien TTS ingin bahasa segera dihapus. Mesin dapat memilih apakah atau kapan bahasa akan di-uninstal, berdasarkan parameter ini dan informasi pemohon. Jika salah (false), aplikasi dapat menggunakan kriteria lain, seperti penggunaan terbaru, untuk menentukan kapan harus meng-uninstal.

SpeakOptions

Chrome 92+

Opsi yang ditentukan untuk metode tts.speak().

Properti

  • gender

    VoiceGender opsional

    Tidak digunakan lagi sejak Chrome 92

    Gender tidak digunakan lagi dan akan diabaikan.

    Gender suara untuk ucapan yang disintesis.

  • lang

    string opsional

    Bahasa yang akan digunakan untuk sintesis, dalam bentuk bahasa-wilayah. Contoh: 'en', 'en-US', 'en-GB', 'zh-CN'.

  • pitch

    nomor opsional

    Nada bicara antara 0 dan 2 inklusif, dengan 0 adalah yang terendah dan 2 adalah yang tertinggi. 1.0 sesuai dengan nada default suara ini.

  • laju

    nomor opsional

    Kecepatan bicara relatif terhadap kecepatan default untuk suara ini. 1,0 adalah kecepatan default, biasanya sekitar 180 hingga 220 kata per menit. 2,0 adalah dua kali lebih cepat, dan 0,5 adalah setengahnya. Nilai ini dijamin antara 0,1 dan 10,0, inklusif. Jika suara tidak mendukung rentang kecepatan penuh ini, jangan menampilkan error. Sebagai gantinya, klip kecepatan ke rentang yang didukung suara.

  • voiceName

    string opsional

    Nama suara yang akan digunakan untuk sintesis.

  • volume

    nomor opsional

    Volume ucapan antara 0 dan 1 inklusif, dengan 0 adalah yang terendah dan 1 adalah yang tertinggi, dengan nilai default 1,0.

TtsClient

Chrome 131+

ID untuk klien yang meminta status.

Properti

  • id

    string

    Klien membuat permintaan pengelolaan bahasa. Untuk ekstensi, ini adalah ID ekstensi unik. Untuk fitur Chrome, ini adalah nama fitur yang dapat dibaca manusia.

  • Jenis pemohon.

TtsClientSource

Chrome 131+

Jenis pemohon.

Enum

"chromefeature"

"ekstensi"

VoiceGender

Chrome 54+ Tidak digunakan lagi sejak Chrome 70

Gender tidak digunakan lagi dan akan diabaikan.

Enum

"male"

"perempuan"

Metode

updateLanguage()

Chrome 132+
chrome.ttsEngine.updateLanguage(
  status: LanguageStatus,
)
: void

Dipanggil oleh mesin saat penginstalan bahasa dicoba, dan saat bahasa di-uninstal. Juga dipanggil sebagai respons terhadap permintaan status dari klien. Saat suara diinstal atau di-uninstal, mesin juga harus memanggil ttsEngine.updateVoices untuk mendaftarkan suara.

Parameter

updateVoices()

Chrome 66+
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)
: void

Dipanggil oleh mesin untuk memperbarui daftar suaranya. Daftar ini menggantikan semua suara yang dideklarasikan dalam manifes ekstensi ini.

Parameter

  • suara

    Array objek tts.TtsVoice yang merepresentasikan suara yang tersedia untuk sintesis ucapan.

Acara

onInstallLanguageRequest

Chrome 131+
chrome.ttsEngine.onInstallLanguageRequest.addListener(
  callback: function,
)

Diaktifkan saat klien TTS meminta untuk menginstal bahasa baru. Mesin harus mencoba mendownload dan menginstal bahasa, serta memanggil ttsEngine.updateLanguage dengan hasilnya. Jika berhasil, mesin juga harus memanggil ttsEngine.updateVoices untuk mendaftarkan suara yang baru tersedia.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    (requestor: TtsClient, lang: string) => void

onLanguageStatusRequest

Chrome 132+
chrome.ttsEngine.onLanguageStatusRequest.addListener(
  callback: function,
)

Diaktifkan saat klien TTS meminta status penginstalan bahasa.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    (requestor: TtsClient, lang: string) => void

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 berhenti. 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 melanjutkan pengucapan 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

    • sendTtsEvent

      fungsi

      Parameter sendTtsEvent terlihat seperti:

      (event: tts.TtsEvent) => void

      • event

        Peristiwa dari mesin text-to-speech yang menunjukkan status ucapan ini.

onSpeakWithAudioStream

Chrome 92+
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 karena 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

    • audioStreamOptions
    • sendTtsAudio

      fungsi

      Parameter sendTtsAudio terlihat seperti:

      (audioBufferParams: AudioBuffer) => void

      • audioBufferParams

        Parameter yang berisi buffer audio dan data terkait.

    • sendError

      fungsi

      Chrome 94+

      Parameter 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 onStop dan ucapan sudah dihentikan, ekstensi tidak boleh melakukan apa pun (tidak memunculkan error). Jika ucapan dalam status dijeda, status dijeda ini harus dibatalkan.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    () => void

onUninstallLanguageRequest

Chrome 132+
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
  callback: function,
)

Diaktifkan saat klien TTS menunjukkan bahwa bahasa tidak lagi diperlukan.

Parameter