chrome.ttsEngine

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. Gunakan event.charIndex untuk menentukan ucapan saat ini posisi Anda.
  • 'sentence': Batas kalimat tercapai. Gunakan event.charIndex untuk menentukan posisi ucapan.
  • 'marker': Penanda SSML tercapai. Gunakan event.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 di event.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

Chrome 92 dan yang lebih baru

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

Chrome 92 dan yang lebih baru

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

Chrome 92 dan yang lebih baru

Opsi yang ditentukan untuk metode tts.speak().

Properti

  • gender

    VoiceGender opsional

    Tidak digunakan lagi sejak Chrome 92

    Gender 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

Chrome 54 dan yang lebih baru Tidak digunakan lagi sejak Chrome 70

Gender tidak digunakan lagi dan akan diabaikan.

Enum

"laki-laki"

"perempuan"

Metode

updateVoices()

Chrome 66 dan yang lebih baru
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

    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

    • 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 92 dan yang lebih baru
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

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

      Parameter 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