Описание
Используйте 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 , задаются в формате camel case: например, 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
Параметры, содержащие аудиобуфер и связанные с ним данные.
Характеристики
- аудиобуфер
ArrayBuffer
Аудиобуфер из механизма преобразования текста в речь. Он должен иметь длину, точную равные audioStreamOptions.bufferSize, и быть закодирован как моно, с частотой дискретизации audioStreamOptions.sampleRate, а также как линейный PCM, 32-битное знаковое число с плавающей запятой, т.е. тип Float32Array в JavaScript.
- charIndex
число необязательно
Индекс символов, связанный с этим аудиобуфером.
- isLastBuffer
логический необязательный
Возвращает true, если этот аудиобуфер является последним для воспроизводимого текста.
AudioStreamOptions
Содержит формат аудиопотока, который, как ожидается, будет создан движком.
Характеристики
- размер буфера
число
Количество сэмплов в аудиобуфере.
- sampleRate
число
Ожидаемая частота дискретизации в аудиобуфере.
LanguageInstallStatus
The install status of a voice.
Перечисление
"неУстановлено" "установка" "установлено" "неуспешный"
LanguageStatus
Статус установки языка.
Характеристики
- ошибка
строка необязательный
Подробная информация о сбоях установки. Заполняется необязательно, если не удалось установить язык.
- installStatus
Installation status.
- язык
нить
Языковая строка в формате код языка - код региона, где регион может быть опущен. Примеры: en, en-AU, zh-CH.
LanguageUninstallOptions
Варианты удаления выбранного языка.
Характеристики
- uninstallImmediately
логический
Значение true, если клиент TTS хочет, чтобы язык был немедленно удален. Движок может выбирать, удалять ли язык и когда это делать, на основе этого параметра и информации от запрашивающей стороны. Если значение false, он может использовать другие критерии, такие как недавнее использование, чтобы определить, когда следует удалить язык.
SpeakOptions
Параметры, указанные для метода tts.speak().
Характеристики
- пол
VoiceGender optional
Устарело с версии Chrome 92.Gender is deprecated and will be ignored.
Гендер голоса в синтезированной речи.
- язык
строка необязательный
Язык, используемый для синтеза, в формате язык - регион . Примеры: '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 включительно. Если голос не поддерживает весь этот диапазон скоростей, не следует возвращать ошибку. Вместо этого скорость ограничивается диапазоном, поддерживаемым голосом.
- voiceName
строка необязательный
Название голоса, используемого для синтеза.
- объем
число необязательно
Громкость речи от 0 до 1 включительно, где 0 — минимальное значение, а 1 — максимальное, значение по умолчанию — 1,0.
TtsClient
Идентификатор статуса запроса клиента.
Характеристики
- идентификатор
нить
Клиент отправляет запрос на управление языком. Для расширения это уникальный идентификатор расширения. Для функций Chrome это удобочитаемое название функции.
- источник
Тип заявителя.
TtsClientSource
Type of requestor.
Перечисление
"chromefeature" "расширение"
VoiceGender
Gender is deprecated and will be ignored.
Перечисление
"мужской" "женский"
Методы
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Вызывается движком при попытке установки языка и при его удалении. Также вызывается в ответ на запрос состояния от клиента. При установке или удалении голоса движок также должен вызывать ttsEngine.updateVoices для регистрации голоса.
Параметры
- статус
The install status of the language.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Вызывается движком для обновления списка голосов. Этот список переопределяет любые голоса, указанные в манифесте данного расширения.
Параметры
- голоса
TtsVoice []
Массив объектов
tts.TtsVoice, представляющих доступные голоса для синтеза речи.
События
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Этот вызов срабатывает, когда клиент TTS запрашивает установку нового языка. Движок должен попытаться загрузить и установить язык, а затем вызвать метод ttsEngine.updateLanguage с результатом. В случае успеха движок также должен вызвать метод ttsEngine.updateVoices для регистрации новых доступных голосов.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string) => void
- запрашивающий
- язык
нить
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Событие срабатывает, когда клиент TTS запрашивает статус установки языка.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string) => void
- запрашивающий
- язык
нить
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() и один из голосов из манифеста этого расширения первым соответствует объекту options.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
- высказывание
нить
- параметры
- sendTtsEvent
функция
The
sendTtsEventparameter looks like:(event: tts.TtsEvent) => void
- событие
Событие от системы преобразования текста в речь, указывающее на статус данного высказывания.
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Вызывается, когда пользователь обращается к tts.speak(), и один из голосов из манифеста этого расширения первым соответствует объекту options. Отличается от ttsEngine.onSpeak тем, что Chrome предоставляет сервисы воспроизведения звука и обрабатывает отправку событий TTS.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
- высказывание
нить
- параметры
- audioStreamOptions
- sendTtsAudio
функция
The
sendTtsAudioparameter looks like:(audioBufferParams: AudioBuffer) => void
- audioBufferParams
Параметры, содержащие аудиобуфер и связанные с ним данные.
- sendError
функция
Chrome 94+The
sendErrorparameter looks like:(errorMessage?: string) => void
- errorMessage
строка необязательный
A string describing the error.
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Событие срабатывает при вызове функции tts.stop, если данный добавочный номер находится в процессе речи. Если добавочный номер получает вызов функции onStop, а речь уже остановлена, ничего не должно происходить (ошибка не должна возникать). Если речь находится в состоянии паузы, это событие должно отменить состояние паузы.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Событие срабатывает, когда клиент синтеза речи указывает, что данный язык больше не требуется.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
- запрашивающий
- язык
нить
- uninstallOptions