chrome.ttsEngine

คำอธิบาย

ใช้ chrome.ttsEngine API เพื่อใช้เครื่องมือการอ่านออกเสียงข้อความ(TTS) โดยใช้ส่วนขยาย หากส่วนขยายลงทะเบียนโดยใช้ API นี้ ส่วนขยายจะได้รับเหตุการณ์ที่มีเสียงพูดและพารามิเตอร์อื่นๆ เมื่อส่วนขยายหรือแอป Chrome ใช้ tts API เพื่อสร้างเสียงพูด จากนั้นส่วนขยายจะสามารถใช้เทคโนโลยีเว็บใดๆ ที่มีอยู่เพื่อสังเคราะห์และส่งออกเสียงพูด จากนั้นส่งเหตุการณ์กลับไปยังฟังก์ชันการโทรเพื่อรายงานสถานะ

สิทธิ์

ttsEngine

แนวคิดและการใช้งาน

ส่วนขยายสามารถลงทะเบียนตัวเองเป็นเครื่องมืออ่านออกเสียงได้ วิธีนี้จะช่วยสกัดกั้นการโทรบางส่วนหรือทั้งหมด ให้กับฟังก์ชัน เช่น tts.speak() และ tts.stop() และระบุการติดตั้งใช้งานเพิ่มเติม ส่วนขยายมีอิสระในการใช้เทคโนโลยีเว็บใดๆ ที่มีเพื่อนำเสนอเสียงพูดรวมถึงการสตรีมเสียง จากเซิร์ฟเวอร์ ซึ่งก็คือเสียง HTML5 ส่วนขยายอาจทำอย่างอื่น พร้อมคำพูด เช่น แสดงคำบรรยายในป๊อปอัป หรือส่งเป็นข้อความบันทึกถึง เซิร์ฟเวอร์ระยะไกล

ในการใช้งานเครื่องมือ TTS ส่วนขยายต้องประกาศ "ttsEngine" แล้วประกาศทั้งหมด เสียงที่ใส่ในไฟล์ Manifest ของส่วนขยาย ดังนี้

{
  "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
  }
}

ส่วนขยายสามารถระบุจำนวนเสียงใดๆ ก็ได้

ต้องระบุพารามิเตอร์ voice_name ชื่อควรสื่อความหมายมากพอจนระบุถึง ของเสียงและเครื่องมือที่ใช้ ในกรณีที่ไม่น่าจะเกิดขึ้นที่ส่วนขยาย 2 รายการจะลงทะเบียนเสียง ด้วยชื่อเดียวกัน ไคลเอ็นต์สามารถระบุรหัสของส่วนขยายที่ควรทำการสังเคราะห์

พารามิเตอร์ lang เป็นพารามิเตอร์ที่ไม่บังคับ แต่ขอแนะนำอย่างยิ่ง โดยเสียงสามารถสังเคราะห์เสียงได้เกือบทุกครั้ง โดยใช้ภาษาเดียว เมื่อเครื่องมือสนับสนุนมากกว่า 1 ภาษา ก็สามารถ ลงทะเบียนเสียงแยกสำหรับแต่ละภาษา ภายใต้สถานการณ์ซึ่งพบได้ไม่บ่อยนัก ที่เสียงเดียวกันอาจ จัดการภาษาได้มากกว่า 1 ภาษา วิธีที่ง่ายที่สุดคือระบุเสียง 2 เสียงแยกกันและจัดการโดยใช้ ใช้ตรรกะเดียวกันเป็นการภายใน แต่ถ้าต้องการสร้างเสียงพูดที่จะจัดการคำพูดใน ภาษา ให้นำพารามิเตอร์ lang ออกจากไฟล์ Manifest ของส่วนขยาย

สุดท้าย ต้องมีพารามิเตอร์ event_types หากเครื่องมือส่งเหตุการณ์เพื่ออัปเดตไคลเอ็นต์ได้ เกี่ยวกับความคืบหน้าของการสังเคราะห์เสียง อย่างน้อยที่สุด ควรรองรับประเภทเหตุการณ์ 'end' เพื่อระบุว่า ขอแนะนำให้ใช้เมื่อเสียงพูดเสร็จสิ้น มิเช่นนั้น Chrome จะไม่สามารถกำหนดเวลาการพูดที่อยู่ในคิวได้

เมื่อโหลดแล้ว ส่วนขยายสามารถแทนที่รายการเสียงที่ประกาศได้ด้วยการเรียก chrome.ttsEngine.updateVoices (โปรดทราบว่าพารามิเตอร์ที่ใช้ในการเรียกแบบเป็นโปรแกรมไปยัง updateVoicesอยู่ในกล่องอูฐ เช่น voiceName ซึ่งแตกต่างจากไฟล์ Manifest ที่ใช้ voice_name)

ประเภทเหตุการณ์ที่คุณอาจส่งได้จะสอดคล้องกับประเภทเหตุการณ์ที่เมธอด speak() ได้รับ:

  • 'start': เครื่องยนต์เริ่มพูดคำพูดแล้ว
  • 'word': ถึงขีดจำกัดของคำแล้ว ใช้ event.charIndex เพื่อกำหนดเสียงพูดปัจจุบัน ตำแหน่ง
  • 'sentence': ถึงขีดจำกัดของประโยคแล้ว ใช้ event.charIndex เพื่อระบุเหตุการณ์ปัจจุบัน ในการพูด
  • 'marker': ถึงเครื่องหมาย SSML ใช้ event.charIndex เพื่อกำหนดเสียงพูดปัจจุบัน ตำแหน่ง
  • 'end': เครื่องพูดจบแล้ว
  • 'error': เกิดข้อผิดพลาดเฉพาะเครื่องมือทำให้ไม่สามารถพูดคำพูดนี้ ส่งบอลมากขึ้น ข้อมูลใน event.errorMessage

เครื่องมืออ่านออกเสียงไม่ได้ส่งเหตุการณ์ 'interrupted' และ 'cancelled' สร้างขึ้นได้ โดยอัตโนมัติจาก Chrome

ไคลเอ็นต์การอ่านออกเสียงข้อความจะรับข้อมูลเสียงจากไฟล์ Manifest ของส่วนขยายได้โดยการเรียกใช้ tts.getVoices สมมติว่าคุณลงทะเบียน Listener กิจกรรมคำพูดตามที่อธิบายด้านล่าง

จัดการเหตุการณ์การพูด

เพื่อสร้างเสียงพูดตามคำขอของลูกค้า ส่วนขยายของคุณต้องลงทะเบียน Listener สำหรับทั้ง onSpeak และ onStop ดังนี้

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);

การตัดสินใจว่าจะส่งคำขอคำพูดใดๆ ไปยังส่วนขยายหรือไม่นั้นขึ้นอยู่กับ ส่วนขยายสนับสนุนพารามิเตอร์เสียงที่ระบุในไฟล์ Manifest และได้ลงทะเบียน Listener ของ onSpeak และ onStop กล่าวอีกนัยหนึ่งคือ ไม่มีวิธีที่ส่วนขยายจะได้รับ และตัดสินใจแบบไดนามิกว่าจะจัดการหรือไม่

ประเภท

AudioBuffer

Chrome 92 ขึ้นไป

พารามิเตอร์ที่มีบัฟเฟอร์เสียงและข้อมูลที่เกี่ยวข้อง

พร็อพเพอร์ตี้

  • audioBuffer

    ArrayBuffer

    บัฟเฟอร์เสียงจากเครื่องมืออ่านออกเสียงข้อความ ควรมีความยาวเท่ากับ audioStreamOptions.bufferSize และเข้ารหัสเป็นโมโนที่ audioStreamOptions.sampleRate และเป็น Linear pcm การลอยตัวแบบมีเครื่องหมาย 32 บิต เช่น ประเภท Float32Array ใน JavaScript

  • charIndex

    หมายเลข ไม่บังคับ

    ดัชนีอักขระที่เชื่อมโยงกับบัฟเฟอร์เสียงนี้

  • isLastBuffer

    บูลีน ไม่บังคับ

    เป็นจริงหากบัฟเฟอร์เสียงนี้เป็นบัฟเฟอร์สุดท้ายสำหรับข้อความที่มีการพูด

AudioStreamOptions

Chrome 92 ขึ้นไป

มีรูปแบบสตรีมเสียงที่คาดว่าจะสร้างขึ้นโดยเครื่องมือ

พร็อพเพอร์ตี้

  • bufferSize

    ตัวเลข

    จำนวนตัวอย่างในบัฟเฟอร์เสียง

  • sampleRate

    ตัวเลข

    อัตราการสุ่มตัวอย่างที่คาดหวังในบัฟเฟอร์เสียง

SpeakOptions

Chrome 92 ขึ้นไป

ตัวเลือกที่ระบุในเมธอด tts.speak()

พร็อพเพอร์ตี้

  • gender

    VoiceGender ไม่บังคับ

    เลิกใช้งานตั้งแต่ Chrome 92

    เลิกใช้งานเพศแล้วและระบบจะไม่สนใจ

    เพศของเสียงสำหรับเสียงพูดสังเคราะห์

  • lang

    string ไม่บังคับ

    ภาษาที่จะใช้ในการสังเคราะห์ในรูปแบบ language-region ตัวอย่างเช่น "en", "en-US", "en-GB", "zh-CN"

  • พิช

    หมายเลข ไม่บังคับ

    ระดับเสียงสูงต่ำระหว่าง 0 ถึง 2 โดย 0 คือต่ำสุดและ 2 คือสูงสุด 1.0 จะสอดคล้องกับระดับเสียงเริ่มต้นของเสียงนี้

  • อัตรา

    หมายเลข ไม่บังคับ

    อัตราการพูดที่สัมพันธ์กับอัตราเริ่มต้นสำหรับเสียงนี้ 1.0 คืออัตราเริ่มต้น ซึ่งโดยปกติคือประมาณ 180-220 คำต่อนาที 2.0 คือเร็ว 2 เท่าและ 0.5 เร็วขึ้นครึ่งหนึ่ง เราจึงรับประกันค่านี้ให้อยู่ระหว่าง 0.1 ถึง 10.0 (รวมค่าแรกและค่าสุดท้าย) หากเสียงไม่รองรับอัตราเต็มขนาดนี้ ไม่ต้องแสดงข้อผิดพลาด แต่ให้ตัดอัตราเป็นช่วงที่เสียงรองรับแทน

  • voiceName

    string ไม่บังคับ

    ชื่อของเสียงที่จะใช้สำหรับการสังเคราะห์

  • ระดับเสียง

    หมายเลข ไม่บังคับ

    ระดับเสียงระหว่าง 0 ถึง 1 โดย 0 คือระดับเสียงต่ำสุด และ 1 คือระดับเสียงสูงสุด โดยมีค่าเริ่มต้นเป็น 1.0

VoiceGender

Chrome 54 ขึ้นไป เลิกใช้งานตั้งแต่ Chrome 70

เลิกใช้งานเพศแล้วและระบบจะไม่สนใจ

ค่าแจกแจง

"ชาย"

"หญิง"

เมธอด

updateVoices()

Chrome 66 ขึ้นไป
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

เครื่องมือค้นหาเรียกใช้ให้อัปเดตรายการเสียง รายการนี้จะลบล้างเสียงที่ประกาศในไฟล์ Manifest ของส่วนขยายนี้

พารามิเตอร์

  • เสียง

    อาร์เรย์ของวัตถุ tts.TtsVoice ที่แสดงถึงเสียงที่ใช้ได้สำหรับการสังเคราะห์เสียง

กิจกรรม

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

ไม่บังคับ: หากเครื่องมือสนับสนุนเหตุการณ์หยุดชั่วคราว ควรจะหยุดเสียงพูดปัจจุบันที่พูดอยู่ไว้ชั่วคราว หากมี จนกว่าจะได้รับเหตุการณ์กลับมาทำงานอีกครั้งหรือเหตุการณ์หยุด โปรดทราบว่าเหตุการณ์หยุดควรล้างสถานะหยุดชั่วคราวด้วย

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

ไม่บังคับ: หากเครื่องมือรองรับเหตุการณ์หยุดชั่วคราว เครื่องมือดังกล่าวควรรองรับเหตุการณ์การกลับมาทำงานอีกครั้งด้วย เพื่อพูดคำพูดปัจจุบันต่อไป หากมี โปรดทราบว่าเหตุการณ์หยุดควรล้างสถานะหยุดชั่วคราวด้วย

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

มีการเรียกเมื่อผู้ใช้เรียก tts.speak() และเสียงหนึ่งจากไฟล์ Manifest ของส่วนขยายนี้เป็นเสียงแรกที่ตรงกับออบเจ็กต์ตัวเลือก

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    (utterance: string, options: SpeakOptions, sendTtsEvent: function) => void

    • การพูด

      สตริง

    • ตัวเลือก
    • sendTtsEvent

      ฟังก์ชัน

      พารามิเตอร์ sendTtsEvent มีลักษณะดังนี้

      (event: tts.TtsEvent) => void

      • event

        เหตุการณ์จากเครื่องมืออ่านออกเสียงข้อความที่ระบุสถานะของคำพูดนี้

onSpeakWithAudioStream

Chrome 92 ขึ้นไป
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

มีการเรียกเมื่อผู้ใช้เรียก tts.speak() และเสียงหนึ่งจากไฟล์ Manifest ของส่วนขยายนี้เป็นเสียงแรกที่ตรงกับออบเจ็กต์ตัวเลือก Chrome ให้บริการเล่นเสียงและจัดการการส่งกิจกรรม tts แตกต่างจาก ttsEngine.onSpeak

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    (utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void

    • การพูด

      สตริง

    • ตัวเลือก
    • audioStreamOptions
    • sendTtsAudio

      ฟังก์ชัน

      พารามิเตอร์ sendTtsAudio มีลักษณะดังนี้

      (audioBufferParams: AudioBuffer) => void

      • audioBufferParams

        พารามิเตอร์ที่มีบัฟเฟอร์เสียงและข้อมูลที่เกี่ยวข้อง

    • sendError

      ฟังก์ชัน

      Chrome 94 ขึ้นไป

      พารามิเตอร์ sendError มีลักษณะดังนี้

      (errorMessage?: string) => void

      • errorMessage

        string ไม่บังคับ

        สตริงที่อธิบายข้อผิดพลาด

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

เริ่มทำงานเมื่อมีการโทรหา tts.stop และส่วนขยายนี้อาจอยู่ในระหว่างพูด หากส่วนขยายได้รับคำสั่งจาก onStop และเสียงพูดหยุดลงแล้ว ก็ไม่ต้องดำเนินการใดๆ (ไม่ทำให้เกิดข้อผิดพลาด) หากเสียงพูดอยู่ในสถานะหยุดชั่วคราว ระบบจะยกเลิกสถานะหยุดชั่วคราว

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void