хром.ттс

Описание

Используйте 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

Хром 54+

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

"начинать"

"конец"

"слово"

"предложение"

"маркер"

"прерванный"

"отменено"

"ошибка"

"пауза"

"резюме"

TtsEvent

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

Характеристики

  • charIndex

    номер необязательно

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

  • сообщение об ошибке

    строка необязательна

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

  • длина

    номер необязательно

    Хром 74+

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

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

TtsOptions

Хром 77+

Параметры речи для движка 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

Chrome 54+ устарел с Chrome 70

Пол устарел и игнорируется.

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

"мужской"

"женский"

Методы

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

Хром 124+
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

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

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    () => void