Nội dung 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 cách phát âm lời nói 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 giọng 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 giọng 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
ttsEngine
Khái niệm và cách sử dụng
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 làm vậy, ứng dụng này 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ế.
Các tiện ích có thể sử dụng miễn phí mọi công nghệ web hiện có để cung cấp giọng nói, bao gồm cả âm thanh truyền trực tuyến từ máy chủ, âm thanh HTML5. Thậm chí, tiện ích còn có thể thực hiện một thao tác khác với cách phát âm, chẳng hạn như hiển thị phụ đề trong cửa sổ bật lên hoặc gửi dưới dạng thông điệp nhật ký đến máy chủ từ xa.
Để 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
}
}
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 được tên 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 có thể chỉ định mã nhận dạng của tiện ích sẽ thực hiện việc tổng hợp.
Tham số lang
là không bắt buộc nhưng bạn nên tham gia. Hầu như mọi khi, một giọng nói cũng có thể tổng hợp
giọng nói chỉ 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, 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ý 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ằng bất kỳ ngôn ngữ nào, hãy loại bỏ tham số lang
khỏi tệp kê khai của tiện ích.
Cuối cùng, bạn cần nhập tham số event_types
nếu công cụ có thể gửi các sự kiện để cập nhật ứng dụng trong tiến trình tổng hợp giọng nói. Ở mức tối thiểu, bạn nên hỗ trợ loại sự kiện 'end'
để cho biết khi nào giọng nói hoàn tất, nếu không, Chrome không thể lên lịch các câu nói trong hàng đợi.
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 lập trình tới updateVoices
đều ở trong 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'
: Động cơ đã bắt đầu đọc giọng 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ủa câu. Dùngevent.charIndex
để xác định vị trí lời nói hiện tại.'marker'
: Đã đạt đến một điểm đánh dấu SSML. Sử dụngevent.charIndex
để xác định vị trí lời nói hiện tại.'end'
: Động cơ đã đọc xong câu nói.'error'
: Đã xảy ra lỗi riêng của công cụ nên không thể đọc cách nói này. Truyền thêm thông tin trongevent.errorMessage
.
Các sự kiện 'interrupted'
và 'cancelled'
không phải do công cụ chuyển văn bản sang lời nó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 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 thoạ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 tham số thoại nhất định trong tệp kê khai hay không và có đăng ký trình nghe cho onSpeak
và onStop
hay không. Nói cách khác, không có cách nào để tiện ích nhận được yêu cầu bằng giọng 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. Nó phải có độ dài chính xác là audioStreamOptions.bufferSize và được mã hoá dưới dạng mono, tại audioStreamOptions.sampleRate và dưới dạng pcm tuyến tính, độ chính xác đơn 32 bit có chữ ký, 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 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
number
Số lượng mẫu trong vùng đệm âm thanh.
-
sampleRate
number
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 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.
-
lang
chuỗi không bắt buộc
Ngôn ngữ dùng để tổng hợp, ở dạng ngôn ngữ-khu vực. Ví dụ: "en", "en-US", "en-GB", "zh-CN".
-
ném bóng
số không bắt buộc
Nói nhanh 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 cho 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 nhanh gấp đôi và 0, 5 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 một giọng nói không hỗ trợ phạm vi mức giá đầy đủ 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 của giọng nói cần sử dụng cho tổng hợp.
-
thể tích
số không bắt buộc
Âm lượng nói từ 0 đến 1, với 0 là thấp nhất và 1 là cao nhất, với mặc định là 1.0.
VoiceGender
Giới tính không được dùng nữa và sẽ bị bỏ qua.
Liệt kê
Phương thức
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Được 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 gồm 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ì công cụ sẽ tạm dừng câu hiện tại đang được đọc (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 phải xoá 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
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Không bắt buộc: nếu 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 phải xoá 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
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 từ 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 tùy 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ách 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 từ 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 tùy chọn. Điểm khác biệt so với ttsEngine.on Speak, đó là 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ố
-
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 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 nói. Nếu một tiện ích nhận được lệnh gọi đến onStop và giọng nói đã dừng lại, thì tiện ích đó sẽ không làm gì (không báo lỗi). Nếu giọng 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