refresh date: 2026-09-25 robots: noindex
Mô tả
Sử dụng API chrome.ttsEngine để triển khai công cụ chuyển văn bản sang lời nói(TTS) bằng một tiện ích. Nếu tiện ích của bạn đăng ký bằng API này, thì tiện ích đó sẽ nhận được các sự kiện chứa một câu nói cần được phát âm và các tham số khác khi bất kỳ tiện ích hoặc Ứng dụng Chrome nào sử dụng API tts để tạo lời nói. Sau đó, tiện ích của bạn có thể sử dụng bất kỳ công nghệ web nào có sẵn để tổng hợp và xuất lời nói, đồng thời gửi sự kiện trở lại hàm gọi để báo cáo trạng thái.
Quyền
ttsEngineTổng quan
Tiện ích có thể tự đăng ký làm công cụ chuyển văn bản sang lời nói. Bằng cách này, nó có thể chặn một số hoặc tất cả lệnh gọi đến các hàm như tts.speak và tts.stop, đồng thời cung cấp một phương thức triển khai thay thế.
Tiện ích có thể sử dụng bất kỳ công nghệ web nào hiện có để cung cấp lời nói, bao gồm cả âm thanh trực tuyến từ máy chủ, âm thanh HTML5. Tiện ích thậm chí có thể làm điều gì đó khác với các câu nói, chẳng hạn như hiển thị phụ đề trong cửa sổ bật lên hoặc gửi chúng dưới dạng thông điệp nhật ký đến máy chủ từ xa.
Tệp kê khai
Để triển khai công cụ TTS, tiện ích phải khai báo quyền "ttsEngine" rồi khai báo tất cả giọng nói mà tiện ích cung cấp trong tệp kê khai tiện ích, như sau:
{
"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
}
}
Một tiện ích có thể chỉ định số lượng giọng nói bất kỳ.
Tham số voice_name là bắt buộc. Tên phải đủ mang tính mô tả để xác định tên của giọng nói và công cụ được sử dụng. Trong trường hợp hiếm hoi khi hai tiện ích đăng ký giọng nói có cùng tên, ứng dụng có thể chỉ định mã nhận dạng của tiện ích sẽ thực hiện quá trình tổng hợp.
Tham số lang không bắt buộc nhưng bạn nên dùng. Hầu như lúc nào giọng nói cũng có thể tổng hợp lời nói chỉ bằng một ngôn ngữ. Khi một công cụ hỗ trợ nhiều ngôn ngữ, công cụ đó có thể dễ dàng đăng ký một giọng nói riêng cho từng ngôn ngữ. Trong một số ít trường hợp, một giọng nói có thể xử lý nhiều ngôn ngữ, cách dễ nhất là chỉ cần liệt kê hai giọng nói riêng biệt và xử lý chúng bằng cùng một logic nội bộ. Tuy nhiên, nếu bạn muốn tạo một giọng nói có thể xử lý các câu nói bằng bất kỳ ngôn ngữ nào, hãy bỏ tham số lang khỏi tệp kê khai của tiện ích.
Cuối cùng, tham số event_types là bắt buộc nếu công cụ có thể gửi sự kiện để cập nhật cho ứng dụng về tiến trình tổng hợp lời nói. Bạn nên hỗ trợ loại sự kiện 'end' để cho biết thời điểm lời nói kết thúc, nếu không, Chrome sẽ không thể lên lịch cho các câu nói trong hàng đợi.
Sau khi tải, tiện ích có thể thay thế danh sách giọng nói đã khai báo bằng cách gọi chrome.ttsEngine.updateVoices. (Xin lưu ý rằng các tham số được dùng trong lệnh gọi có lập trình đến updateVoices được viết theo kiểu viết lạc đà (viết liền và phân tách bằng chữ cái viết hoa): ví dụ: voiceName, không giống như tệp kê khai sử dụng voice_name.)
Các loại sự kiện có thể gửi tương ứng với các loại sự kiện mà phương thức speak() nhận được:
'start': Công cụ đã bắt đầu đọc câu nói.'word': Đã đạt đến ranh giới từ. Sử dụngevent.charIndexđể xác định vị trí lời nói hiện tại.'sentence': Đã đạt đến ranh giới câu. Dùngevent.charIndexđể xác định vị trí lời nói hiện tại.'marker': Đã đạt đến điểm đánh dấu SSML. Sử dụngevent.charIndexđể xác định vị trí lời nói hiện tại.'end': Công cụ đã nói xong câu nói.'error': Đã xảy ra lỗi dành riêng cho công cụ và không thể nói câu nói này. Truyền thêm thông tin trongevent.errorMessage.
Công cụ lời nói không gửi các sự kiện 'interrupted' và 'cancelled'; các sự kiện này được Chrome tạo tự động.
Ứng dụng chuyển văn bản sang lời nói có thể lấy thông tin giọng nói từ tệp kê khai của tiện ích bằng cách gọi tts.getVoices, giả sử bạn đã đăng ký trình nghe sự kiện lời nói như mô tả bên dưới.
Xử lý sự kiện lời nói
Để tạo lời nói theo yêu cầu của ứng dụng, tiện ích của bạn phải đăng ký trình nghe cho cả onSpeak và onStop, như sau:
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);
Quyết định có gửi một yêu cầu giọng nói nhất định đến một tiện ích hay không hoàn toàn dựa trên việc tiện ích đó có hỗ trợ các tham số giọng nói nhất định trong tệp kê khai hay không và đã đăng ký trình nghe cho onSpeak và onStop hay chưa. Nói cách khác, tiện ích không thể nhận yêu cầu lời nói và tự động quyết định xem có xử lý yêu cầu đó hay không.
Loại
AudioBuffer
Các tham số chứa vùng đệm âm thanh và dữ liệu liên quan.
Thuộc tính
-
audioBuffer
ArrayBuffer
Vùng đệm âm thanh từ công cụ chuyển văn bản sang lời nói. Dữ liệu này phải có độ dài chính xác là audioStreamOptions.bufferSize và được mã hoá dưới dạng đơn âm, ở audioStreamOptions.sampleRate và dưới dạng pcm tuyến tính, số thực có dấu 32 bit, tức là loại Float32Array trong javascript.
-
charIndex
number không bắt buộc
Chỉ mục ký tự liên kết với vùng đệm âm thanh này.
-
isLastBuffer
boolean không bắt buộc
Đúng nếu vùng đệm âm thanh này là vùng đệm cuối cùng cho văn bản đang được đọc.
AudioStreamOptions
Chứa định dạng luồng âm thanh mà một công cụ dự kiến sẽ tạo ra.
Thuộc tính
-
bufferSize
số
Số lượng mẫu trong một vùng đệm âm thanh.
-
sampleRate
số
Tốc độ lấy mẫu dự kiến trong vùng đệm âm thanh.
LanguageInstallStatus
Trạng thái cài đặt của một giọng nói.
Enum
"notInstalled"
"installing"
"installed"
"không thành công"
LanguageStatus
Trạng thái cài đặt của một ngôn ngữ.
Thuộc tính
-
error
chuỗi không bắt buộc
Thông tin chi tiết về các lỗi cài đặt. Được điền (không bắt buộc) nếu không cài đặt được ngôn ngữ.
-
installStatus
Trạng thái cài đặt.
-
lang
chuỗi
Chuỗi ngôn ngữ ở dạng mã ngôn ngữ-mã vùng, trong đó vùng có thể bị bỏ qua. Ví dụ: en, en-AU, zh-CH.
LanguageUninstallOptions
Các lựa chọn để gỡ cài đặt một ngôn ngữ nhất định.
Thuộc tính
-
uninstallImmediately
boolean
Đúng nếu ứng dụng TTS muốn gỡ cài đặt ngôn ngữ ngay lập tức. Công cụ có thể chọn gỡ cài đặt ngôn ngữ hay không hoặc khi nào, dựa trên tham số này và thông tin của trình yêu cầu. Nếu giá trị là false, thì hệ thống có thể sử dụng các tiêu chí khác, chẳng hạn như mức sử dụng gần đây, để xác định thời điểm gỡ cài đặt.
SpeakOptions
Các tuỳ chọn được chỉ định cho phương thức tts.speak().
Thuộc tính
-
gender
VoiceGender không bắt buộc
Ngừng sử dụng kể từ Chrome 92Giới tính không được dùng nữa và sẽ bị bỏ qua.
Giới tính của giọng nói cho lời nói tổng hợp.
-
lang
chuỗi không bắt buộc
Ngôn ngữ được dùng để tổng hợp, ở dạng ngôn ngữ-khu vực. Ví dụ: "en", "en-US", "en-GB", "zh-CN".
-
đề cử
number không bắt buộc
Cao độ giọng nói từ 0 đến 2, trong đó 0 là thấp nhất và 2 là cao nhất. 1.0 tương ứng với cao độ mặc định của giọng nói này.
-
vận tốc
number không bắt buộc
Tốc độ nói so với tốc độ mặc định của giọng nói này. 1.0 là tốc độ mặc định, thường là khoảng 180 đến 220 từ mỗi phút. 2.0 là nhanh gấp đôi và 0.5 là nhanh bằng một nửa. Giá trị này được đảm bảo nằm trong khoảng từ 0,1 đến 10,0. Khi giọng nói không hỗ trợ toàn bộ dải tốc độ này, đừng trả về lỗi. Thay vào đó, hãy cắt bớt tốc độ cho phù hợp với phạm vi mà giọng nói hỗ trợ.
-
voiceName
chuỗi không bắt buộc
Tên của giọng nói dùng để tổng hợp.
-
thể tích
number không bắt buộc
Âm lượng nói từ 0 đến 1, trong đó 0 là thấp nhất và 1 là cao nhất, với giá trị mặc định là 1.0.
TtsClient
Giá trị nhận dạng cho trạng thái yêu cầu của ứng dụng khách.
Thuộc tính
-
id
chuỗi
Ứng dụng khách gửi yêu cầu quản lý ngôn ngữ. Đối với tiện ích, đây là mã tiện ích duy nhất. Đối với các tính năng của Chrome, đây là tên con người có thể đọc được của tính năng.
-
source
Loại người yêu cầu.
TtsClientSource
Loại người yêu cầu.
Enum
"chromefeature"
"extension"
VoiceGender
Giới tính không được dùng nữa và sẽ bị bỏ qua.
Enum
"male"
"female"
Phương thức
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Được một công cụ gọi khi cố gắng cài đặt ngôn ngữ và khi gỡ cài đặt ngôn ngữ. Cũng được gọi để phản hồi yêu cầu về trạng thái từ ứng dụng khách. Khi một giọng nói được cài đặt hoặc gỡ cài đặt, công cụ cũng phải gọi ttsEngine.updateVoices để đăng ký giọng nói đó.
Thông số
-
trạng thái
Trạng thái cài đặt của ngôn ngữ.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Được một công cụ gọi để cập nhật danh sách giọng nói. Danh sách này ghi đè mọi giọng nói được khai báo trong tệp kê khai của tiện ích này.
Thông số
-
những giọng nói
TtsVoice[]
Mảng đối tượng
tts.TtsVoiceđại diện cho các giọng nói có sẵn để tổng hợp lời nói.
Sự kiện
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Được kích hoạt khi ứng dụng TTS yêu cầu cài đặt một ngôn ngữ mới. Công cụ này sẽ cố gắng tải xuống và cài đặt ngôn ngữ, đồng thời gọi ttsEngine.updateLanguage kèm theo kết quả. Khi thành công, công cụ cũng sẽ gọi ttsEngine.updateVoices để đăng ký các giọng nói mới có sẵn.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(requestor: TtsClient, lang: string) => void
-
người yêu cầu
-
lang
chuỗi
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Được kích hoạt khi ứng dụng TTS yêu cầu trạng thái cài đặt của một ngôn ngữ.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(requestor: TtsClient, lang: string) => void
-
người yêu cầu
-
lang
chuỗi
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Không bắt buộc: nếu một công cụ hỗ trợ sự kiện tạm dừng, thì công cụ đó sẽ tạm dừng câu nói hiện tại (nếu có) cho đến khi nhận được sự kiện tiếp tục hoặc sự kiện dừng. Xin lưu ý rằng sự kiện dừng cũng sẽ xoá trạng thái tạm dừng.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Không bắt buộc: nếu một công cụ hỗ trợ sự kiện tạm dừng, thì công cụ đó cũng phải hỗ trợ sự kiện tiếp tục để tiếp tục đọc câu nói hiện tại (nếu có). Xin lưu ý rằng sự kiện dừng cũng sẽ xoá trạng thái tạm dừng.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Được gọi khi người dùng thực hiện lệnh gọi đến tts.speak() và một trong các giọng nói trong tệp kê khai của tiện ích này là giọng nói đầu tiên khớp với đối tượng tuỳ chọn.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
câu nói
chuỗi
-
tùy chọn
-
sendTtsEvent
hàm
Tham số
sendTtsEventcó dạng như sau:(event: tts.TtsEvent) => void
-
sự kiện
Sự kiện từ công cụ chuyển văn bản sang lời nói cho biết trạng thái của câu nói này.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Được gọi khi người dùng thực hiện lệnh gọi đến tts.speak() và một trong các giọng nói trong tệp kê khai của tiện ích này là giọng nói đầu tiên khớp với đối tượng tuỳ chọn. Khác với ttsEngine.onSpeak ở chỗ Chrome cung cấp dịch vụ phát âm thanh và xử lý việc gửi các sự kiện tts.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
câu nói
chuỗi
-
tùy chọn
-
audioStreamOptions
-
sendTtsAudio
hàm
Tham số
sendTtsAudiocó dạng như sau:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Các tham số chứa vùng đệm âm thanh và dữ liệu liên quan.
-
-
sendError
hàm
Chrome 94 trở lênTham số
sendErrorcó dạng như sau:(errorMessage?: string) => void
-
errorMessage
chuỗi không bắt buộc
Chuỗi mô tả lỗi.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Được kích hoạt khi một lệnh gọi được thực hiện đến tts.stop và tiện ích này có thể đang nói. Nếu một tiện ích nhận được lệnh gọi đến onStop và lời nói đã dừng, thì tiện ích đó không cần làm gì cả (không báo lỗi). Nếu lời nói đang ở trạng thái tạm dừng, thì thao tác này sẽ huỷ trạng thái tạm dừng.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Được kích hoạt khi ứng dụng TTS cho biết không cần ngôn ngữ nữa.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
người yêu cầu
-
lang
chuỗi
-
uninstallOptions
-