คำอธิบาย
ใช้ chrome.tts
API เพื่อเล่นการอ่านออกเสียงข้อความ (TTS) แบบสังเคราะห์ โปรดดู ttsEngine
API ที่เกี่ยวข้อง ซึ่งช่วยให้ส่วนขยายใช้งานเครื่องมืออ่านออกเสียงได้
Chrome มีความสามารถนี้บน Windows (ที่ใช้ SAPI 5), Mac OS X และ ChromeOS โดยใช้ความสามารถในการสังเคราะห์เสียงพูดที่ระบบปฏิบัติการมีให้ ในทุกแพลตฟอร์ม ผู้ใช้จะติดตั้งส่วนขยายที่บันทึกตัวเองเป็นเครื่องมือช่วยพูดทางเลือกได้
สิทธิ์
tts
แนวคิดและการใช้งาน
สร้างเสียงพูด
โทรไปที่ speak()
จากส่วนขยายเพื่อพูด เช่น
chrome.tts.speak('Hello, world.');
หากต้องการหยุดพูดทันที เพียงโทรไปที่ stop()
:
chrome.tts.stop();
คุณระบุตัวเลือกที่ควบคุมพร็อพเพอร์ตี้ต่างๆ ของเสียงพูดได้ เช่น อัตรา ระดับเสียงสูงต่ำ และอื่นๆ เช่น
chrome.tts.speak('Hello, world.', {'rate': 2.0});
นอกจากนี้ ควรระบุภาษาเพื่อให้โปรแกรมสังเคราะห์ที่รองรับภาษานั้น (และภาษาถิ่นของภูมิภาค หากมี) เป็นความคิดที่ดี
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
โดยค่าเริ่มต้น การเรียก speak()
แต่ละครั้งจะขัดจังหวะการพูดที่กำลังพูดอยู่และพูดทันที หากต้องการตรวจสอบว่าการโทรจะรบกวนสิ่งใดหรือไม่ คุณสามารถโทรหา isSpeaking()
นอกจากนี้ คุณยังสามารถใช้ตัวเลือก enqueue
เพื่อเพิ่มการเปล่งเสียงนี้ไปยังคิวของคำพูดที่จะพูดเมื่อการเปล่งเสียงปัจจุบันสิ้นสุดลง
chrome.tts.speak('Speak this first.');
chrome.tts.speak(
'Speak this next, when the first sentence is done.', {'enqueue': true});
ดูคำอธิบายตัวเลือกทั้งหมดโดยละเอียดได้ในส่วน tts.speak()
เครื่องมืออ่านออกเสียง
บางรุ่นอาจไม่รองรับบางตัวเลือก
เพื่อตรวจหาข้อผิดพลาดและตรวจสอบว่าคุณเรียกใช้ speak()
อย่างถูกต้อง ให้ส่งฟังก์ชันเรียกกลับที่ไม่ต้องใช้อาร์กิวเมนต์ ในโค้ดเรียกกลับ ให้ตรวจสอบ runtime.lastError
เพื่อดูว่ามีข้อผิดพลาดใดๆ หรือไม่
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
โค้ดเรียกกลับจะกลับมาทันที ก่อนที่เครื่องมือจะเริ่มสร้างเสียงพูด วัตถุประสงค์ของการเรียกกลับคือการแจ้งเตือนคุณเกี่ยวกับข้อผิดพลาดทางไวยากรณ์ในการใช้ TTS API ไม่ใช่เพื่อตรวจจับข้อผิดพลาดที่เป็นไปได้ทั้งหมดที่อาจเกิดขึ้นในกระบวนการสังเคราะห์และเอาต์พุตเสียงพูด คุณต้องใช้ Listener เหตุการณ์ซึ่งอธิบายในส่วนถัดไปเพื่อให้ตรวจจับข้อผิดพลาดเหล่านี้ได้เช่นกัน
ฟังเหตุการณ์
หากต้องการข้อมูลสถานะของเสียงสังเคราะห์แบบเรียลไทม์เพิ่มเติม ให้ส่ง Listener เหตุการณ์ในตัวเลือกไปยัง speak()
ดังนี้
chrome.tts.speak(
utterance,
{
onEvent: function(event) {
console.log('Event ' + event.type + ' at position ' + event.charIndex);
if (event.type == 'error') {
console.log('Error: ' + event.errorMessage);
}
}
},
callback
);
แต่ละเหตุการณ์จะมีประเภทเหตุการณ์ ดัชนีอักขระของคำพูดปัจจุบันที่สัมพันธ์กับเสียงพูด และสำหรับเหตุการณ์ข้อผิดพลาด จะมีข้อความแสดงข้อผิดพลาดที่ไม่บังคับสำหรับเหตุการณ์ข้อผิดพลาด ประเภทเหตุการณ์มีดังนี้
'start'
: เครื่องมือเริ่มพูดเสียงพูด'word'
: ถึงขอบเขตของคำแล้ว ใช้event.charIndex
เพื่อกำหนดตำแหน่งเสียงพูดปัจจุบัน'sentence'
: ถึงขอบเขตประโยคแล้ว ใช้event.charIndex
เพื่อระบุตำแหน่ง ของเสียงพูดปัจจุบัน'marker'
: ถึงเครื่องหมาย SSML แล้ว ใช้event.charIndex
เพื่อกำหนดตำแหน่งเสียงพูดปัจจุบัน'end'
: เครื่องยนต์พูดเสียงพูดจบแล้ว'interrupted'
: คำพูดนี้ถูกขัดจังหวะโดยการเรียกspeak()
หรือstop()
อีกสายหนึ่ง จึงดำเนินการไม่เสร็จ'cancelled'
: คำพูดนี้ได้รับการจัดคิวอยู่ในคิว แต่หลังจากนั้นมีสายที่โทรหาspeak()
หรือstop()
อีกครั้งและไม่เคยเริ่มพูดเลย'error'
: เกิดข้อผิดพลาดเฉพาะเครื่องมือ และไม่สามารถพูดข้อความนี้ได้ ดูรายละเอียดได้ที่event.errorMessage
กิจกรรม 4 ประเภท ได้แก่ 'end'
, 'interrupted'
, 'cancelled'
และ 'error'
จัดเป็นแบบสุดท้าย หลังจากได้รับหนึ่งในเหตุการณ์เหล่านั้นแล้ว คำพูดนี้จะไม่พูดอีกและจะไม่ได้รับเหตุการณ์ใหม่จากข้อความนี้อีก
เสียงบางเสียงอาจไม่รองรับเหตุการณ์บางประเภท และบางเสียงอาจไม่ส่งเหตุการณ์ใดๆ เลย หากคุณไม่ต้องการใช้เสียง นอกจากเสียงจะส่งเหตุการณ์บางอย่าง ให้ส่งเหตุการณ์ที่ต้องการในสมาชิก requiredEventTypes
ของออบเจ็กต์ตัวเลือก หรือใช้ getVoices()
เพื่อเลือกเสียงที่ตรงกับข้อกำหนดของคุณ โดยทั้ง 2 อย่างจะมีคำอธิบายดังต่อไปนี้
มาร์กอัป SSML
เสียงพูดที่ใช้ใน API นี้อาจรวมถึงมาร์กอัปที่ใช้ Speech Synthesis Markup Language
(SSML) หากคุณใช้ SSML อาร์กิวเมนต์แรกไปยัง speak()
ควรเป็นเอกสาร SSML ที่สมบูรณ์ที่มีส่วนหัว XML และแท็ก <speak>
ระดับบนสุด ไม่ใช่ส่วนย่อยเอกสาร
เช่น
chrome.tts.speak(
'<?xml version="1.0"?>' +
'<speak>' +
' The <emphasis>second</emphasis> ' +
' word of this sentence was emphasized.' +
'</speak>'
);
เครื่องมืออ่านออกเสียงบางรายการอาจไม่รองรับแท็ก SSML บางรายการและบางรายการอาจไม่รองรับ SSML เลย แต่เครื่องมือค้นหาทั้งหมดจำเป็นต้องละเว้น SSML ใดๆ ที่ไม่รองรับและยังคงพูดข้อความที่สำคัญอยู่
เลือกเสียง
โดยค่าเริ่มต้น Chrome จะเลือกเสียงที่เหมาะสมที่สุดสำหรับคำพูดแต่ละคำที่คุณต้องการพูด โดยอิงตามภาษา ในระบบ Windows, Mac OS X และ ChromeOS ส่วนใหญ่ การสังเคราะห์เสียงที่มาจากระบบปฏิบัติการควรพูดข้อความใดก็ได้ในอย่างน้อย 1 ภาษา ผู้ใช้บางคนอาจมีเสียงที่หลากหลาย จากระบบปฏิบัติการและจากเครื่องมืออ่านออกเสียง ที่ส่วนขยายอื่นๆ ของ Chrome ใช้ ในกรณีเหล่านั้น คุณสามารถใช้โค้ดที่กำหนดเองเพื่อเลือกเสียงที่เหมาะสม หรือเพื่อนำเสนอรายการตัวเลือกแก่ผู้ใช้
หากต้องการดูรายการเสียงทั้งหมด ให้เรียก getVoices()
แล้วส่งผ่านฟังก์ชันที่รับอาร์เรย์ของ TtsVoice
ออบเจ็กต์เป็นอาร์กิวเมนต์ ดังนี้
chrome.tts.getVoices(
function(voices) {
for (var i = 0; i < voices.length; i++) {
console.log('Voice ' + i + ':');
console.log(' name: ' + voices[i].voiceName);
console.log(' lang: ' + voices[i].lang);
console.log(' extension id: ' + voices[i].extensionId);
console.log(' event types: ' + voices[i].eventTypes);
}
}
);
ประเภท
EventType
ค่าแจกแจง
TtsEvent
เหตุการณ์จากเครื่องมือ TTS เพื่อแจ้งสถานะของคำพูด
พร็อพเพอร์ตี้
-
charIndex
ตัวเลข ไม่บังคับ
ดัชนีของอักขระปัจจุบันในการพูด สำหรับเหตุการณ์เกี่ยวกับคำ เหตุการณ์จะเริ่มทำงานเมื่อสิ้นสุดคำหนึ่งคำ และก่อนเริ่มของคำถัดไป
charIndex
แสดงจุดในข้อความที่ส่วนต้นของคำถัดไปที่จะพูด -
errorMessage
string ไม่บังคับ
คำอธิบายข้อผิดพลาด หากประเภทเหตุการณ์คือ
error
-
length
ตัวเลข ไม่บังคับ
Chrome เวอร์ชัน 74 ขึ้นไปความยาวของส่วนถัดไปของคำพูด เช่น ในเหตุการณ์
word
นี่คือความยาวของคําที่จะพูดถัดไป ซึ่งจะตั้งค่าเป็น -1 หากไม่ได้ตั้งค่าไว้โดยเครื่องมืออ่านออกเสียง -
ประเภท
ประเภทเป็นได้
start
ทันทีที่เริ่มต้น,word
เมื่อถึงขอบเขตของคำ,sentence
เมื่อถึงขอบเขตของประโยค,marker
เมื่อถึงองค์ประกอบเครื่องหมาย SSML,end
เมื่อถึงจุดสิ้นสุดของเสียงพูด,interrupted
เมื่อคำพูดหยุดลงหรือถูกขัดจังหวะก่อนที่จะถึงจุดสิ้นสุด,cancelled
เมื่อนำออกจากคิวก่อนที่จะสังเคราะห์ หรือerror
เมื่อเกิดข้อผิดพลาดอื่นๆ เมื่อหยุดพูด เหตุการณ์pause
จะเริ่มทำงานหากมีการหยุดเสียงพูดใดคำหนึ่งไว้ชั่วคราวในระหว่างกลาง และresume
หากเสียงพูดกลับมาทำงานอีกครั้ง โปรดทราบว่าเหตุการณ์หยุดชั่วคราวและทำงานต่ออาจไม่เริ่มทำงานหากมีการหยุดพูดชั่วคราวระหว่างเสียงพูด
TtsOptions
ตัวเลือกเสียงพูดสำหรับเครื่องมือ TTS
พร็อพเพอร์ตี้
-
desiredEventTypes
string[] ไม่บังคับ
ประเภทเหตุการณ์ TTS ที่คุณสนใจฟัง หากไม่มี ระบบอาจส่งประเภทเหตุการณ์ทั้งหมด
-
ลำดับคิว
บูลีน ไม่บังคับ
หากเป็น "จริง" ให้จัดคิวคำพูดนี้หาก TTS อยู่ระหว่างดำเนินการแล้ว หากเป็น "เท็จ" (ค่าเริ่มต้น) จะขัดจังหวะเสียงพูดปัจจุบันและล้างคิวเสียงพูดก่อนพูดคำพูดใหม่นี้
-
extensionId
string ไม่บังคับ
รหัสส่วนขยายของเครื่องมือเสียงพูดที่จะใช้ หากทราบ
-
gender
VoiceGender ไม่บังคับ
เลิกใช้งานตั้งแต่ Chrome 77เพศเลิกใช้งานแล้วและจะไม่มีผล
เพศของเสียงสำหรับเสียงสังเคราะห์
-
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 โดยเด็ดขาด แต่เสียงจำนวนมากจะบังคับอัตราต่ำสุดและสูงสุดให้ต่ำลง เช่น บางเสียงอาจไม่ได้พูดเร็วกว่าปกติ 3 เท่า แม้ว่าคุณจะระบุค่าที่สูงกว่า 3.0 ก็ตาม
-
requiredEventTypes
string[] ไม่บังคับ
เหตุการณ์ TTS ประเภทที่เสียงต้องรองรับ
-
voiceName
string ไม่บังคับ
ชื่อเสียงที่จะใช้ในการสังเคราะห์ หากเว้นว่างไว้ ให้ใช้เสียงใดก็ได้ที่มี
-
ระดับเสียง
ตัวเลข ไม่บังคับ
แสดงระดับเสียงตั้งแต่ 0 ถึง 1 โดย 0 หมายถึงต่ำสุด และ 1 คือสูงสุด และมีค่าเริ่มต้นเป็น 1.0
-
onEvent
เป็นโมฆะ ไม่บังคับ
ฟังก์ชันนี้จะถูกเรียกพร้อมกับเหตุการณ์ที่เกิดขึ้นในกระบวนการพูด
ฟังก์ชัน
onEvent
มีลักษณะดังนี้(event: TtsEvent) => {...}
-
เหตุการณ์
กิจกรรมการอัปเดตจากเครื่องมืออ่านออกเสียงข้อความที่ระบุสถานะของคำพูดนี้
-
TtsVoice
คำอธิบายเสียงที่ใช้สำหรับการสังเคราะห์เสียงได้
พร็อพเพอร์ตี้
-
eventTypes
EventType[] ไม่บังคับ
เหตุการณ์การติดต่อกลับทั้งหมดที่เสียงนี้ส่งได้
-
extensionId
string ไม่บังคับ
รหัสของส่วนขยายที่ให้เสียงนี้
-
gender
VoiceGender ไม่บังคับ
เลิกใช้งานตั้งแต่ Chrome 70 เป็นต้นไปเพศเลิกใช้งานแล้วและจะไม่มีผล
เพศของเสียงนี้
-
lang
string ไม่บังคับ
ภาษาที่เสียงนี้รองรับในรูปแบบ language-region เช่น "en", "en-US", "en-GB", "zh-CN"
-
รีโมต
บูลีน ไม่บังคับ
หากเป็นจริง เครื่องมือสังเคราะห์เป็นทรัพยากรเครือข่ายระยะไกล ซึ่งอาจต้องใช้เวลาในการตอบสนองสูงขึ้นและมีค่าบริการแบนด์วิดท์
-
voiceName
string ไม่บังคับ
ชื่อของเสียง
VoiceGender
เพศเลิกใช้งานแล้วและจะไม่มีผล
ค่าแจกแจง
วิธีการ
getVoices()
chrome.tts.getVoices(
callback?: function,
)
รับอาร์เรย์ของเสียงทั้งหมดที่มีอยู่
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(voices: TtsVoice[]) => void
-
เสียง
TtsVoice[]
อาร์เรย์ของวัตถุ
tts.TtsVoice
ที่แสดงถึงเสียงที่ใช้สังเคราะห์เสียงได้
-
การคืนสินค้า
-
Promise<TtsVoice[]>
Chrome 101 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
ตรวจสอบว่าเครื่องมือกำลังพูดอยู่หรือไม่ ใน Mac OS X ผลลัพธ์จะเป็นจริงทุกครั้งที่ระบบอ่านออกเสียงของระบบพูด แม้ว่า Chrome จะไม่ได้เป็นผู้เริ่มเสียงพูดก็ตาม
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(speaking: boolean) => void
-
การพูด
boolean
"จริง" หากพูด แต่หากไม่พูดจะเป็นเท็จ
-
การคืนสินค้า
-
Promise<boolean>
Chrome 101 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
pause()
chrome.tts.pause()
หยุดการสังเคราะห์เสียงชั่วคราว ซึ่งอาจอยู่ระหว่างเสียงพูด การโทรให้กลับมาทำงานอีกครั้งหรือหยุดจะเลิกหยุดเสียงพูดชั่วคราว
resume()
chrome.tts.resume()
หากเสียงพูดหยุดชั่วคราว ให้พูดต่อจากที่ค้างไว้
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
พูดข้อความโดยใช้เครื่องมืออ่านออกเสียงข้อความ
พารามิเตอร์
-
คำพูด
string
ข้อความที่จะพูด ไม่ว่าจะเป็นข้อความธรรมดาหรือเอกสาร SSML ที่สมบูรณ์และสมบูรณ์ เครื่องมืออ่านออกเสียงที่ไม่รองรับ SSML จะตัดแท็กออกและพูดข้อความ ความยาวสูงสุดของข้อความคือ 32,768 อักขระ
-
ตัวเลือก
TtsOptions ไม่บังคับ
ตัวเลือกเสียงพูด
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 101 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
stop()
chrome.tts.stop()
หยุดเสียงพูดปัจจุบันและล้างคิวของเสียงพูดที่รอดำเนินการ นอกจากนี้ หากหยุดการพูดไว้ชั่วคราว ระบบจะเลิกหยุดชั่วคราวสำหรับการโทรครั้งถัดไป
กิจกรรม
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
เรียกใช้เมื่อรายการ tts.TtsVoice
ที่ getVoices จะแสดงมีการเปลี่ยนแปลง
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void