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