Описание
Используйте 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);
}
}
);
Обратный вызов возвращается сразу же, прежде чем движок начал генерировать речь. Цель обратного вызова — предупредить вас о синтаксических ошибках при использовании API TTS, а не перехватить все возможные ошибки, которые могут возникнуть в процессе синтеза и вывода речи. Чтобы перехватить и эти ошибки, вам необходимо использовать прослушиватель событий, описанный в следующем разделе.
Слушайте события
Чтобы получить больше информации о состоянии синтезированной речи в режиме реального времени, передайте прослушиватель событий в параметрах 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
объекта параметров или используйте 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
представляет собой точку в тексте в начале следующего слова, которое нужно произнести. - сообщение об ошибке
строка необязательна
Описание ошибки, если тип события —
error
. - длина
номер необязательно
Хром 74+Длина следующей части высказывания. Например, в
word
событии это длина слова, которое будет произнесено следующим. Ему будет присвоено значение -1, если он не установлен речевым механизмом. - тип
Тип может быть
start
, как только речь началась,word
когда достигнута граница слова,sentence
когда достигнута граница предложения,marker
, когда достигнут элемент метки SSML,end
, когда достигнут конец высказывания,interrupted
когда высказывание останавливается или прерывается до достижения конца,cancelled
, когда оно удаляется из очереди до того, как оно было синтезировано, илиerror
, когда возникает любая другая ошибка. При приостановке речи событиеpause
генерируется, если определенное высказывание приостанавливается в середине, иresume
, если высказывание возобновляет речь. Обратите внимание, что события паузы и возобновления могут не сработать, если речь приостанавливается между высказываниями.
TtsOptions
Параметры речи для движка TTS.
Характеристики
- желаемые типы событий
строка[] необязательно
Типы событий TTS, которые вы хотите прослушать. Если оно отсутствует, могут быть отправлены все типы событий.
- ставить в очередь
логическое значение необязательно
Если это правда, то это высказывание ставится в очередь, если TTS уже выполняется. Если значение false (по умолчанию), прерывается любая текущая речь и очищается очередь речи перед произнесением нового высказывания.
- идентификатор расширения
строка необязательна
Идентификатор расширения используемого речевого механизма, если он известен.
- пол
Голосовой пол необязательно
Устарело с 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.
- требуемые типы событий
строка[] необязательно
Типы событий TTS, которые должен поддерживать голос.
- Голосовое имя
строка необязательна
Имя голоса, используемого для синтеза. Если пусто, используется любой доступный голос.
- объем
номер необязательно
Громкость речи от 0 до 1 включительно, где 0 — самый низкий, 1 — самый высокий, значение по умолчанию — 1,0.
- onEvent
аннулировать необязательно
Эта функция вызывается при событиях, которые происходят в процессе произнесения высказывания.
Функция
onEvent
выглядит так:(event: TtsEvent) => {...}
- событие
Событие обновления от механизма преобразования текста в речь, указывающее статус этого высказывания.
TtsVoice
Описание голоса, доступного для синтеза речи.
Характеристики
- типы событий
ТипСобытия [] необязательно
Все типы событий обратного вызова, которые может отправлять этот голос.
- идентификатор расширения
строка необязательна
Идентификатор расширения, предоставляющего этот голос.
- пол
Голосовой пол необязательно
Устарело с Chrome 70.Пол устарел и будет игнорироваться.
Пол этого голоса.
- язык
строка необязательна
Язык, который поддерживает этот голос, в форме язык - регион . Примеры: «en», «en-US», «en-GB», «zh-CN».
- удаленный
логическое значение необязательно
Если это правда, механизм синтеза является удаленным сетевым ресурсом. Это может привести к более высокой задержке и затратам на пропускную способность.
- Голосовое имя
строка необязательна
Имя голоса.
VoiceGender
Пол устарел и игнорируется.
Перечисление
"мужской" "женский"
Методы
getVoices()
chrome.tts.getVoices(
callback?: function,
)
Получает массив всех доступных голосов.
Параметры
- перезвонить
функция необязательна
Параметр
callback
выглядит так:(voices: TtsVoice[]) => void
- голоса
ТтсВойс []
Массив объектов
tts.TtsVoice
, представляющих доступные голоса для синтеза речи.
Возврат
Обещание< TtsVoice []>
Хром 101+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
Проверяет, говорит ли двигатель в данный момент. В Mac OS X результат верен всякий раз, когда говорит системный речевой движок, даже если речь не была инициирована Chrome.
Параметры
- перезвонить
функция необязательна
Параметр
callback
выглядит так:(speaking: boolean) => void
- Говорящий
логическое значение
Истинно, если говорить, ложно в противном случае.
Возврат
Обещание <логическое значение>
Хром 101+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
pause()
chrome.tts.pause()
Приостанавливает синтез речи, возможно, в середине высказывания. Призыв к возобновлению или остановке возобновит речь.
resume()
chrome.tts.resume()
Если речь была приостановлена, речь возобновляется с того места, где она была прервана.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
Произносит текст, используя механизм преобразования текста в речь.
Параметры
- высказывание
нить
Текст для произнесения: обычный текст или полный, правильно сформированный документ SSML. Речевые движки, не поддерживающие SSML, удаляют теги и озвучивают текст. Максимальная длина текста — 32 768 символов.
- параметры
TtsOptions необязательно
Речевые варианты.
- перезвонить
функция необязательна
Параметр
callback
выглядит так:() => void
Возврат
Обещание<void>
Хром 101+Промисы поддерживаются в Манифесте V3 и более поздних версиях, но обратные вызовы предусмотрены для обратной совместимости. Вы не можете использовать оба при одном вызове функции. Промис разрешается с тем же типом, который передается в обратный вызов.
stop()
chrome.tts.stop()
Останавливает любую текущую речь и очищает очередь всех ожидающих высказываний. Кроме того, если речь была приостановлена, теперь она будет возобновлена для следующего разговора.
События
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Вызывается, когда список tts.TtsVoice
, возвращаемый getVoices, изменился.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:() => void