คำอธิบาย
ใช้ 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
พารามิเตอร์ที่มีบัฟเฟอร์เสียงและข้อมูลที่เกี่ยวข้อง
พร็อพเพอร์ตี้
-
audioBuffer
ArrayBuffer
บัฟเฟอร์เสียงจากเครื่องมืออ่านออกเสียงข้อความ ควรมีความยาวเท่ากับ audioStreamOptions.bufferSize และเข้ารหัสเป็นโมโนที่ audioStreamOptions.sampleRate และเป็น Linear pcm การลอยตัวแบบมีเครื่องหมาย 32 บิต เช่น ประเภท Float32Array ใน JavaScript
-
charIndex
หมายเลข ไม่บังคับ
ดัชนีอักขระที่เชื่อมโยงกับบัฟเฟอร์เสียงนี้
-
isLastBuffer
บูลีน ไม่บังคับ
เป็นจริงหากบัฟเฟอร์เสียงนี้เป็นบัฟเฟอร์สุดท้ายสำหรับข้อความที่มีการพูด
AudioStreamOptions
มีรูปแบบสตรีมเสียงที่คาดว่าจะสร้างขึ้นโดยเครื่องมือ
พร็อพเพอร์ตี้
-
bufferSize
ตัวเลข
จำนวนตัวอย่างในบัฟเฟอร์เสียง
-
sampleRate
ตัวเลข
อัตราการสุ่มตัวอย่างที่คาดหวังในบัฟเฟอร์เสียง
SpeakOptions
ตัวเลือกที่ระบุในเมธอด 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
เลิกใช้งานเพศแล้วและระบบจะไม่สนใจ
ค่าแจกแจง
"ชาย"
"หญิง"
เมธอด
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
เครื่องมือค้นหาเรียกใช้ให้อัปเดตรายการเสียง รายการนี้จะลบล้างเสียงที่ประกาศในไฟล์ Manifest ของส่วนขยายนี้
พารามิเตอร์
-
เสียง
TtsVoice[]
อาร์เรย์ของวัตถุ
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.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