Описание
Используйте 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
Параметры, содержащие аудиобуфер и связанные с ним данные.
Характеристики
- аудиобуфер
МассивБуфер
Аудиобуфер из механизма преобразования текста в речь. Он должен иметь длину ровно audioStreamOptions.bufferSize и закодироваться как моно, в audioStreamOptions.sampleRate, и как линейный PCM, 32-битный знак с плавающей запятой, т. е. тип Float32Array в javascript.
- charIndex
номер необязательно
Индекс символа, связанный с этим аудиобуфером.
- isLastBuffer
логическое значение необязательно
Истинно, если этот аудиобуфер является последним для произнесенного текста.
AudioStreamOptions
Содержит формат аудиопотока, который, как ожидается, будет создан механизмом.
Характеристики
- размер буфера
число
Количество сэмплов в аудиобуфере.
- SampleRate
число
Ожидаемая частота дискретизации в аудиобуфере.
SpeakOptions
Параметры, указанные для метода 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
Пол устарел и будет игнорироваться.
Перечисление
"мужской" "женский"
Методы
updateVoices()
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
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