refresh date: 2026-09-25 robots: noindex
Описание
Используйте chrome.ttsEngine API, чтобы реализовать систему синтеза речи с помощью расширения. Если расширение зарегистрировано с помощью этого API, оно будет получать события, содержащие фразу для озвучивания и другие параметры, когда любое расширение или приложение Chrome использует API tts для генерации речи. Затем расширение может использовать любую доступную веб-технологию для синтеза и вывода речи, а также отправлять события обратно в вызывающую функцию, чтобы сообщить о статусе.
Разрешения
ttsEngineОбзор
Расширение может зарегистрироваться как речевой движок. Это позволяет перехватывать некоторые или все вызовы таких функций, как tts.speak и tts.stop, и предоставлять альтернативную реализацию.
Расширения могут использовать любые доступные веб-технологии для воспроизведения речи, включая потоковое аудио с сервера и аудио HTML5. Расширение может даже выполнять другие действия с высказываниями, например отображать субтитры во всплывающем окне или отправлять их в виде сообщений журнала на удаленный сервер.
Манифест
Чтобы реализовать синтезатор речи, расширение должно объявить разрешение 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
Параметры, содержащие аудио буфер и связанные данные.
Свойства
-
audioBuffer
ArrayBuffer
Аудиобуфер из системы синтеза речи. Длина должна быть точно равна audioStreamOptions.bufferSize, а кодировка – моно, с частотой дискретизации audioStreamOptions.sampleRate и линейной импульсно-кодовой модуляцией, 32-битное число с плавающей запятой со знаком, то есть тип Float32Array в JavaScript.
-
charIndex
number (необязательно)
Индекс символа, связанный с этим аудио буфером.
-
isLastBuffer
Логическое значение (необязательно)
True, если этот аудио буфер является последним для произносимого текста.
AudioStreamOptions
Содержит формат аудиопотока, который должен быть создан движком.
Свойства
-
bufferSize
число
Количество выборок в аудио буфере.
-
sampleRate
число
Ожидаемая частота дискретизации в аудио буфере.
LanguageInstallStatus
Статус установки голоса.
Перечисление
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
Статус установки языка.
Свойства
-
ошибка
Строка (необязательно)
Подробные сведения о сбоях при установке. Заполняется, если не удалось установить язык.
-
installStatus
Статус установки.
-
lang
string
Строка языка в формате "код языка-код региона", где код региона может быть опущен. Примеры: en, en-AU, zh-CH.
LanguageUninstallOptions
Варианты удаления определенного языка.
Свойства
-
uninstallImmediately
Логическое значение
True, если клиент TTS хочет немедленно удалить язык. Движок может выбрать, удалять ли язык и когда это делать, на основе этого параметра и информации о запрашивающей стороне. Если задано значение False, для определения времени удаления могут использоваться другие критерии, например недавнее использование.
SpeakOptions
Параметры, заданные для метода tts.speak().
Свойства
-
gender
VoiceGender необязательный
Устарело начиная с Chrome 92Пол больше не поддерживается и будет игнорироваться.
Пол голоса для синтезированной речи.
-
lang
Строка (необязательно)
Язык, который будет использоваться для синтеза, в формате язык-регион. Примеры: "en", "en-US", "en-GB", "zh-CN".
-
питч
number (необязательно)
Высота голоса от 0 до 2 включительно, где 0 – самый низкий, а 2 – самый высокий. Значение 1,0 соответствует высоте тона по умолчанию.
-
скорость реакции
number (необязательно)
Скорость речи относительно скорости по умолчанию для этого голоса. По умолчанию установлена скорость 1,0, что соответствует примерно 180–220 словам в минуту. 2.0 – в два раза быстрее, а 0.5 – в два раза медленнее. Значение должно быть в диапазоне от 0,1 до 10,0 включительно. Если голос не поддерживает весь диапазон скоростей, не возвращайте ошибку. Вместо этого ограничьте скорость диапазоном, который поддерживает голос.
-
voiceName
Строка (необязательно)
Название голоса, который будет использоваться для синтеза.
-
громкость
number (необязательно)
Громкость речи от 0 до 1 включительно, где 0 – самая низкая, а 1 – самая высокая.По умолчанию используется значение 1,0.
TtsClient
Идентификатор клиента, запрашивающего статус.
Свойства
-
id
string
Клиент, отправляющий запрос на управление языками. Для расширения это уникальный идентификатор расширения. Для функций Chrome это человекочитаемое название функции.
-
source
Тип отправителя запроса.
TtsClientSource
Тип отправителя запроса.
Перечисление
"chromefeature"
"extension"
VoiceGender
Пол больше не поддерживается и будет игнорироваться.
Перечисление
"male"
"female"
Методы
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Вызывается движком при попытке установить или удалить язык. Также вызывается в ответ на запрос статуса от клиента. При установке или удалении голоса движок также должен вызывать ttsEngine.updateVoices для регистрации голоса.
Параметры
-
статус
Статус установки языка.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Вызывается движком для обновления списка голосов. Этот список переопределяет все голоса, объявленные в манифесте расширения.
Параметры
-
Голоса
TtsVoice[]
Массив объектов
tts.TtsVoice, представляющих доступные голоса для синтеза речи.
События
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Срабатывает, когда клиент TTS запрашивает установку нового языка. Движок должен попытаться скачать и установить язык, а затем вызвать ttsEngine.updateLanguage с результатом. В случае успеха движок также должен вызвать ttsEngine.updateVoices, чтобы зарегистрировать новые доступные голоса.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string) => void
-
Отправитель запроса
-
lang
string
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Срабатывает, когда клиент TTS запрашивает статус установки языка.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string) => void
-
Отправитель запроса
-
lang
string
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Если движок поддерживает событие паузы, он должен приостановить текущее высказывание, пока не получит событие возобновления или остановки. Обратите внимание, что событие остановки также должно отменять состояние паузы.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Необязательно. Если движок поддерживает событие паузы, он также должен поддерживать событие возобновления, чтобы продолжить воспроизведение текущего высказывания, если оно есть. Обратите внимание, что событие остановки также должно отменять состояние паузы.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Вызывается, когда пользователь вызывает tts.speak() и один из голосов из манифеста этого расширения первым соответствует объекту options.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
высказывание
string
-
Параметры
-
sendTtsEvent
function
Параметр
sendTtsEventвыглядит следующим образом:(event: tts.TtsEvent) => void
-
event
Событие от системы синтеза речи, указывающее на статус этого высказывания.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Вызывается, когда пользователь вызывает tts.speak() и один из голосов из манифеста этого расширения первым соответствует объекту options. Отличается от ttsEngine.onSpeak тем, что Chrome предоставляет сервисы воспроизведения аудио и обрабатывает отправку событий TTS.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
высказывание
string
-
Параметры
-
audioStreamOptions
-
sendTtsAudio
function
Параметр
sendTtsAudioвыглядит следующим образом:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Параметры, содержащие аудио буфер и связанные данные.
-
-
sendError
function
Chrome 94 и более поздних версий;Параметр
sendErrorвыглядит следующим образом:(errorMessage?: string) => void
-
errorMessage
Строка (необязательно)
Строка с описанием ошибки.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Срабатывает при вызове tts.stop, когда расширение может находиться в процессе воспроизведения речи. Если расширение получает вызов onStop, когда речь уже остановлена, оно не должно ничего делать (не должно вызывать ошибку). Если речь приостановлена, это действие должно отменить приостановку.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Срабатывает, когда клиент TTS указывает, что язык больше не нужен.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
Отправитель запроса
-
lang
string
-
uninstallOptions
-