คำอธิบาย
ใช้ 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
ชื่อควรสื่อความหมายมากพอให้ระบุชื่อเสียงและเครื่องมือที่ใช้ ในกรณีที่ไม่เกิดขึ้นบ่อยนักที่ส่วนขยาย 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
พารามิเตอร์ที่มีบัฟเฟอร์เสียงและข้อมูลที่เกี่ยวข้อง
พร็อพเพอร์ตี้
-
audioBuffer
ArrayBuffer
บัฟเฟอร์เสียงจากเครื่องมืออ่านออกเสียงข้อความ โดยควรมีความยาวถึง audioStreamOptions.bufferSize และเข้ารหัสเป็นโมโนที่ audioStreamOptions.sampleRate และเป็น pcm เชิงเส้น, Float แบบมีเครื่องหมาย 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 เร็วกว่า 0.5 และเร็วกว่า 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
-
คำพูด
string
-
ตัวเลือก
-
sendTtsEvent
ฟังก์ชัน
พารามิเตอร์
sendTtsEvent
มีลักษณะดังนี้(event: tts.TtsEvent) => void
-
เหตุการณ์
เหตุการณ์จากเครื่องมืออ่านออกเสียงข้อความที่ระบุสถานะของคำพูดนี้
-
-
onSpeakWithAudioStream
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