Mô tả
Sử dụng API chrome.tts để phát chuyển văn bản sang lời nói (TTS). Xem thêm API ttsEngine có liên quan, cho phép tiện ích triển khai công cụ chuyển văn bản sang lời nói.
Chrome cung cấp tính năng này trên Windows (sử dụng SAPI 5), Mac OS X và ChromeOS, sử dụng khả năng tổng hợp lời nói do hệ điều hành cung cấp. Trên tất cả nền tảng, người dùng có thể cài đặt các tiện ích tự đăng ký làm công cụ chuyển văn bản sang lời nói thay thế.
Quyền
ttsKhái niệm và cách sử dụng
Tạo lời nói
Gọi speak() từ tiện ích của bạn để nói. Ví dụ:
browser.tts.speak('Hello, world.');
Để dừng nói ngay lập tức, bạn chỉ cần gọi stop():
browser.tts.stop();
Bạn có thể cung cấp các tuỳ chọn kiểm soát nhiều thuộc tính của lời nói, chẳng hạn như tốc độ, cao độ và nhiều thuộc tính khác. Ví dụ:
browser.tts.speak('Hello, world.', {'rate': 2.0});
Bạn cũng nên chỉ định ngôn ngữ để chọn một trình tổng hợp hỗ trợ ngôn ngữ đó (và phương ngữ theo vùng, nếu có).
browser.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Theo mặc định, mỗi lệnh gọi đến speak() sẽ làm gián đoạn mọi lời nói đang diễn ra và nói ngay lập tức. Để xác định xem một lệnh gọi có làm gián đoạn bất kỳ điều gì hay không, bạn có thể gọi isSpeaking(). Ngoài ra, bạn có thể sử dụng tuỳ chọn enqueue để thêm câu nói này vào hàng đợi các câu nói sẽ được phát khi câu nói hiện tại kết thúc.
browser.tts.speak('Speak this first.');
browser.tts.speak(
'Speak this next, when the first sentence is done.', {'enqueue': true});
Bạn có thể xem nội dung mô tả đầy đủ về tất cả các lựa chọn trong tts.speak(). Không phải công cụ chuyển văn bản sang lời nói nào cũng hỗ trợ tất cả các tuỳ chọn.
Để phát hiện lỗi và đảm bảo bạn đang gọi speak() đúng cách, hãy truyền một hàm callback không nhận đối số. Bên trong lệnh gọi lại, hãy kiểm tra runtime.lastError để xem có lỗi nào không.
browser.tts.speak(
utterance,
options,
function() {
if (browser.runtime.lastError) {
console.log('Error: ' + browser.runtime.lastError.message);
}
}
);
Lệnh gọi lại sẽ trả về ngay lập tức, trước khi công cụ bắt đầu tạo lời nói. Mục đích của lệnh gọi lại là cảnh báo cho bạn về lỗi cú pháp khi sử dụng TTS API, chứ không phải để phát hiện tất cả lỗi có thể xảy ra trong quá trình tổng hợp và xuất lời nói. Để phát hiện cả những lỗi này, bạn cần sử dụng trình nghe sự kiện, được mô tả trong phần tiếp theo.
Lắng nghe các sự kiện
Để biết thêm thông tin theo thời gian thực về trạng thái của lời nói được tổng hợp, hãy truyền một trình nghe sự kiện trong các tuỳ chọn đến speak(), như sau:
browser.tts.speak(
utterance,
{
onEvent: function(event) {
console.log('Event ' + event.type + ' at position ' + event.charIndex);
if (event.type == 'error') {
console.log('Error: ' + event.errorMessage);
}
}
},
callback
);
Mỗi sự kiện bao gồm một loại sự kiện, chỉ mục ký tự của lời nói hiện tại so với câu nói và đối với các sự kiện lỗi, một thông báo lỗi không bắt buộc. Sau đây là các loại sự kiện:
'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.'interrupted': Câu nói này bị gián đoạn do một lệnh gọi khác đếnspeak()hoặcstop()và chưa hoàn tất.'cancelled': Câu nói này đã được đưa vào hàng đợi, nhưng sau đó bị huỷ do một lệnh gọi khác đếnspeak()hoặcstop()và chưa bao giờ bắt đầ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. Hãy xem thông tin tạievent.errorMessageđể biết chi tiết.
Bốn trong số các loại sự kiện ('end', 'interrupted', 'cancelled' và 'error') là cuối cùng. Sau khi nhận được một trong những sự kiện đó, câu nói này sẽ không còn phát ra tiếng nữa và sẽ không nhận được sự kiện mới nào từ câu nói này.
Một số giọng nói có thể không hỗ trợ tất cả các loại sự kiện và một số giọng nói có thể không gửi bất kỳ sự kiện nào. Nếu bạn không muốn sử dụng giọng nói trừ phi giọng nói đó gửi một số sự kiện nhất định, hãy truyền các sự kiện bạn yêu cầu trong thành viên requiredEventTypes của đối tượng tuỳ chọn hoặc sử dụng getVoices() để chọn giọng nói đáp ứng yêu cầu của bạn. Cả hai đều được mô tả trong phần sau.
Mã đánh dấu SSML
Các câu nói được dùng trong API này có thể bao gồm mã đánh dấu sử dụng Ngôn ngữ đánh dấu tổng hợp lời nói (SSML). Nếu bạn sử dụng SSML, đối số đầu tiên cho speak() phải là một tài liệu SSML hoàn chỉnh có tiêu đề XML và thẻ <speak> cấp cao nhất, chứ không phải là một đoạn tài liệu.
Ví dụ:
browser.tts.speak(
'<?xml version="1.0"?>' +
'<speak>' +
' The <emphasis>second</emphasis> ' +
' word of this sentence was emphasized.' +
'</speak>'
);
Không phải công cụ lời nói nào cũng hỗ trợ tất cả thẻ SSML và một số công cụ có thể không hỗ trợ SSML, nhưng tất cả công cụ đều phải bỏ qua mọi SSML mà chúng không hỗ trợ và vẫn phải đọc văn bản cơ bản.
Chọn một giọng nói
Theo mặc định, Chrome sẽ chọn giọng nói phù hợp nhất cho mỗi câu nói bạn muốn phát, dựa trên ngôn ngữ. Trên hầu hết các hệ thống Windows, Mac OS X và ChromeOS, tính năng tổng hợp lời nói do hệ điều hành cung cấp có thể đọc bất kỳ văn bản nào bằng ít nhất một ngôn ngữ. Tuy nhiên, một số người dùng có thể có nhiều giọng nói, từ hệ điều hành và từ các công cụ chuyển văn bản sang lời nói do các tiện ích Chrome khác triển khai. Trong những trường hợp đó, bạn có thể triển khai mã tuỳ chỉnh để chọn giọng nói phù hợp hoặc hiển thị danh sách lựa chọn cho người dùng.
Để lấy danh sách tất cả giọng nói, hãy gọi getVoices() và truyền cho hàm này một hàm nhận một mảng đối tượng TtsVoice làm đối số:
browser.tts.getVoices(
function(voices) {
for (var i = 0; i < voices.length; i++) {
console.log('Voice ' + i + ':');
console.log(' name: ' + voices[i].voiceName);
console.log(' lang: ' + voices[i].lang);
console.log(' extension id: ' + voices[i].extensionId);
console.log(' event types: ' + voices[i].eventTypes);
}
}
);
Loại
EventType
Enum
"start"
"end"
"word"
"sentence"
"marker"
"interrupted"
"cancelled"
"error"
"pause"
"resume"
TtsEvent
Sự kiện từ công cụ TTS để thông báo trạng thái của một câu nói.
Thuộc tính
-
charIndex
number không bắt buộc
Chỉ mục của ký tự hiện tại trong câu nói. Đối với sự kiện từ, sự kiện sẽ kích hoạt ở cuối một từ và trước khi bắt đầu từ tiếp theo.
charIndexđại diện cho một điểm trong văn bản ở đầu từ tiếp theo sẽ được đọc. -
errorMessage
chuỗi không bắt buộc
Nội dung mô tả lỗi, nếu loại sự kiện là
error. -
chiều dài
number không bắt buộc
Chrome 74 trở lên trình duyệt.* kể từ Chrome 148Độ dài của phần tiếp theo trong câu nói. Ví dụ: trong sự kiện
word, đây là độ dài của từ sẽ được nói tiếp theo. Giá trị này sẽ được đặt thành -1 nếu không được đặt bởi công cụ lời nói. -
loại
Loại này có thể là
startngay khi lời nói bắt đầu,wordkhi đạt đến ranh giới từ,sentencekhi đạt đến ranh giới câu,markerkhi đạt đến phần tử đánh dấu SSML,endkhi đạt đến cuối câu nói,interruptedkhi câu nói bị dừng hoặc bị gián đoạn trước khi kết thúc,cancelledkhi câu nói bị xoá khỏi hàng đợi trước khi được tổng hợp hoặcerrorkhi xảy ra lỗi khác. Khi tạm dừng lời nói, sự kiệnpausesẽ được kích hoạt nếu một câu nói cụ thể bị tạm dừng ở giữa vàresumenếu một câu nói tiếp tục phát ra lời nói. Xin lưu ý rằng các sự kiện tạm dừng và tiếp tục có thể không kích hoạt nếu lời nói bị tạm dừng giữa các câu nói.
TtsOptions
Các lựa chọn về lời nói cho công cụ TTS.
Thuộc tính
-
desiredEventTypes
string[] không bắt buộc
Các loại sự kiện TTS mà bạn muốn nghe. Nếu thiếu, tất cả các loại sự kiện có thể được gửi.
-
thêm vào hàng đợi
boolean không bắt buộc
Nếu đúng, hãy đưa câu nói này vào hàng đợi nếu TTS đang diễn ra. Nếu là false (mặc định), thì sẽ làm gián đoạn mọi lời nói hiện tại và xoá hàng đợi lời nói trước khi nói câu mới này.
-
extensionId
chuỗi không bắt buộc
Mã tiện ích của công cụ chuyển văn bản sang lời nói cần sử dụng, nếu biết.
-
gender
VoiceGender không bắt buộc
Ngừng sử dụng kể từ Chrome 77Giớ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.
-
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ị dưới 0,1 hoặc trên 10,0 bị nghiêm cấm, nhưng nhiều giọng nói sẽ hạn chế hơn nữa tốc độ tối thiểu và tối đa. Ví dụ: một giọng nói cụ thể có thể không thực sự nói nhanh hơn 3 lần bình thường ngay cả khi bạn chỉ định giá trị lớn hơn 3.0.
-
requiredEventTypes
string[] không bắt buộc
Các loại sự kiện TTS mà giọng nói phả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. Nếu để trống, hệ thống sẽ sử dụng bất kỳ giọng nói nào có sẵn.
-
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.
-
onEvent
không bắt buộc
Hàm này được gọi với các sự kiện xảy ra trong quá trình nói câu nói.
Hàm
onEventcó dạng như sau:(event: TtsEvent) => {...}
-
sự kiện
Sự kiện cập nhật 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.
-
TtsVoice
Nội dung mô tả về giọng nói có sẵn để tổng hợp lời nói.
Thuộc tính
-
eventTypes
EventType[] không bắt buộc
Tất cả các loại sự kiện gọi lại mà giọng nói này có thể gửi.
-
extensionId
chuỗi không bắt buộc
Mã của tiện ích cung cấp giọng nói này.
-
gender
VoiceGender không bắt buộc
Ngừng sử dụng kể từ Chrome 70Giớ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 này.
-
lang
chuỗi không bắt buộc
Ngôn ngữ mà giọng nói này hỗ trợ, ở dạng ngôn ngữ-khu vực. Ví dụ: "en", "en-US", "en-GB", "zh-CN".
-
từ xa
boolean không bắt buộc
Nếu đúng, công cụ tổng hợp là một tài nguyên mạng từ xa. Điều này có thể làm tăng độ trễ và phát sinh chi phí băng thông.
-
voiceName
chuỗi không bắt buộc
Tên của giọng nói.
VoiceGender
Giới tính không được dùng nữa và bị bỏ qua.
Enum
"male"
"female"
Phương thức
Giá trị trả về
-
<TtsVoice[]> hứa hẹn
Chrome 101 trở lên trình duyệt.* kể từ Chrome 148
isSpeaking()
browser.tts.isSpeaking(): Promise<boolean>
Kiểm tra xem công cụ hiện có đang nói hay không. Trên Mac OS X, kết quả là true bất cứ khi nào công cụ lời nói của hệ thống đang nói, ngay cả khi lời nói không phải do Chrome khởi tạo.
Giá trị trả về
-
Promise<boolean>
Chrome 101 trở lên trình duyệt.* kể từ Chrome 148
pause()
browser.tts.pause(): void
Tạm dừng quá trình tổng hợp lời nói, có thể là giữa chừng. Lệnh tiếp tục hoặc dừng sẽ huỷ tạm dừng giọng nói.
resume()
browser.tts.resume(): void
Nếu lời nói bị tạm dừng, hãy tiếp tục nói từ chỗ bị gián đoạn.
speak()
browser.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
Đọc văn bản bằng công cụ chuyển văn bản sang lời nói.
Thông số
-
câu nói
chuỗi
Văn bản cần đọc, có thể là văn bản thuần túy hoặc một tài liệu SSML hoàn chỉnh, đúng định dạng. Công cụ chuyển văn bản sang lời nói không hỗ trợ SSML sẽ loại bỏ các thẻ và đọc văn bản. Độ dài tối đa của văn bản là 32.768 ký tự.
-
tùy chọn
TtsOptions không bắt buộc
Các lựa chọn về lời nói.
Giá trị trả về
-
Promise<void>
Chrome 101 trở lên trình duyệt.* kể từ Chrome 148Giải quyết ngay lập tức, trước khi lời nói kết thúc. Nếu xảy ra lỗi, lời hứa sẽ bị từ chối. Sử dụng options.onEvent để nhận ý kiến phản hồi chi tiết hơn.
stop()
browser.tts.stop(): void
Dừng mọi lời nói hiện tại và xoá hàng đợi của mọi lời nói đang chờ xử lý. Ngoài ra, nếu tính năng chuyển văn bản sang lời nói bị tạm dừng, thì tính năng này sẽ được tiếp tục cho lệnh gọi tiếp theo để nói.
Sự kiện
onVoicesChanged
browser.tts.onVoicesChanged.addListener(
callback: function,
)
Được gọi khi danh sách tts.TtsVoice mà getVoices trả về đã thay đổi.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:() => void