Mô tả
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, tiện ích sẽ nhận được các sự kiện chứa cách phát âm sẽ đượ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 giọng nói, cũng như gửi sự kiện trở lại hàm gọi để báo cáo trạng thái.
Quyền
ttsEngine
Tổng quan
Tiện ích có thể tự đăng ký làm công cụ chuyển lời nói. Khi làm như vậy, ứng dụng có thể chặn một số hoặc tất cả các lệnh gọi
vào 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ế.
Các tiện ích được miễn phí 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 truyền 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
bằng cách 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ý tới
một máy chủ từ xa.
Tệp kê khai
Để triển khai công cụ TTS, tiện ích phải khai báo "ttsEngine" rồi khai báo tất cả những giọng nói mà công cụ này cung cấp trong tệp kê khai của tiện ích, chẳng hạn 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ỗi 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 này phải đủ 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 gặp là 2 tiện ích đăng ký giọng nói
có cùng tên, ứng dụng khách có thể chỉ định mã nhận dạng 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 tham số lang
, nhưng bạn nên dùng tham số này. Hầu như mọi lúc, giọng nói đều có thể tổng hợp
bằng một ngôn ngữ duy nhất. Khi một công cụ hỗ trợ nhiều ngôn ngữ, công cụ đó có thể dễ dàng
hãy đăng ký một giọng nói riêng cho mỗi ngôn ngữ. Trong một số ít trường hợp mà 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ý các giọng nói đó bằng
cùng một logic trong 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ách phát âm ở bất kỳ
ngôn ngữ, hãy bỏ tham số lang
khỏi tệp kê khai của tiện ích.
Cuối cùng, bạn cần phải có thông số event_types
nếu công cụ có thể gửi các sự kiện để cập nhật ứng dụng
tiến trình tổng hợp tiếng nói. Ở mức tối thiểu, việc hỗ trợ loại sự kiện 'end'
để cho biết
khi lời nói kết thúc được khuyến nghị, nếu không Chrome không thể lên lịch các cách phát âm 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
. (Lưu ý rằng các tham số được sử dụng trong lệnh gọi có lập trình đến
updateVoices
theo kiểu viết lạc đà: ví dụ: voiceName
, không giống như tệp kê khai sử dụng
voice_name
.)
Các loại sự kiện mà bạ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ách phát âm.'word'
: Đã đạt đến giới hạn từ. Sử dụngevent.charIndex
để xác định lời nói hiện tại vị trí.'sentence'
: Đã đạt đến giới hạn của câu. Sử dụngevent.charIndex
để xác định thời điểm hiện tại vị trí lời nói.'marker'
: Đã đạt đến một điểm đánh dấu SSML. Sử dụngevent.charIndex
để xác định lời nói hiện tại vị trí.'end'
: Công cụ đã đọc xong cách phát âm.'error'
: Đã xảy ra lỗi cụ thể đối với công cụ và không thể đọc lời nói này. Chuyển thêm trongevent.errorMessage
.
Công cụ chuyển lời nói không gửi các sự kiện 'interrupted'
và 'cancelled'
; chúng được tạo
tự động bằng Chrome.
Ứng dụng chuyển văn bản sang lời nói có thể nhận 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ả dưới đây.
Xử lý sự kiện lời nói
Để tạo giọng nói theo yêu cầu của ứng dụng, tiện ích của bạn phải đăng ký người nghe cho cả hai
onSpeak
và onStop
, chẳng hạn như:
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 tới tiện ích hay không sẽ chỉ dựa trên
liệu 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ý
cho onSpeak
và onStop
. Nói cách khác, không có cách nào để tiện ích nhận được
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 của công cụ chuyển văn bản sang lời nói. Đoạn mã phải có độ dài chính xác audioStreamOptions.bufferSize và được mã hoá là đơn âm, tại audioStreamOptions.sampleRate và dưới dạng pcm tuyến tính, số thực 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 khi văn bản được đọc.
AudioStreamOptions
Chứa định dạng luồng âm thanh mà công cụ dự kiến sẽ 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.
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
Không được 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 giọng nói tổng hợp.
-
ngôn ngữ
chuỗi không bắt buộc
Ngôn ngữ dùng để tổng hợp, dưới dạng language-region. Ví dụ: "en", "en-US", "en-GB", "zh-CN".
-
đề cử
số không bắt buộc
Cao độ nói nằm trong khoảng từ 0 đến 2, với 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 vào khoảng 180 đến 220 từ mỗi phút. 2.0 nhanh gấp đôi, và 0.5 nhanh bằng một nửa. Giá trị này được đảm bảo trong khoảng từ 0,1 đến 10,0. Khi một giọng nói không hỗ trợ đầy đủ các mức giá này, đừng trả về lỗi. Thay vào đó, hãy cắt tốc độ theo phạm vi mà giọng nói hỗ trợ.
-
voiceName
chuỗi không bắt buộc
Tên giọng nói để sử dụng cho quá trình tổng hợp.
-
thể tích
số không bắt buộc
Âm lượng nói trong khoảng từ 0 đến 1, với 0 là thấp nhất và 1 là cao nhất, với giá trị mặc định là 1.0.
VoiceGender
Giới tính không được dùng nữa và sẽ bị bỏ qua.
Enum
"male"
"female"
Phương thức
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 hiện có để tổng hợp giọng nói.
Sự kiện
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Không bắt buộc: Nếu hỗ trợ sự kiện tạm dừng, thì một công cụ sẽ tạm dừng cách đọc hiện tại (nếu có) cho đến khi nhận được sự kiện tiếp tục hoặc dừng sự kiện. Xin lưu ý rằng sự kiện dừng cũng phải xoá trạng thái bị tạm dừng.
Tham số
-
số gọi lại
hàm
Tham số
callback
sẽ 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 đọc cách phát âm hiện tại, nếu có. Xin lưu ý rằng sự kiện dừng cũng phải xoá trạng thái bị tạm dừng.
Tham số
-
số gọi lại
hàm
Tham số
callback
sẽ có dạng như sau:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Được gọi khi người dùng 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.
Tham số
-
số gọi lại
hàm
Tham số
callback
sẽ có dạng như sau:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
cách phát âm
string
-
tùy chọn
-
sendTtsEvent
hàm
Tham số
sendTtsEvent
sẽ 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 nói này.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Được gọi khi người dùng 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.onNói ở chỗ Chrome cung cấp dịch vụ phát âm thanh và xử lý việc điều phối các sự kiện tts.
Tham số
-
số gọi lại
hàm
Tham số
callback
sẽ có dạng như sau:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
cách phát âm
string
-
tùy chọn
-
audioStreamOptions
-
sendTtsAudio
hàm
Tham số
sendTtsAudio
sẽ có 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ố
sendError
sẽ có dạng như sau:(errorMessage?: string) => void
-
errorMessage
chuỗi không bắt buộc
Chuỗi ký tự mô tả lỗi.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Được kích hoạt khi có cuộc gọi đến tts.stop và tiện ích này có thể đang trong quá trình nói. Nếu một tiện ích nhận được một lệnh gọi đến onStop và tiện ích đã dừng nói, thì tiện ích đó sẽ không làm gì cả (không gây ra lỗi). Nếu lời nói ở 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ố
-
số gọi lại
hàm
Tham số
callback
sẽ có dạng như sau:() => void