chrome.ttsEngine

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.speaktts.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ụng event.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ụng event.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ụng event.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 trong event.errorMessage.

Công cụ chuyển lời nói không gửi các sự kiện 'interrupted''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 onSpeakonStop, 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 onSpeakonStop. 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

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

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

    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

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 được 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.

  • 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

Chrome 54 trở lên Không dùng nữa kể từ Chrome 70

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

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

      Tham 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