คำอธิบาย
ใช้ 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()
อย่างถูกต้อง ให้ส่งฟังก์ชัน Callback ที่
ไม่ต้องใช้อาร์กิวเมนต์ ตรวจสอบ runtime.lastError
ใน Callback เพื่อดูว่ามี
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
Callback จะกลับมาทันที ก่อนที่เครื่องยนต์จะเริ่มส่งเสียง วัตถุประสงค์ของ Callback คือการแจ้งเตือนข้อผิดพลาดทางไวยากรณ์ในการใช้ 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 นี้อาจรวมถึงมาร์กอัปที่ใช้ภาษามาร์กอัปการสังเคราะห์เสียง
(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
ค่าแจกแจง
"เริ่ม"
"สิ้นสุด"
"คำ"
"ประโยค"
"เครื่องหมาย"
"ถูกขัดจังหวะ"
"cancelled"
"ข้อผิดพลาด"
"หยุดชั่วคราว"
"ดำเนินการต่อ"
TtsEvent
เหตุการณ์จากเครื่องมือ TTS เพื่อสื่อสารสถานะของการเปล่งเสียง
พร็อพเพอร์ตี้
-
charIndex
หมายเลข ไม่บังคับ
ดัชนีของอักขระปัจจุบันในคำพูด สำหรับเหตุการณ์ที่เป็นคำ เหตุการณ์จะเริ่มทำงานเมื่อจบคำหนึ่งคำและก่อนเริ่มต้นคำถัดไป
charIndex
แสดงจุดในข้อความที่จุดเริ่มต้นของคำถัดไปที่จะพูด -
errorMessage
string ไม่บังคับ
คำอธิบายข้อผิดพลาด หากประเภทเหตุการณ์คือ
error
-
ความยาว
หมายเลข ไม่บังคับ
Chrome 74 ขึ้นไปความยาวของส่วนถัดไปของคำพูด เช่น ในเหตุการณ์
word
นี่คือความยาวของคำที่จะพูดต่อไป โหมดนี้จะตั้งค่าเป็น -1 หากไม่ได้ตั้งค่าโดยเครื่องมืออ่านออกเสียง -
ประเภท
ประเภทสามารถเป็น
start
ทันทีที่คำพูดเริ่มขึ้น,word
เมื่อถึงขอบเขตของคำ,sentence
เมื่อมาถึงขอบเขตของประโยค,marker
เมื่อมาถึงองค์ประกอบเครื่องหมาย SSML,end
เมื่อถึงจุดสิ้นสุดของคำพูด,interrupted
เมื่อการพูดหยุดหรือหยุดชะงักก่อนที่จะถึงจุดสิ้นสุด,cancelled
เมื่อนำเสียงออกจากคิวก่อนที่จะมีการสังเคราะห์เสียง หรือerror
เมื่อมีข้อผิดพลาดอื่นๆ เกิดขึ้น เมื่อหยุดพูดชั่วคราว เหตุการณ์pause
จะเริ่มทำงานหากมีการหยุดคำพูดชั่วคราวไว้ตรงกลาง และresume
หากการพูดกลับมาทำงานอีกครั้ง โปรดทราบว่าเหตุการณ์หยุดชั่วคราวและกลับมาทำงานอีกครั้งอาจไม่เริ่มทํางานหากการหยุดชั่วคราวอยู่ระหว่างการเปล่งเสียง
TtsOptions
ตัวเลือกการพูดสำหรับเครื่องมือ TTS
พร็อพเพอร์ตี้
-
desiredEventTypes
string[] ไม่บังคับ
ประเภทเหตุการณ์ TTS ที่คุณสนใจจะฟัง หากไม่พบ ระบบจะส่งเหตุการณ์ทุกประเภท
-
enqueue
บูลีน ไม่บังคับ
หากเป็น "จริง" จัดลำดับคำพูดนี้หาก 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 คือเร็ว 2 เท่าและ 0.5 เร็วขึ้นครึ่งหนึ่ง ค่าที่ต่ำกว่า 0.1 หรือสูงกว่า 10.0 จะไม่ได้รับอนุญาตอย่างเคร่งครัด แต่เสียงจำนวนมากจะจำกัดอัตราต่ำสุดและสูงสุดให้มากกว่านี้ ตัวอย่างเช่น เสียงบางเสียงอาจไม่พูดเร็วกว่าปกติถึง 3 เท่าแม้ว่าคุณจะระบุค่าที่มากกว่า 3.0 ก็ตาม
-
requiredEventTypes
string[] ไม่บังคับ
เหตุการณ์ TTS เป็นประเภทที่ Voice ต้องรองรับ
-
voiceName
string ไม่บังคับ
ชื่อของเสียงที่จะใช้สำหรับการสังเคราะห์ หากว่างเปล่า ใช้เสียงที่มีอยู่
-
ระดับเสียง
หมายเลข ไม่บังคับ
ระดับเสียงระหว่าง 0 ถึง 1 โดย 0 คือระดับเสียงต่ำสุด และ 1 คือระดับเสียงสูงสุด โดยมีค่าเริ่มต้นเป็น 1.0
-
onEvent
เป็นโมฆะ ไม่บังคับ
ฟังก์ชันนี้จะถูกเรียกพร้อมด้วยเหตุการณ์ที่เกิดขึ้นในกระบวนการพูด
ฟังก์ชัน
onEvent
มีลักษณะดังนี้(event: TtsEvent) => {...}
-
event
เหตุการณ์อัปเดตจากเครื่องมืออ่านออกเสียงข้อความที่ระบุสถานะของคำพูดนี้
-
TtsVoice
คำอธิบายของเสียงที่ใช้ได้สำหรับการสังเคราะห์เสียง
พร็อพเพอร์ตี้
-
eventTypes
EventType[] ไม่บังคับ
ประเภทเหตุการณ์ Callback ทั้งหมดที่เสียงนี้ส่งได้
-
extensionId
string ไม่บังคับ
รหัสของส่วนขยายที่ให้เสียงนี้
-
gender
VoiceGender ไม่บังคับ
เลิกใช้งานตั้งแต่ Chrome 70เลิกใช้งานเพศแล้วและระบบจะไม่สนใจ
เพศของเสียงนี้
-
lang
string ไม่บังคับ
ภาษาที่เสียงนี้รองรับในรูปแบบ ภาษา-ภูมิภาค ตัวอย่างเช่น "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 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
ตรวจสอบว่าเครื่องยนต์กำลังพูดอยู่หรือไม่ ใน Mac OS X ผลลัพธ์นี้จะเป็นจริงทุกครั้งที่เครื่องมืออ่านออกเสียงของระบบกำลังพูด แม้ว่า Chrome จะไม่ได้เป็นผู้เริ่มพูดก็ตาม
พารามิเตอร์
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(speaking: boolean) => void
-
การพูด
boolean
"จริง" หากพูด แต่หากเป็น "เท็จ" หากไม่เป็นเช่นนั้น
-
การคืนสินค้า
-
Promise<boolean>
Chrome 101 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
pause()
chrome.tts.pause()
หยุดการสังเคราะห์เสียงไว้ชั่วคราว ซึ่งอาจอยู่ระหว่างเสียงพูด การสั่งให้เล่นต่อหรือหยุดจะเป็นการหยุดเสียงพูดชั่วคราว
resume()
chrome.tts.resume()
หากหยุดพูดชั่วคราว จะพูดต่อจากจุดที่หยุดค้างไว้
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
พูดข้อความโดยใช้เครื่องมืออ่านออกเสียงข้อความ
พารามิเตอร์
-
การพูด
สตริง
ข้อความที่จะพูด ไม่ว่าจะเป็นข้อความธรรมดาหรือเอกสาร SSML ที่สมบูรณ์และมีรูปแบบที่ถูกต้อง เครื่องมืออ่านออกเสียงที่ไม่รองรับ SSML จะตัดแท็กออกและพูดข้อความ ความยาวสูงสุดของข้อความคือ 32,768 อักขระ
-
ตัวเลือก
TtsOptions ไม่บังคับ
ตัวเลือกการพูด
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
คำมั่นสัญญา<โมฆะ>
Chrome 101 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
stop()
chrome.tts.stop()
หยุดเสียงพูดปัจจุบันและล้างคิวของคำพูดที่รอดำเนินการ นอกจากนี้ หากมีการหยุดเสียงพูดชั่วคราว ระบบก็จะยกเลิกการหยุดชั่วคราวสำหรับการโทรครั้งต่อไปด้วย
กิจกรรม
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
เรียกใช้เมื่อรายการ tts.TtsVoice
ที่ getVoices จะส่งกลับมามีการเปลี่ยนแปลง
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void