คำอธิบาย
ใช้ chrome.tts API เพื่อเล่นการอ่านออกเสียงข้อความ (TTS) ที่สังเคราะห์ ดู API ที่เกี่ยวข้องของ ttsEngine ซึ่งช่วยให้ส่วนขยายสามารถติดตั้งใช้งานเครื่องมือแปลงข้อความเป็นคำพูดได้
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);
}
}
);
Callback จะแสดงผลทันทีก่อนที่เครื่องมือจะเริ่มสร้างคำพูด จุดประสงค์ของ การเรียกกลับคือการแจ้งเตือนข้อผิดพลาดด้านไวยากรณ์ในการใช้ TTS API ไม่ใช่เพื่อตรวจหาข้อผิดพลาดทั้งหมดที่อาจเกิดขึ้นในกระบวนการสังเคราะห์และเอาต์พุตคำพูด หากต้องการตรวจหาข้อผิดพลาดเหล่านี้ด้วย คุณต้องใช้เครื่องมือฟังเหตุการณ์ตามที่อธิบายไว้ในส่วนถัดไป
ฟังเหตุการณ์
หากต้องการดูข้อมูลแบบเรียลไทม์เพิ่มเติมเกี่ยวกับสถานะของคำพูดที่สังเคราะห์ ให้ส่ง 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 นี้อาจมีมาร์กอัปที่ใช้ภาษามาร์กอัปการสังเคราะห์เสียง
(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
ค่าแจกแจง
"start"
"end"
"word"
"sentence"
"marker"
"interrupted"
"ยกเลิกแล้ว"
"error"
"หยุดชั่วคราว"
"เล่นต่อ"
TtsEvent
เหตุการณ์จากเครื่องมือ TTS เพื่อสื่อสารสถานะของคำพูด
พร็อพเพอร์ตี้
-
charIndex
หมายเลข ไม่บังคับ
ดัชนีของอักขระปัจจุบันในคำพูด สำหรับเหตุการณ์ระดับคำ ระบบจะทริกเกอร์เหตุการณ์ที่ท้ายคำหนึ่งและก่อนเริ่มคำถัดไป
charIndexแสดงถึงจุดในข้อความที่จุดเริ่มต้นของคำถัดไปที่จะพูด -
errorMessage
สตริง ไม่บังคับ
คำอธิบายข้อผิดพลาด หากประเภทเหตุการณ์เป็น
error -
ความยาว
หมายเลข ไม่บังคับ
Chrome 74 ขึ้นไปความยาวของส่วนถัดไปของคำพูด เช่น ใน
wordเหตุการณ์ นี่คือความยาวของคำที่จะพูดต่อไป ระบบจะตั้งค่าเป็น -1 หากไม่ได้ตั้งค่าโดยเครื่องมือแปลงข้อความเป็นคำพูด -
ประเภท
ประเภทนี้อาจเป็น
startทันทีที่เริ่มพูดwordเมื่อถึงขอบเขตของคำsentenceเมื่อถึงขอบเขตของประโยคmarkerเมื่อถึงองค์ประกอบเครื่องหมาย SSMLendเมื่อถึงจุดสิ้นสุดของคำพูดinterruptedเมื่อหยุดหรือขัดจังหวะคำพูดก่อนถึงจุดสิ้นสุดcancelledเมื่อนำออกจากคิวโดยไม่เคยสังเคราะห์ หรือerrorเมื่อเกิดข้อผิดพลาดอื่นๆ เมื่อหยุดการพูดชั่วคราว ระบบจะทริกเกอร์เหตุการณ์pauseหากหยุดคำพูดหนึ่งๆ ไว้กลางคัน และresumeหากคำพูดนั้นกลับมาพูดต่อ โปรดทราบว่าเหตุการณ์หยุดชั่วคราวและเหตุการณ์เล่นต่ออาจไม่ทริกเกอร์หากมีการหยุดคำพูดชั่วคราวระหว่างการพูด
TtsOptions
ตัวเลือกเสียงพูดสำหรับเครื่องมือ TTS
พร็อพเพอร์ตี้
-
desiredEventTypes
string[] ไม่บังคับ
ประเภทเหตุการณ์ TTS ที่คุณสนใจฟัง หากไม่มี ระบบอาจส่งเหตุการณ์ทุกประเภท
-
จัดคิว
บูลีน ไม่บังคับ
หากเป็นจริง จะจัดคิวคำพูดนี้หาก TTS กำลังดำเนินการอยู่ หากเป็นเท็จ (ค่าเริ่มต้น) จะขัดจังหวะคำพูดปัจจุบันและล้างคิวคำพูดก่อนที่จะพูดคำพูดใหม่นี้
-
extensionId
สตริง ไม่บังคับ
รหัสส่วนขยายของเครื่องมือ Speech ที่จะใช้ (หากทราบ)
-
gender
VoiceGender ไม่บังคับ
เลิกใช้งานตั้งแต่ Chrome 77เราเลิกใช้งานเพศแล้วและจะไม่สนใจ
เพศของเสียงสำหรับคำพูดที่สังเคราะห์
-
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 แต่เสียงจำนวนมากจะจำกัดอัตราขั้นต่ำและสูงสุดเพิ่มเติม เช่น เสียงหนึ่งๆ อาจพูดเร็วกว่าปกติไม่เกิน 3 เท่า แม้ว่าคุณจะระบุค่าที่มากกว่า 3.0 ก็ตาม
-
requiredEventTypes
string[] ไม่บังคับ
ประเภทเหตุการณ์ TTS ที่เสียงต้องรองรับ
-
voiceName
สตริง ไม่บังคับ
ชื่อของเสียงที่จะใช้ในการสังเคราะห์ หากเว้นว่างไว้ ระบบจะใช้เสียงใดก็ได้
-
ระดับเสียง
หมายเลข ไม่บังคับ
ระดับเสียงพูดระหว่าง 0 ถึง 1 โดย 0 คือระดับต่ำสุดและ 1 คือระดับสูงสุด โดยค่าเริ่มต้นคือ 1.0
-
onEvent
void optional
ฟังก์ชันนี้จะเรียกใช้กับเหตุการณ์ที่เกิดขึ้นในกระบวนการพูดข้อความ
ฟังก์ชัน
onEventมีลักษณะดังนี้(event: TtsEvent) => {...}
-
เหตุการณ์
เหตุการณ์การอัปเดตจากเครื่องมืออ่านออกเสียงข้อความซึ่งระบุสถานะของคำพูดนี้
-
TtsVoice
คำอธิบายของเสียงที่ใช้ได้สำหรับการสังเคราะห์เสียง
พร็อพเพอร์ตี้
-
eventTypes
EventType[] ไม่บังคับ
ประเภทเหตุการณ์การเรียกกลับทั้งหมดที่เสียงนี้ส่งได้
-
extensionId
สตริง ไม่บังคับ
รหัสของส่วนขยายที่ให้เสียงนี้
-
gender
VoiceGender ไม่บังคับ
เลิกใช้งานตั้งแต่ Chrome 70เราเลิกใช้งานเพศแล้วและจะไม่สนใจ
เพศของเสียงนี้
-
lang
สตริง ไม่บังคับ
ภาษาที่เสียงนี้รองรับในรูปแบบ language-region ตัวอย่างเช่น "en", "en-US", "en-GB", "zh-CN"
-
รีโมต
บูลีน ไม่บังคับ
หากเป็นจริง แสดงว่าเครื่องมือสังเคราะห์เป็นทรัพยากรเครือข่ายระยะไกล ซึ่งอาจมีเวลาในการตอบสนองสูงขึ้นและอาจมีค่าบริการแบนด์วิดท์
-
voiceName
สตริง ไม่บังคับ
ชื่อเสียง
VoiceGender
ระบบเลิกใช้งานเพศแล้วและจะไม่สนใจ
ค่าแจกแจง
"male"
"female"
เมธอด
การคืนสินค้า
-
Promise<TtsVoice[]>
Chrome 101 ขึ้นไป
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
ตรวจสอบว่าเครื่องมือพูดอยู่หรือไม่ ใน Mac OS X ผลลัพธ์จะเป็นจริงทุกครั้งที่เครื่องมืออ่านออกเสียงของระบบกำลังพูด แม้ว่า Chrome จะไม่ได้เป็นผู้เริ่มการอ่านออกเสียงก็ตาม
การคืนสินค้า
-
Promise<boolean>
Chrome 101 ขึ้นไป
pause()
chrome.tts.pause(): void
หยุดการสังเคราะห์เสียงชั่วคราว ซึ่งอาจหยุดกลางประโยค การเรียกใช้เพื่อดำเนินการต่อหรือหยุดจะยกเลิกการหยุดเสียงพูดชั่วคราว
resume()
chrome.tts.resume(): void
หากหยุดการอ่านข้อความชั่วคราว ฟีเจอร์นี้จะกลับมาอ่านต่อจากจุดที่หยุดไว้
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
อ่านออกเสียงข้อความโดยใช้เครื่องมือการอ่านออกเสียงข้อความ
พารามิเตอร์
-
คำพูด
สตริง
ข้อความที่จะพูด ไม่ว่าจะเป็นข้อความธรรมดาหรือเอกสาร SSML ที่สมบูรณ์และมีรูปแบบที่ถูกต้อง เครื่องมือเสียงพูดที่ไม่รองรับ SSML จะนำแท็กออกและอ่านข้อความ ข้อความมีความยาวสูงสุดได้ 32,768 อักขระ
-
ตัวเลือก
TtsOptions ไม่บังคับ
ตัวเลือกการอ่านออกเสียง
การคืนสินค้า
-
Promise<void>
Chrome 101 ขึ้นไปแก้ไขทันทีที่พูดจบ หากเกิดข้อผิดพลาด ระบบจะปฏิเสธสัญญา ใช้ options.onEvent เพื่อรับความคิดเห็นโดยละเอียดเพิ่มเติม
stop()
chrome.tts.stop(): void
หยุดเสียงพูดที่กำลังเล่นอยู่และล้างคิวของคำพูดที่รอดำเนินการ นอกจากนี้ หากหยุดการอ่านข้อความชั่วคราว ระบบจะยกเลิกการหยุดชั่วคราวสำหรับการเรียกใช้ฟีเจอร์พูดครั้งถัดไป
กิจกรรม
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
เรียกใช้เมื่อรายการ tts.TtsVoice ที่ getVoices จะแสดงผลมีการเปลี่ยนแปลง
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้() => void