chrome.ttsEngine

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()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ụng event.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ùng event.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ụng event.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 trong event.errorMessage.

Các sự kiện 'interrupted''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ả onSpeakonStop, 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 onSpeakonStop 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

Chrome 92 trở lên

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

Chrome 92 trở lên

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

Chrome 92 trở lên

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 92

    Giớ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

Chrome 54 trở lên Ngừng sử dụng kể từ Chrome 70

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 66 trở lên
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

    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 92 trở lên
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ên

      Tham 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