Mô tả
Sử dụng chrome.ttsEngine API để triển khai một công cụ chuyển văn bản sang lời nói(TTS) bằng cách sử dụng một tiện ích. Nếu đăng ký bằng API này, tiện ích của bạn sẽ nhận được các sự kiện chứa một câu nói cần được phát 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 mọi công nghệ web 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
ttsEngineKhái niệm và cách sử dụng
Tiện ích có thể tự đăng ký làm công cụ chuyển lời nói thành văn bản. Bằng cách này, nó có thể chặn một số hoặc tất cả các lệnh gọi đến các hàm như tts.speak() và tts.stop(), đồng thời cung cấp một cách triển khai thay thế.
Tiện ích được phép sử dụng mọi công nghệ web hiện có để cung cấp lời nói, bao gồm cả âm thanh phát trực tuyến từ máy chủ, âm thanh HTML5. Tiện ích này thậm chí có thể làm điều gì đó khác với câu nói, chẳng hạn như hiển thị phụ đề trong một cửa sổ bật lên hoặc gửi câu nói dưới dạng thông điệp nhật ký đến một máy chủ từ xa.
Để triển khai một công cụ TTS, tiện ích phải khai báo quyền "ttsEngine" rồi khai báo tất cả cá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
}
}
Tiện ích có thể chỉ định số lượng giọng nói bất kỳ.
Tham số voice_name là tham số bắt buộc. Tên này phải có đủ chi tiết mô tả để xác định tên của giọng nói và công cụ được dùng. Trong trường hợp hiếm gặp là hai tiện ích đăng ký giọng nói có cùng tên, một ứng dụng có thể chỉ định mã nhận dạng của tiện ích cần thực hiện việc tổng hợp.
Bạn không bắt buộc phải dùng tham số lang, nhưng nên dùng. Hầu như luôn luôn, một giọng nói chỉ 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ụ này có thể dễ dàng đăng ký một giọng nói riêng cho từng ngôn ngữ. Trong những trường hợp hiếm gặp khi 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âu nói bằng mọi ngôn ngữ, hãy bỏ qua tham số lang trong tệp kê khai của tiện ích.
Cuối cùng, bạn phải dùng thông số event_types nếu công cụ có thể gửi các 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ợ ít nhất loại sự kiện 'end' để cho biết thời điểm kết thúc lời nói, 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 các 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 theo chương trình đến updateVoices được viết theo kiểu camel: ví dụ: voiceName, không giống như tệp kê khai 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ừ. Dùngevent.charIndexđể xác định vị trí hiện tại của lời nói.'sentence': Đã đạt đến ranh giới của câu. Dùngevent.charIndexđể xác định vị trí hiện tại của lời nói.'marker': Đã đạt đến một điểm đánh dấu SSML. Dùngevent.charIndexđể xác định vị trí hiện tại của lời nói.'end': Công cụ đã nói xong câu.'error': Đã xảy ra lỗi dành riêng cho công cụ và không thể phát biểu thức này. Truyền thêm thông tin trongevent.errorMessage.
Công cụ chuyển lời nói thành văn bản không gửi các sự kiện 'interrupted' và 'cancelled'; Chrome sẽ tự động tạo các sự kiện này.
Các ứng dụng chuyển văn bản sang lời nói có thể lấy thông tin về 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 các ứ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 lời nói nhất định đến một tiện ích hay không chỉ dựa trên việc tiện ích đó có hỗ trợ các thông 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, không có cách nào để tiện ích nhận được yêu cầu về lời nói và quyết định một cách linh hoạt xem có xử lý yêu cầu đó hay không.
Loại
AudioBuffer
Các tham số chứa bộ đệm âm thanh và dữ liệu liên kết.
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. Đoạn âm thanh 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ự được liên kết với vùng đệm âm thanh này.
-
isLastBuffer
boolean không bắt buộc
True nếu vùng đệm âm thanh này là vùng đệm cuối cùng cho văn bản đang được nói.
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"
"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. Có thể được điền sẵ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 đó bạn có thể bỏ qua khu vực. Ví dụ: en, en-AU, zh-CH.
LanguageUninstallOptions
Các lựa chọn để gỡ cài đặt một ngôn ngữ cụ thể.
Thuộc tính
-
uninstallImmediately
boolean
True nếu ứng dụng TTS muốn ngôn ngữ được gỡ cài đặt ngay lập tức. Dựa vào thông số này và thông tin về người yêu cầu, công cụ có thể chọn thời điểm hoặc quyết định có nên gỡ cài đặt ngôn ngữ hay không. Nếu là false, thì 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 lựa chọn được chỉ định cho phương thức tts.speak().
Thuộc tính
-
gender
VoiceGender không bắt buộc
Không dùng nữa 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 được tạo.
-
lang
chuỗi không bắt buộc
Ngôn ngữ sẽ được dùng để tổng hợp, ở dạng language-region. Ví dụ: "en", "en-US", "en-GB", "zh-CN".
-
đề cử
number không bắt buộc
Cao độ khi nói nằm trong khoảng từ 0 đến 2 (bao gồm cả 0 và 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. Tốc độ 2.0 nhanh gấp đôi và tốc độ 0.5 chậm bằng một nửa. Giá trị này chắc chắn nằm trong khoảng từ 0,1 đến 10,0 (bao gồm cả hai giá trị này). Khi một 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 tốc độ trong 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 (tính cả 0 và 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 của ứng dụng yêu cầu trạng thái.
Thuộc tính
-
id
chuỗi
Máy khách đưa ra yêu cầu quản lý ngôn ngữ. Đối với 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 dễ đọ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 gọi bởi một công cụ khi có người tìm cách cài đặt ngôn ngữ và khi một ngôn ngữ bị gỡ cài đặt. Cũng được gọi để phản hồi yêu cầu về trạng thái của mộ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 sẽ 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 gồm các đối tượng
tts.TtsVoiceđại diện cho các giọng nói có sẵn để tổng hợp tiếng nói.
Sự kiện
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Được kích hoạt khi một ứ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 bằng kết quả. Khi thành công, công cụ cũng nên 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 một ứ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 hiện tại đang được nó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 nói câu 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 lựa 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
-
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 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 lựa 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 bộ đệm âm thanh và dữ liệu liên kết.
-
-
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
Một chuỗi mô tả lỗi.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Sự kiện này xảy ra khi một cuộc 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 nên làm gì cả (không được gây ra 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 một ứ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
-