Описание
Используйте API chrome.tts
для воспроизведения синтезированной речи (TTS). См. также API ttsEngine
, которое позволяет реализовать речевой движок через расширение.
Chrome предоставляет эту возможность в Windows (с использованием SAPI 5), Mac OS X и ChromeOS, используя возможности синтеза речи, предоставляемые операционной системой. На всех платформах пользователь может установить расширения, которые регистрируются как альтернативные речевые движки.
Разрешения
tts
Концепции и использование
Генерировать речь
Вызовите функцию speak()
из вашего расширения, чтобы озвучить сообщение. Например:
chrome.tts.speak('Hello, world.');
Чтобы немедленно прекратить говорить, просто вызовите stop()
:
chrome.tts.stop();
Вы можете предоставить параметры, управляющие различными свойствами речи, такими как её темп, тон и т. д. Например:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Также рекомендуется указать язык, чтобы был выбран синтезатор, поддерживающий этот язык (и региональный диалект, если применимо).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
По умолчанию каждый вызов speak()
прерывает текущую речь и немедленно произносит её. Чтобы определить, прерывает ли вызов что-либо, можно вызвать isSpeaking()
. Кроме того, можно использовать параметр enqueue
, чтобы добавить данное высказывание в очередь высказываний, которые будут произнесены после завершения текущего.
chrome.tts.speak('Speak this first.'); chrome.tts.speak( 'Speak this next, when the first sentence is done.', {'enqueue': true});
Полное описание всех параметров можно найти в разделе tts.speak()
. Не все речевые движки поддерживают все параметры.
Чтобы перехватывать ошибки и убедиться, что функция speak()
вызывается корректно, передайте функцию обратного вызова без аргументов. Внутри функции обратного вызова проверьте runtime.lastError
на наличие ошибок.
chrome.tts.speak( utterance, options, function() { if (chrome.runtime.lastError) { console.log('Error: ' + chrome.runtime.lastError.message); } } );
Функция обратного вызова возвращается немедленно, до того, как движок начал генерировать речь. Цель функции обратного вызова — предупредить вас о синтаксических ошибках при использовании TTS API, а не перехватывать все возможные ошибки, которые могут возникнуть в процессе синтеза и вывода речи. Для перехвата этих ошибок необходимо использовать прослушиватель событий, описанный в следующем разделе.
Слушайте события
Чтобы получить больше информации в режиме реального времени о состоянии синтезированной речи, передайте прослушиватель событий в параметрах speak()
, например:
chrome.tts.speak( utterance, { onEvent: function(event) { console.log('Event ' + event.type + ' at position ' + event.charIndex); if (event.type == 'error') { console.log('Error: ' + event.errorMessage); } } }, callback );
Каждое событие включает тип события, индекс символа текущей речи относительно высказывания, а для событий с ошибками — необязательное сообщение об ошибке. Типы событий:
-
'start'
: двигатель начал произносить фразу. -
'word'
: достигнута граница слова. Используйтеevent.charIndex
для определения текущей позиции речи. -
'sentence'
: достигнута граница предложения. Используйтеevent.charIndex
для определения текущей позиции речи. -
'marker'
: Достигнут маркер SSML. Используйтеevent.charIndex
для определения текущей позиции речи. -
'end'
: Движок завершил произношение фразы. -
'interrupted'
: это высказывание было прервано другим вызовомspeak()
илиstop()
и не было завершено. -
'cancelled'
: это высказывание было поставлено в очередь, но затем отменено другим вызовомspeak()
илиstop()
и так и не началось. -
'error'
: произошла ошибка, связанная с движком, и это высказывание невозможно произнести. Подробности см. вevent.errorMessage
.
Четыре типа событий — 'end'
, 'interrupted'
, 'cancelled'
и 'error'
являются окончательными . После получения одного из этих событий данное высказывание больше не будет звучать, и новые события из этого высказывания не будут получены.
Некоторые голоса могут поддерживать не все типы событий, а некоторые могут вообще не отправлять события. Если вы не хотите использовать голос, если он не отправляет определённые события, передайте необходимые события в элемент requiredEventTypes
объекта options или используйте getVoices()
, чтобы выбрать голос, соответствующий вашим требованиям. Оба варианта описаны ниже.
SSML-разметка
Высказывания, используемые в этом API, могут включать разметку с использованием языка разметки синтеза речи (SSML) . При использовании SSML первым аргументом функции speak()
должен быть полный документ SSML с XML-заголовком и тегом <speak>
верхнего уровня, а не фрагмент документа.
Например:
chrome.tts.speak( '<?xml version="1.0"?>' + '<speak>' + ' The <emphasis>second</emphasis> ' + ' word of this sentence was emphasized.' + '</speak>' );
Не все речевые движки поддерживают все теги SSML, а некоторые могут вообще не поддерживать SSML, но все движки должны игнорировать любой SSML, который они не поддерживают, и продолжать озвучивать базовый текст.
Выберите голос
По умолчанию Chrome выбирает наиболее подходящий голос для каждого высказывания, которое вы хотите произнести, в зависимости от языка. В большинстве систем Windows, Mac OS X и ChromeOS функция синтеза речи, предоставляемая операционной системой, должна быть способна озвучивать любой текст как минимум на одном языке. Однако некоторым пользователям может быть доступно множество голосов, как из их операционной системы, так и из речевых движков, реализованных в других расширениях Chrome. В таких случаях вы можете реализовать собственный код для выбора подходящего голоса или предоставить пользователю список вариантов.
Чтобы получить список всех голосов, вызовите getVoices()
и передайте ему функцию, которая получает массив объектов TtsVoice
в качестве аргумента:
chrome.tts.getVoices( function(voices) { for (var i = 0; i < voices.length; i++) { console.log('Voice ' + i + ':'); console.log(' name: ' + voices[i].voiceName); console.log(' lang: ' + voices[i].lang); console.log(' extension id: ' + voices[i].extensionId); console.log(' event types: ' + voices[i].eventTypes); } } );
Типы
EventType
Перечисление
"начинать" "конец" "слово" "предложение" "маркер" "прерванный" "отменено" "ошибка" "пауза" "резюме"
TtsEvent
Событие от движка TTS для сообщения статуса высказывания.
Характеристики
- charIndex
номер необязательно
Индекс текущего символа в фразе. Для событий слов событие срабатывает в конце одного слова и перед началом следующего.
charIndex
представляет собой точку в тексте в начале следующего слова, которое будет произнесено. - errorMessage
строка необязательная
Описание ошибки, если тип события —
error
. - длина
номер необязательно
Хром 74+Длина следующей части фразы. Например, в событии
word
это длина слова, которое будет произнесено следующим. Если речевой движок не установил её, она будет равна -1. - тип
Типом может быть:
start
(начало речи),word
– при достижении границы слова,sentence
– при достижении границы предложения,marker
при достижении элемента метки SSML, «end
– при достижении конца речевого высказывания,interrupted
прерывание) – при остановке или прерывании речевого высказывания до его завершения,cancelled
при удалении из очереди до синтеза илиerror
– при возникновении любой другой ошибки. При приостановке речи событиеpause
срабатывает, если речевое высказывание прерывается в середине, иresume
, если речевое высказывание возобновляется. Обратите внимание, что события «pause» и «review» могут не срабатывать, если речь прерывается между речевыми высказываниями.
TtsOptions
Параметры речи для движка TTS.
Характеристики
- desiredEventTypes
строка[] необязательная
Типы событий TTS, которые вам интересно прослушивать. Если они отсутствуют, могут быть отправлены все типы событий.
- ставить в очередь
логическое необязательное
Если задано значение true, добавляет данное высказывание в очередь, если синтез речи (TTS) уже выполняется. Если задано значение false (по умолчанию), прерывает текущее речевое сообщение и очищает очередь речевых сообщений перед произнесением нового высказывания.
- extensionId
строка необязательная
Идентификатор расширения используемого речевого движка, если он известен.
- пол
VoiceGender (пол голоса) необязательно
Не рекомендуется с версии Chrome 77Пол устарел и будет игнорироваться.
Пол голоса для синтезированной речи.
- язык
строка необязательная
Язык, используемый для синтеза, в формате «язык - регион» . Примеры: '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 строго запрещены, но многие голоса дополнительно ограничивают минимальную и максимальную скорость речи — например, конкретный голос может говорить не быстрее, чем в 3 раза быстрее обычного, даже если указано значение больше 3,0.
- requiredEventTypes
строка[] необязательная
Типы событий TTS, которые должен поддерживать голос.
- voiceName
строка необязательная
Имя голоса для синтеза. Если не указано, используется любой доступный голос.
- объем
номер необязательно
Громкость речи от 0 до 1 включительно, где 0 — самая низкая, а 1 — самая высокая, значение по умолчанию — 1,0.
- onEvent
необязательный
Эта функция вызывается при событиях, которые происходят в процессе произнесения высказывания.
Функция
onEvent
выглядит так:(event: TtsEvent) => {...}
- событие
Событие обновления от движка преобразования текста в речь, указывающее статус данного высказывания.
TtsVoice
Описание голоса, доступного для синтеза речи.
Характеристики
- типы событий
EventType [] необязательно
Все типы событий обратного вызова, которые этот голос способен отправлять.
- extensionId
строка необязательная
Идентификатор расширения, предоставляющего этот голос.
- пол
VoiceGender (пол голоса) необязательно
Не рекомендуется с Chrome 70Пол устарел и будет игнорироваться.
Пол этого голоса.
- язык
строка необязательная
Язык, поддерживаемый этим голосом, в формате «язык - регион» . Примеры: «en», «en-US», «en-GB», «zh-CN».
- удаленный
логическое необязательное
Если значение true, то механизм синтеза является удалённым сетевым ресурсом. Это может привести к более высокой задержке и, как следствие, к расходам на полосу пропускания.
- voiceName
строка необязательная
Имя голоса.
VoiceGender
Пол устарел и игнорируется.
Перечисление
"мужской" "женский"
Методы
Возврат
Обещание< TtsVoice []>
Хром 101+
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
Проверяет, воспроизводит ли движок речь в данный момент. В Mac OS X результат равен true, когда воспроизводится системный речевой движок, даже если речь не была инициирована Chrome.
Возврат
Обещание<логическое>
Хром 101+
pause()
chrome.tts.pause(): void
Приостанавливает синтез речи, возможно, в середине фразы. Призыв возобновить или остановить синтез речи возобновит её.
resume()
chrome.tts.resume(): void
Если речь была прервана, возобновляет ее с того места, где она остановилась.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
Озвучивает текст с помощью движка преобразования текста в речь.
Параметры
- высказывание
нить
Озвучиваемый текст: обычный текст или полный, правильно оформленный документ SSML. Речевые движки, не поддерживающие SSML, удаляют теги и озвучивают текст. Максимальная длина текста — 32 768 символов.
- параметры
TtsOptions необязательный
Варианты речи.
Возврат
Обещание<void>
Хром 101+
stop()
chrome.tts.stop(): void
Останавливает текущую речь и очищает очередь всех ожидающих высказываний. Кроме того, если речь была приостановлена, она будет возобновлена для следующего вызова.
События
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Вызывается, когда изменился список tts.TtsVoice
, который будет возвращен getVoices.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:() => void