คำอธิบาย
ใช้ 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
อยู่ในรูปแบบ 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
สมมติว่าคุณได้ลงทะเบียนโปรแกรมรับฟังเหตุการณ์เสียงตามที่อธิบายไว้ด้านล่าง
จัดการเหตุการณ์การพูด
หากต้องการสร้างเสียงตามคำขอของลูกค้า ส่วนขยายของคุณต้องลงทะเบียนผู้ฟังสำหรับทั้ง 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
พารามิเตอร์ที่มีบัฟเฟอร์เสียงและข้อมูลที่เชื่อมโยง
พร็อพเพอร์ตี้
-
audioBuffer
ArrayBuffer
บัฟเฟอร์เสียงจากเครื่องมืออ่านออกเสียงข้อความ โดยควรมีความยาวเท่ากับ audioStreamOptions.bufferSize และเข้ารหัสเป็นโมโนที่ audioStreamOptions.sampleRate และเป็นแบบ PCM แบบเชิงเส้น 32 บิตที่มีค่าของทศนิยม เช่น ประเภท Float32Array ใน JavaScript
-
charIndex
ตัวเลข ไม่บังคับ
ดัชนีอักขระที่เชื่อมโยงกับบัฟเฟอร์เสียงนี้
-
isLastBuffer
บูลีน ไม่บังคับ
จริงหากบัฟเฟอร์เสียงนี้เป็นบัฟเฟอร์สุดท้ายของข้อความที่กำลังอ่าน
AudioStreamOptions
มีรูปแบบสตรีมเสียงที่คาดว่าจะผลิตโดยเครื่องมือ
พร็อพเพอร์ตี้
-
bufferSize
ตัวเลข
จํานวนแซมเปิลภายในบัฟเฟอร์เสียง
-
sampleRate
ตัวเลข
อัตราการสุ่มตัวอย่างที่คาดไว้ในบัฟเฟอร์เสียง
LanguageInstallStatus
สถานะการติดตั้งเสียง
ค่าแจกแจง
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
สถานะการติดตั้งภาษา
พร็อพเพอร์ตี้
-
ข้อผิดพลาด
สตริง ไม่บังคับ
รายละเอียดเกี่ยวกับการติดตั้งที่ไม่สำเร็จ ตัวเลือกที่ระบบจะป้อนข้อมูลให้หากติดตั้งภาษาไม่สำเร็จ
-
installStatus
สถานะการติดตั้ง
-
lang
สตริง
สตริงภาษาในรูปแบบรหัสภาษา-รหัสภูมิภาค โดยอาจไม่ใส่รหัสภูมิภาคก็ได้ เช่น en, en-AU, zh-CH
LanguageUninstallOptions
ตัวเลือกในการถอนการติดตั้งภาษาหนึ่งๆ
พร็อพเพอร์ตี้
-
uninstallImmediately
บูลีน
จริงหากไคลเอ็นต์ TTS ต้องการถอนการติดตั้งภาษาทันที เครื่องมืออาจเลือกว่าจะถอนการติดตั้งภาษาหรือไม่และเมื่อใด โดยอิงตามพารามิเตอร์นี้และข้อมูลผู้ขอ หากเป็นเท็จ ระบบอาจใช้เกณฑ์อื่นๆ เช่น การใช้งานล่าสุด เพื่อกำหนดเวลาถอนการติดตั้ง
SpeakOptions
ตัวเลือกที่ระบุให้กับเมธอด 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
ตัวระบุสถานะการขอของลูกค้า
พร็อพเพอร์ตี้
-
id
สตริง
ไคลเอ็นต์ส่งคําขอการจัดการภาษา สําหรับส่วนขยาย จะเป็นรหัสส่วนขยายที่ไม่ซ้ำกัน สำหรับฟีเจอร์ของ Chrome ค่านี้คือชื่อที่มนุษย์อ่านได้ของฟีเจอร์
-
source
ประเภทผู้ขอ
TtsClientSource
ประเภทผู้ขอ
ค่าแจกแจง
"chromefeature"
"extension"
VoiceGender
ระบบจะไม่สนใจเพศ
ค่าแจกแจง
"male"
"female"
เมธอด
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
)
เรียกโดยเครื่องมือเมื่อพยายามติดตั้งภาษาและเมื่อถอนการติดตั้งภาษา หรือที่เรียกว่าการตอบสนองต่อคำขอสถานะจากลูกค้า เมื่อติดตั้งหรือถอนการติดตั้งเสียง เครื่องมือควรเรียก ttsEngine.updateVoices เพื่อลงทะเบียนเสียงด้วย
พารามิเตอร์
-
สถานะ
สถานะการติดตั้งภาษา
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
เรียกใช้โดยเครื่องมือเพื่ออัปเดตรายการเสียง รายการนี้จะลบล้างเสียงที่ประกาศไว้ในไฟล์ Manifest ของส่วนขยายนี้
พารามิเตอร์
-
เสียง
TtsVoice[]
อาร์เรย์ของออบเจ็กต์
tts.TtsVoice
ที่แสดงเสียงที่ใช้ได้สำหรับการสังเคราะห์เสียง
กิจกรรม
onInstallLanguageRequest
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.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
เรียกใช้เมื่อผู้ใช้เรียกใช้ tts.speak() และเสียงใดเสียงหนึ่งจากไฟล์ Manifest ของส่วนขยายนี้เป็นเสียงแรกที่ตรงกับออบเจ็กต์ options แตกต่างจาก 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 ระบุว่าไม่จําเป็นต้องใช้ภาษาอีกต่อไป
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
จะมีลักษณะดังนี้(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
ผู้ขอ
-
lang
สตริง
-
uninstallOptions
-