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 และได้ลงทะเบียนการฟังสำหรับ onSpeak และ onStop หรือไม่ กล่าวคือ ไม่มีวิธีที่ส่วนขยายจะได้รับคำขออ่านออกเสียงและตัดสินใจแบบไดนามิกว่าจะจัดการกับคำขอดังกล่าวหรือไม่

ประเภท

AudioBuffer

Chrome 92 ขึ้นไป

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

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

  • audioBuffer

    ArrayBuffer

    บัฟเฟอร์เสียงจากเครื่องมืออ่านออกเสียงข้อความ โดยควรมีความยาวถึง audioStreamOptions.bufferSize และเข้ารหัสเป็นโมโนที่ audioStreamOptions.sampleRate และเป็น pcm เชิงเส้น, Float แบบมีเครื่องหมาย 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 เร็วกว่า 0.5 และเร็วกว่า 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

    • คำพูด

      string

    • ตัวเลือก
    • sendTtsEvent

      ฟังก์ชัน

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

      (event: tts.TtsEvent)=>void

      • เหตุการณ์

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

onSpeakWithAudioStream

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

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

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

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

    • คำพูด

      string

    • ตัวเลือก
    • 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