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 đăng ký bằng API này, tiện ích sẽ nhận được các sự kiện chứa một câu nói cần được nói và các thông 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 hiện có để tổng hợp và xuất lời nói, đồng thời gửi các sự kiện trở lại hàm gọi để báo cáo trạng thái.
Quyền
ttsEngine
Khái niệm và cách sử dụng
Tiện ích có thể tự đăng ký làm công cụ phát âm. Bằng cách đó, trình bổ trợ 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 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 một việc khác với các câu lệnh, chẳng hạn như hiển thị phụ đề trong cửa sổ bật lên hoặc gửi các câu lệnh đó dưới dạng thông điệp nhật ký đến một máy chủ từ xa.
Để triển khai công cụ TTS, tiện ích phải khai báo quyền "ttsEngine", sau đó 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 đủ mô tả để xác định tên giọng nói và công cụ được sử dụng. Trong trường hợp hiếm gặp là hai tiện ích đăng ký giọng nói cùng tên, ứng dụng có thể chỉ định mã của tiện ích sẽ thực hiện quá trình tổng hợp.
Bạn không bắt buộc phải sử dụng thông số lang
, nhưng bạn nên sử dụng. Hầu hết các giọng nói đều có thể tổng hợp lời nói bằng một ngôn ngữ duy nhất. Khi 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ỉ 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ỏ qua tham số lang
khỏi tệp kê khai của tiện ích.
Cuối cùng, bạn phải có thông số event_types
nếu công cụ có thể gửi sự kiện để cập nhật ứng dụng về tiến trình tổng hợp lời nói. Tối thiểu, 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 các câu lệnh đã xếp hàng.
Sau khi tải, một 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
. (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 camel: 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 nói câu lệnh.'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. Sử 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 lệnh.'error'
: Đã xảy ra lỗi dành riêng cho công cụ và không thể nói câu lệnh này. Truyền thêm thông tin trongevent.errorMessage
.
Sự kiện 'interrupted'
và 'cancelled'
không do công cụ lời nói gửi; mà do Chrome tự động tạo.
Ứng dụng chuyển văn bản sang lời nói có thể lấy thông tin thoạ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 gửi hay không gửi một yêu cầu thoại nhất định đến một tiện ích chỉ dựa trên việc tiện ích đó có hỗ trợ các tham số thoạ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 được yêu cầu thoại và tự động quyết định xem có xử lý yêu cầu đó hay không.
Loại
AudioBuffer
Các thông 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. Luồng này phải có độ dài chính xác là audioStreamOptions.bufferSize và được mã hoá dưới dạng âm thanh đơn kênh, tại audioStreamOptions.sampleRate và dưới dạng pcm tuyến tính, dấu phẩy động 32 bit, tức là loại Float32Array trong javascript.
-
charIndex
số 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 dự kiến do công cụ tạo ra.
Thuộc tính
-
bufferSize
số
Số lượng mẫu trong 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"
"đã cài đặt"
"failed"
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. Không bắt buộc phải điền 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ã khu vực, trong đó khu vực có thể bị bỏ qua. Ví dụ: en, en-AU, zh-CH.
LanguageUninstallOptions
Các tuỳ 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 có gỡ cài đặt ngôn ngữ hay không và thời điểm gỡ cài đặt, dựa trên tham số này và thông tin về người yêu cầu. Nếu giá trị là false, thì ứng dụ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òn đượ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 được tổng hợp.
-
lang
chuỗi không bắt buộc
Ngôn ngữ sẽ được dùng để tổng hợp, ở dạng ngôn ngữ-khu vực. Ví dụ: "vi", "vi-VN", "vi-US", "zh-CN".
-
đề cử
số 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
số 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ừ/phút. 2.0 nhanh gấp đôi và 0.5 nhanh một nửa. Giá trị này được đảm bảo nằm trong khoảng từ 0,1 đến 10,0. Khi một giọng nói không hỗ trợ đầy đủ phạm vi tốc độ này, đừng trả về lỗi. Thay vào đó, hãy cắt tốc độ xuống 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 để sử dụng cho tính năng tổng hợp.
-
thể tích
số không bắt buộc
Độ to của giọng nói nằm trong khoảng từ 0 đến 1, trong đó 0 là mức thấp nhất và 1 là mức 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.
Thuộc tính
-
id
chuỗi
Ứng dụng đưa ra yêu cầu quản lý ngôn ngữ. Đối với một tiện ích, đây là mã nhận dạng duy nhất của tiện ích. Đối với các tính năng của Chrome, đây là tên tính năng mà con người có thể đọc được.
-
nguồn
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òn được dùng nữa và sẽ bị bỏ qua.
Enum
"male"
"female"
Phương thức
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
)
Được 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 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 đó.
Tham số
-
trạng thái
Trạng thái cài đặt của ngôn ngữ.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Được một công cụ gọi để cập nhật danh sách giọng nói. Danh sách này sẽ ghi đè mọi giọng nói được khai báo trong tệp kê khai của tiện ích này.
Tham số
-
những giọng nói
TtsVoice[]
Mảng các đố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 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 bằng 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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ữ.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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 hỗ trợ sự kiện tạm dừng, công cụ sẽ tạm dừng lời 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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 nói lời 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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 những 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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ố
sendTtsEvent
có dạng như sau:(event: tts.TtsEvent) => void
-
event
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 lệnh 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 những 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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ố
sendTtsAudio
có dạng như sau:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Các thông số chứa vùng đệm âm thanh và dữ liệu liên quan.
-
-
sendError
hàm
Chrome 94 trở lênTham số
sendError
có 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 có lệnh gọi đế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 đó sẽ không 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có 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.
Tham số
-
lệnh gọi lại
hàm
Tham số
callback
có dạng như sau:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
người yêu cầu
-
lang
chuỗi
-
uninstallOptions
-