chrome.ttsEngine

Описание

Используйте API chrome.ttsEngine для реализации механизма преобразования текста в речь (TTS) с помощью расширения. Если ваше расширение регистрируется с использованием этого API, оно будет получать события, содержащие произносимое высказывание, и другие параметры, когда какое-либо расширение или приложение Chrome использует API tts для генерации речи. Затем ваше расширение может использовать любую доступную веб-технологию для синтеза и вывода речи, а также отправлять события обратно вызывающей функции, чтобы сообщить о состоянии.

Разрешения

ttsEngine

Концепции и использование

Расширение может зарегистрировать себя как речевой движок. Таким образом, он может перехватить некоторые или все вызовы таких функций, как tts.speak() и tts.stop() , и предоставить альтернативную реализацию. Расширения могут бесплатно использовать любую доступную веб-технологию для передачи речи, включая потоковое аудио с сервера, аудио HTML5. Расширение может даже делать что-то другое с высказываниями, например отображать субтитры во всплывающем окне или отправлять их в виде сообщений журнала на удаленный сервер.

Чтобы реализовать механизм TTS, расширение должно объявить разрешение «ttsEngine», а затем объявить все голоса, которые оно предоставляет, в манифесте расширения, например:

{
  "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
  }
}

Расширение может указать любое количество голосов.

Параметр voice_name является обязательным. Имя должно быть достаточно информативным, чтобы оно идентифицировало имя голоса и используемый движок. В том маловероятном случае, когда два расширения регистрируют голоса с одинаковым именем, клиент может указать идентификатор расширения, которое должно выполнить синтез.

Параметр lang не является обязательным, но настоятельно рекомендуется. Почти всегда голос может синтезировать речь только на одном языке. Когда движок поддерживает более одного языка, он может легко зарегистрировать отдельный голос для каждого языка. В редких случаях, когда один голос может обрабатывать более одного языка, проще всего просто перечислить два отдельных голоса и обрабатывать их, используя одну и ту же внутреннюю логику. Однако, если вы хотите создать голос, который будет обрабатывать высказывания на любом языке, исключите параметр lang из манифеста вашего расширения.

Наконец, параметр event_types необходим, если механизм может отправлять события для обновления клиента о ходе синтеза речи. Как минимум, настоятельно рекомендуется поддерживать тип события 'end' указывающий на завершение речи, иначе Chrome не сможет планировать высказывания в очереди.

После загрузки расширение может заменить список объявленных голосов, вызвав chrome.ttsEngine.updateVoices . (Обратите внимание, что параметры, используемые в программном вызове updateVoices , указаны в верблюжьем регистре: например, voiceName , в отличие от файла манифеста, который использует voice_name .)

Возможные типы событий, которые вы можете отправлять, соответствуют типам событий, которые получает метод speak() :

  • 'start' : Двигатель начал произносить высказывание.
  • 'word' : достигнута граница слова. Используйте event.charIndex , чтобы определить текущую позицию речи.
  • 'sentence' : достигнута граница предложения. Используйте event.charIndex , чтобы определить текущую позицию речи.
  • 'marker' : достигнут маркер SSML. Используйте event.charIndex , чтобы определить текущую позицию речи.
  • 'end' : двигатель закончил произнесение высказывания.
  • 'error' : произошла ошибка, связанная с движком, и произнести это сообщение невозможно. Передайте дополнительную информацию в event.errorMessage .

События 'interrupted' и 'cancelled' не отправляются речевым механизмом; они генерируются Chrome автоматически.

Клиенты преобразования текста в речь могут получить голосовую информацию из манифеста вашего расширения, вызвав tts.getVoices , при условии, что вы зарегистрировали прослушиватели речевых событий, как описано ниже.

Обработка речевых событий

Чтобы генерировать речь по запросу клиентов, ваше расширение должно зарегистрировать слушателей как для onSpeak , так и onStop , вот так:

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

Решение о том, отправлять ли данный речевой запрос расширению, основано исключительно на том, поддерживает ли расширение заданные голосовые параметры в своем манифесте и зарегистрировано ли прослушиватели для onSpeak и onStop . Другими словами, у расширения нет возможности получить речевой запрос и динамически решить, следует ли его обрабатывать.

Типы

AudioBuffer

Хром 92+

Параметры, содержащие аудиобуфер и связанные с ним данные.

Характеристики

  • аудиобуфер

    МассивБуфер

    Аудиобуфер из механизма преобразования текста в речь. Он должен иметь длину ровно audioStreamOptions.bufferSize и закодироваться как моно, в audioStreamOptions.sampleRate, и как линейный PCM, 32-битный знак с плавающей запятой, т. е. тип Float32Array в javascript.

  • charIndex

    номер необязательно

    Индекс символа, связанный с этим аудиобуфером.

  • isLastBuffer

    логическое значение необязательно

    Истинно, если этот аудиобуфер является последним для произнесенного текста.

AudioStreamOptions

Хром 92+

Содержит формат аудиопотока, который, как ожидается, будет создан механизмом.

Характеристики

  • размер буфера

    число

    Количество сэмплов в аудиобуфере.

  • SampleRate

    число

    Ожидаемая частота дискретизации в аудиобуфере.

SpeakOptions

Хром 92+

Параметры, указанные для метода tts.speak().

Характеристики

  • пол

    Голосовой пол необязательно

    Устарело с Chrome 92.

    Пол устарел и будет игнорироваться.

    Пол голоса для синтезированной речи.

  • язык

    строка необязательна

    Язык, который будет использоваться для синтеза, в форме язык - регион . Примеры: «en», «en-US», «en-GB», «zh-CN».

  • подача

    номер необязательно

    Высота речи от 0 до 2 включительно, где 0 — самый низкий, а 2 — самый высокий. 1.0 соответствует высоте этого голоса по умолчанию.

  • ставка

    номер необязательно

    Скорость речи относительно скорости речи по умолчанию для этого голоса. 1.0 — это скорость по умолчанию, обычно от 180 до 220 слов в минуту. 2.0 в два раза быстрее, а 0.5 в два раза быстрее. Это значение гарантированно находится в диапазоне от 0,1 до 10,0 включительно. Если голос не поддерживает этот полный диапазон скоростей, не возвращайте ошибку. Вместо этого сократите скорость до диапазона, поддерживаемого голосом.

  • Голосовое имя

    строка необязательна

    Имя голоса, используемого для синтеза.

  • объем

    номер необязательно

    Громкость речи от 0 до 1 включительно, где 0 — самый низкий, 1 — самый высокий, значение по умолчанию — 1,0.

VoiceGender

Chrome 54+ устарел с Chrome 70

Пол устарел и будет игнорироваться.

Перечисление

"мужской"

"женский"

Методы

updateVoices()

Хром 66+
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

Вызывается механизмом для обновления списка голосов. Этот список переопределяет любые голоса, объявленные в манифесте этого расширения.

Параметры

  • голоса

    Массив объектов tts.TtsVoice , представляющих доступные голоса для синтеза речи.

События

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

Необязательно: если механизм поддерживает событие паузы, он должен приостановить произнесение текущего высказывания, если таковое имеется, до тех пор, пока не получит событие возобновления или остановки. Обратите внимание, что событие остановки также должно очищать состояние паузы.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    () => void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

Необязательно: если движок поддерживает событие паузы, он также должен поддерживать событие возобновления, чтобы продолжить произнесение текущего высказывания, если таковое имеется. Обратите внимание, что событие остановки также должно очищать состояние паузы.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    () => void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

Вызывается, когда пользователь вызывает tts.speak() и один из голосов из манифеста этого расширения первым соответствует объекту параметров.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    (utterance: string, options: SpeakOptions, sendTtsEvent: function) => void

    • высказывание

      нить

    • параметры
    • sendTtsEvent

      функция

      Параметр sendTtsEvent выглядит так:

      (event: tts.TtsEvent) => void

      • событие

        Событие от преобразователя текста в речь, указывающее статус этого высказывания.

onSpeakWithAudioStream

Хром 92+
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Вызывается, когда пользователь вызывает tts.speak() и один из голосов из манифеста этого расширения первым соответствует объекту параметров. Отличается от ttsEngine.onSpeak тем, что Chrome предоставляет услуги воспроизведения аудио и обрабатывает отправку событий tts.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    (utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void

    • высказывание

      нить

    • параметры
    • параметры аудиострима
    • отправитьTtsAudio

      функция

      Параметр sendTtsAudio выглядит так:

      (audioBufferParams: AudioBuffer) => void

      • аудиобуферпарамс

        Параметры, содержащие аудиобуфер и связанные данные.

    • ошибка отправки

      функция

      Хром 94+

      Параметр sendError выглядит так:

      (errorMessage?: string) => void

      • сообщение об ошибке

        строка необязательна

        Строка, описывающая ошибку.

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

Вызывается, когда осуществляется вызов на tts.stop, и это расширение может находиться в процессе разговора. Если расширение получает вызов onStop и речь уже остановлена, оно не должно ничего делать (не выдавать ошибку). Если речь находится в состоянии паузы, это должно отменить состояние паузы.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    () => void