chrome.tts

refresh date: 2026-09-25 robots: noindex

Описание

Используйте chrome.tts API для воспроизведения синтезированного преобразования текста в речь (TTS). Также ознакомьтесь с API ttsEngine, который позволяет расширению использовать речевой движок.

Разрешения

tts

Обзор

Chrome поддерживает озвучивание текста в Windows (с помощью SAPI 5), macOS и ChromeOS, используя возможности синтеза речи, предоставляемые операционной системой. На всех платформах пользователь может устанавливать расширения, которые регистрируются как альтернативные речевые движки.

Генерируем речь

Чтобы поговорить с 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

Chrome 54 и более поздних версий;

Перечисление

"start"

"end"

"word"

"sentence"

"marker"

"interrupted"

"cancelled"

"error"

"pause"

"resume"

TtsEvent

Событие от механизма TTS для сообщения о статусе высказывания.

Свойства

  • charIndex

    number (необязательно)

    Индекс текущего символа в высказывании. События, связанные со словами, активируются в конце одного слова и перед началом следующего. charIndex – это точка в тексте в начале следующего слова, которое будет произнесено.

  • errorMessage

    Строка (необязательно)

    Описание ошибки, если тип события – error.

  • длина

    number (необязательно)

    Chrome 74 и более поздних версий.

    Длина следующей части высказывания. Например, в событии word это длина слова, которое будет произнесено следующим. Если значение не задано системой синтеза речи, оно будет равно -1.

  • тип

    Тип может быть следующим: start – как только речь началась; word – когда достигнута граница слова; sentence – когда достигнута граница предложения; marker – когда достигнут элемент разметки SSML; end – когда достигнут конец высказывания; interrupted – когда высказывание остановлено или прервано до достижения конца; cancelled – когда оно удалено из очереди до синтеза; error – когда возникает любая другая ошибка. При приостановке речи событие pause запускается, если определенное высказывание приостановлено в середине, а resume – если высказывание возобновляет речь. Обратите внимание, что события паузы и возобновления могут не срабатывать, если речь приостановлена между высказываниями.

TtsOptions

Chrome 77 и более поздних версий;

Настройки речи для синтезатора.

Свойства

  • desiredEventTypes

    string[] необязательно

    Типы событий TTS, которые вы хотите отслеживать. Если он отсутствует, могут отправляться все типы событий.

  • enqueue

    Логическое значение (необязательно)

    Если задано значение true, высказывание ставится в очередь, если озвучивание уже выполняется. Если установлено значение false (по умолчанию), прерывает текущую речь и очищает очередь перед воспроизведением нового высказывания.

  • extensionId

    Строка (необязательно)

    Идентификатор расширения для используемого речевого движка (если известен).

  • gender

    VoiceGender необязательный

    Устарело начиная с Chrome 77

    Пол больше не поддерживается и будет игнорироваться.

    Пол голоса для синтезированной речи.

  • 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 не допускаются. Для многих голосов минимальная и максимальная скорость речи ограничены дополнительно. Например, определенный голос может не говорить быстрее, чем в три раза быстрее обычного, даже если вы укажете значение выше 3,0.

  • requiredEventTypes

    string[] необязательно

    Типы событий TTS, которые должен поддерживать голос.

  • voiceName

    Строка (необязательно)

    Название голоса, который будет использоваться для синтеза. Если оставить поле пустым, будет использоваться любой доступный голос.

  • громкость

    number (необязательно)

    Громкость речи от 0 до 1 включительно, где 0 – самая низкая, а 1 – самая высокая.По умолчанию используется значение 1,0.

  • onEvent

    void optional

    Эта функция вызывается с событиями, которые происходят в процессе произнесения высказывания.

    Функция onEvent выглядит следующим образом:

    (event: TtsEvent) => {...}

    • event

      Событие обновления от системы синтеза речи, указывающее на статус этого высказывания.

TtsVoice

Описание голоса, доступного для синтеза речи.

Свойства

  • eventTypes

    EventType[] необязательный

    Все типы событий обратного вызова, которые может отправлять этот голос.

  • extensionId

    Строка (необязательно)

    Идентификатор расширения, предоставляющего этот голос.

  • gender

    VoiceGender необязательный

    Не поддерживается начиная с Chrome 70

    Пол больше не поддерживается и будет игнорироваться.

    Пол голоса.

  • lang

    Строка (необязательно)

    Язык, который поддерживает этот голос, в формате язык-регион. Примеры: "en", "en-US", "en-GB", "zh-CN".

  • Пульт

    Логическое значение (необязательно)

    Если задано значение true, то движок синтеза речи является удаленным сетевым ресурсом. Это может привести к увеличению задержки и расходов на пропускную способность.

  • voiceName

    Строка (необязательно)

    Название голоса.

VoiceGender

Chrome 54 и более поздние версии Поддержка прекращена в Chrome 70

Пол больше не поддерживается и игнорируется.

Перечисление

"male"

"female"

Методы

getVoices()

Promise
chrome.tts.getVoices(
  callback?: function,
)
: Promise<TtsVoice[]>

Возвращает массив всех доступных голосов.

Параметры

  • обратный вызов

    function необязательно

    Параметр callback выглядит следующим образом:

    (voices: TtsVoice[]) => void

    • Голоса

      Массив объектов tts.TtsVoice, представляющих доступные голоса для синтеза речи.

Возвраты

  • Promise<TtsVoice[]>

    Chrome 101 и более поздних версий.

    Объекты Promise поддерживаются только в Manifest V3 и более поздних версиях. На других платформах нужно использовать обратные вызовы.

isSpeaking()

Promise
chrome.tts.isSpeaking(
  callback?: function,
)
: Promise<boolean>

Проверяет, говорит ли система в данный момент. В Mac OS X возвращается значение true, если системный синтезатор речи работает, даже если речь была инициирована не Chrome.

Параметры

  • обратный вызов

    function необязательно

    Параметр callback выглядит следующим образом:

    (speaking: boolean) => void

    • говорящий

      Логическое значение

      True, если говорит, false – если нет.

Возвраты

  • Promise<boolean>

    Chrome 101 и более поздних версий.

    Объекты Promise поддерживаются только в Manifest V3 и более поздних версиях. На других платформах нужно использовать обратные вызовы.

pause()

chrome.tts.pause(): void

Приостанавливает синтез речи, возможно, в середине высказывания. Чтобы возобновить или остановить речь, вызовите соответствующую команду.

resume()

chrome.tts.resume(): void

Если речь была приостановлена, возобновляет ее с того места, где она была прервана.

speak()

Promise
chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
  callback?: function,
)
: Promise<void>

Озвучивает текст с помощью синтезатора речи.

Параметры

  • высказывание

    string

    Текст, который нужно озвучить. Это может быть обычный текст или полный, правильно оформленный документ SSML. Речевые движки, которые не поддерживают SSML, удалят теги и озвучат текст. Максимальная длина текста – 32 768 символов.

  • Параметры

    TtsOptions необязательный

    Параметры речи.

  • обратный вызов

    function необязательно

    Параметр callback выглядит следующим образом:

    () => void

Возвраты

  • Promise<void>

    Chrome 101 и более поздних версий.

    Разрешается сразу, до окончания речи. Если произойдет ошибка, объект Promise будет отклонен. Чтобы получить более подробную информацию, используйте options.onEvent.

    Объекты Promise поддерживаются только в Manifest V3 и более поздних версиях. На других платформах нужно использовать обратные вызовы.

stop()

chrome.tts.stop(): void

Останавливает текущую речь и очищает очередь ожидающих высказываний. Кроме того, если озвучивание было приостановлено, оно будет возобновлено при следующем вызове функции speak.

События

onVoicesChanged

Chrome 124 и более поздних версий
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

Вызывается, когда список tts.TtsVoice, возвращаемый методом getVoices, изменился.

Параметры

  • обратный вызов

    function

    Параметр callback выглядит следующим образом:

    () => void