chrome.ttsEngine

คำอธิบาย

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

สิทธิ์

ttsEngine

ภาพรวม

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

ไฟล์ Manifest

หากต้องการใช้เครื่องมือ 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 ชื่อควรสื่อความหมายมากพอที่จะระบุชื่อเสียงและเครื่องมือที่ใช้ ในกรณีที่ส่วนขยายสองตัวลงทะเบียนเสียงด้วยชื่อเดียวกัน ซึ่งมีโอกาสเกิดขึ้นน้อยมาก ลูกค้าสามารถระบุรหัสของส่วนขยายที่ควรทำการสังเคราะห์เสียงได้

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

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

เมื่อโหลดแล้ว ส่วนขยายจะแทนที่รายการเสียงที่ประกาศไว้ได้โดยเรียกใช้ chrome.ttsEngine.updateVoices (โปรดทราบว่าพารามิเตอร์ที่ใช้ในการเรียกใช้แบบเป็นโปรแกรมเพื่อเรียกใช้updateVoicesอยู่ในรูปแบบ Camel Case เช่น 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 หรือไม่ และมีการลงทะเบียน onSpeak และ onStop ไว้หรือไม่ กล่าวคือ ชิ้นงานส่วนขยายจะไม่สามารถรับคำขอคำพูดและตัดสินใจแบบไดนามิกว่าจะจัดการคำขอหรือไม่

ประเภท

AudioBuffer

Chrome 92 ขึ้นไป

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

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

  • audioBuffer

    ArrayBuffer

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

  • charIndex

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

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

  • isLastBuffer

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

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

AudioStreamOptions

Chrome 92 ขึ้นไป

มีรูปแบบสตรีมเสียงที่คาดว่าจะผลิตโดยเครื่องมือ

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

  • bufferSize

    ตัวเลข

    จํานวนแซมเปิลภายในบัฟเฟอร์เสียง

  • sampleRate

    ตัวเลข

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

LanguageInstallStatus

รอดำเนินการ

สถานะการติดตั้งเสียง

ค่าแจกแจง

"notInstalled"

"การติดตั้ง"

"installed"

"failed"

LanguageStatus

รอดำเนินการ

สถานะการติดตั้งภาษา

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

  • ข้อผิดพลาด

    สตริง ไม่บังคับ

    รายละเอียดเกี่ยวกับการติดตั้งที่ไม่สำเร็จ ตัวเลือกที่ระบบจะป้อนข้อมูลให้หากติดตั้งภาษาไม่สำเร็จ

  • installStatus

    สถานะการติดตั้ง

  • lang

    สตริง

    สตริงภาษาในรูปแบบรหัสภาษา-รหัสภูมิภาค โดยอาจไม่ใส่รหัสภูมิภาคก็ได้ เช่น en, en-AU, zh-CH

LanguageUninstallOptions

รอดำเนินการ

ตัวเลือกในการถอนการติดตั้งภาษาหนึ่งๆ

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

  • uninstallImmediately

    บูลีน

    เป็นจริงหากไคลเอ็นต์ TTS ต้องการให้ถอนการติดตั้งภาษาทันที เครื่องมืออาจเลือกว่าจะถอนการติดตั้งภาษาหรือไม่และเมื่อใด โดยอิงตามพารามิเตอร์นี้และข้อมูลผู้ขอ หากเป็น "เท็จ" ระบบอาจใช้เกณฑ์อื่นๆ เช่น การใช้งานล่าสุด เพื่อพิจารณาว่าควรถอนการติดตั้งเมื่อใด

SpeakOptions

Chrome 92 ขึ้นไป

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

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

  • gender

    VoiceGender ไม่บังคับ

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

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

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

  • lang

    สตริง ไม่บังคับ

    ภาษาที่จะใช้สังเคราะห์ในรูปแบบ 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

    สตริง ไม่บังคับ

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

  • ระดับเสียง

    ตัวเลข ไม่บังคับ

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

TtsClient

Chrome 131 ขึ้นไป

ตัวระบุสถานะการขอของลูกค้า

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

  • id

    สตริง

    ไคลเอ็นต์ส่งคําขอการจัดการภาษา สําหรับส่วนขยาย จะเป็นรหัสส่วนขยายที่ไม่ซ้ำกัน สำหรับฟีเจอร์ของ Chrome ชื่อนี้จะเป็นชื่อฟีเจอร์ที่ผู้ใช้อ่านได้

  • ประเภทของผู้ขอ

TtsClientSource

Chrome 131 ขึ้นไป

ประเภทผู้ขอ

ค่าแจกแจง

"chromefeature"

"extension"

VoiceGender

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

ระบบจะไม่สนใจเพศ

ค่าแจกแจง

"male"

"หญิง"

เมธอด

updateLanguage()

รอดำเนินการ
chrome.ttsEngine.updateLanguage(
  status: LanguageStatus,
)

จะเรียกโดยเครื่องมือเมื่อมีการพยายามติดตั้งภาษา และเมื่อถอนการติดตั้งภาษา เรียกอีกอย่างว่าเพื่อตอบสนองคำขอสถานะจากไคลเอ็นต์ เมื่อติดตั้งหรือถอนการติดตั้งเสียงแล้ว เครื่องมือควรเรียกใช้ ttsEngine.updateVoices เพื่อลงทะเบียนเสียง

พารามิเตอร์

  • สถานะ

    สถานะการติดตั้งภาษา

updateVoices()

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

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

พารามิเตอร์

  • เสียง

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

กิจกรรม

onInstallLanguageRequest

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

เรียกใช้เมื่อไคลเอ็นต์ TTS ขอติดตั้งภาษาใหม่ เครื่องมือควรพยายามดาวน์โหลดและติดตั้งภาษา และเรียก ttsEngine.updateLanguage กับผลลัพธ์ หากดำเนินการสำเร็จ เครื่องมือควรเรียก ttsEngine.updateVoices เพื่อลงทะเบียนเสียงที่พร้อมใช้งานใหม่ด้วย

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

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

    • ผู้ขอ
    • lang

      สตริง

onLanguageStatusRequest

รอดำเนินการ
chrome.ttsEngine.onLanguageStatusRequest.addListener(
  callback: function,
)

เริ่มทำงานเมื่อไคลเอ็นต์ TTS ขอสถานะการติดตั้งของภาษา

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

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

    • ผู้ขอ
    • lang

      สตริง

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 ของส่วนขยายนี้เป็นเสียงแรกที่ตรงกับออบเจ็กต์ options

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

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

    • การพูด

      สตริง

    • ตัวเลือก
    • sendTtsEvent

      ฟังก์ชัน

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

      (event: tts.TtsEvent) => void

      • เหตุการณ์

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

onSpeakWithAudioStream

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

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

พารามิเตอร์

  • 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

        สตริง ไม่บังคับ

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

onStop

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

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

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

    () => void

onUninstallLanguageRequest

รอดำเนินการ
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
  callback: function,
)

เรียกใช้เมื่อไคลเอ็นต์ TTS ระบุว่าไม่จําเป็นต้องใช้ภาษาอีกต่อไป

พารามิเตอร์