Рекомендуемые голоса для API Web Speech
Этот репозиторий является частью более крупного проекта, призванного выявить лучшие практики реализации функции чтения вслух в приложениях для чтения.
Поскольку по умолчанию в различных браузерах и ОС доступны сотни голосов, разработчикам может быть сложно предоставить разумные настройки по умолчанию и тщательно подобранный список голосов.
Целью этого проекта, ориентированного на выбор голоса, является документирование голосов более высокого качества, доступных на различных платформах, и предоставление простого способа реализации этих рекомендаций с использованием файлов конфигурации JSON.
Варианты использования
- Обеспечение наилучшего голоса по умолчанию для каждого языка
- Отображение упорядоченного списка голосов в зависимости от качества
- Отображение удобных голосовых названий
- Фильтрация рекомендуемых голосов по полу и возрасту (взрослый или детский)
- Фильтрация новизны и голосов низкого качества
- Предварительный просмотр голоса с помощью тестового высказывания
Демо
Доступна живая демо-версия на основе проекта Readium Speech.
В этой демонстрации реализованы как лучшие практики выбора голоса, так и данные из этого репозитория.
Список поддерживаемых языков
Цель этого проекта — поддержка всех 43 языков, доступных в Windows и macOS.
В своем нынешнем состоянии он охватывает 43 языка:
- Арабский (Алжир, Бахрейн, Египет, Ирак, Иордания, Кувейт, Ливан, Ливия, Марокко, Оман, Катар, Саудовская Аравия, Сирия, Тунис, Объединенные Арабские Эмираты, Йемен)
- Баскский
- Бенгальский (Индия и Бангладеш)
- Бходжпури
- болгарский
- каталонский
- Китайский:
- Мандаринский китайский (материковый Китай, Тайвань)
- У китаец (он же «шанхайец»)
- Юэ китайский (он же «кантонский диалект»)
- хорватский
- чешский
- датский
- Голландский (Нидерланды и Бельгия)
- Английский (США, Великобритания, Австралия, Канада, Гонконг, Индия, Ирландия, Кения, Новая Зеландия, Нигерия, Шотландия, Сингапур, Южная Африка и Танзания)
- финский
- Французский (Франция, Канада, Бельгия и Швейцария)
- галисийский
- Немецкий (Германия, Австрия и Швейцария)
- Греческий
- иврит
- хинди
- венгерский
- индонезийский
- итальянский
- японский
- Каннада
- корейский
- малайский
- Маратхи
- норвежский
- персидский
- Польский
- Португальский (Португалия и Бразилия)
- румынский
- Русский
- словацкий
- словенский
- Испанский (Испания, Аргентина, Боливия, Чили, Колумбия, Коста-Рика, Куба, Доминиканская Республика, Эквадор, Сальвадор, Экваториальная Гвинея, Гватемала, Гондурас, Мексика, Никарагуа, Панама, Парагвай, Перу, Пуэрто-Рико, США, Уругвай и Венесуэла)
- Шведский
- Тамильский (Индия, Шри-Ланка, Малайзия и Сингапур)
- телугу
- тайский
- турецкий
- Украинский
- вьетнамский
Список голосов для фильтрации
На другом конце спектра этот проект также определяет ряд голосов, которые следует отфильтровать из компонента выбора голоса.
Некоторые из них вредны для общего впечатления от чтения, в то время как другие имеют очень низкое качество на платформах, где доступны лучшие предустановленные варианты.
- Новые голоса (устройства Apple)
- Голоса очень низкого качества (устройства Apple и Chrome OS)
Руководящие принципы
- Каждый список голосов упорядочен и предназначен для обеспечения оптимального качества прослушивания во всех браузерах/ОС/языках, охваченных этим проектом.
- Но каждый список также включает параметры по умолчанию, чтобы всегда было на что положиться.
- Учитывая эти две цели, голоса более высокого качества располагаются вверху списка, а голоса более низкого качества или специализированные — внизу.
- Количество голосов может показаться ошеломляющим (более 110 голосов только на английском языке), но на практике лишь немногие из них будут доступны пользователям на каждом их устройстве.
- Голосовые имена, возвращаемые Web Speech API, вряд ли удобны для пользователя, поэтому в этом списке представлены альтернативные имена, которые обычно включают имя (или пол) вместе с регионом, связанным с голосом.
- По мере возможности я всегда буду стараться включать хорошее сочетание высококачественных опций и опций по умолчанию для обоих полов.
- Но в списке нужно как-то расставить приоритеты: женские голоса в настоящее время стоят выше мужских. Поскольку пол, связанный с каждым голосом, документирован, это позволяет разработчикам повторно расставлять приоритеты/фильтровать список на основе этих критериев.
- Региональные варианты также сгруппированы в один список, а не намеренно разделены в отдельные файлы. На некоторых устройствах могут быть доступны только два или три голоса, и разделение региональных вариантов не будет иметь особого смысла.
- Но региональные варианты должны быть каким-то образом расставлены по приоритетам в списке. На данный момент регионы с лучшим выбором голосов перечислены выше, но разработчикам настоятельно рекомендуется учитывать региональные предпочтения пользователя.
Синтаксис
Схема JSON доступна для проверки или для потенциальных участников, заинтересованных в открытии PR для новых языков или голосовых дополнений.
Этикетка
label
требуется для каждого рекомендуемого голоса и обеспечивает удобную для пользователя метку для каждого голоса.
Эта строка локализована для целевого языка и обычно содержит следующую информацию:
- Имя (если имеется)
- Пол (когда имя отсутствует)
- Страна/регион
Пример 1: голоса Microsoft Natural
Хотя имена, задокументированные Microsoft для их естественного голоса, легко понять, они, как правило, очень длинные и все они локализованы на английском языке.
{
"label" : " Isabella (Italia) " ,
"name" : " Microsoft Isabella Online (Natural) - Italian (Italy) " ,
"language" : " it-IT "
}
Пример 2. Голоса Chrome OS
Chrome OS обеспечивает ряд высококачественных голосов через свои подсистемы Android, но они имеют одни из худших имен для конечного пользователя.
{
"label" : " Female voice 1 (US) " ,
"name" : " Android Speech Recognition and Synthesis from Google en-us-x-tpc-network " ,
"language" : " en-US "
}
Имена
name
требуется для каждого рекомендуемого голоса и используется в качестве основного идентификатора голосов в этом проекте.
Имена в основном стабильны в разных браузерах, а это означает, что для большинства голосов достаточно одной строки.
Но, к сожалению, есть некоторые исключения: голоса Android, iOS, iPadOS и macOS.
Для этих голосов по крайней мере часть строки часто локализована, имена могут быть несовместимыми в разных браузерах и могут меняться в зависимости от количества установленных вариантов.
По этой причине каждый список также может содержать следующие свойства:
-
altNames
с массивом альтернативных строк для данного голоса - и
localizedName
, который определяет шаблон строки, используемый для локализации этих голосов.
Пример 3. Альтернативная версия предварительно загруженного голоса Apple.
{
"label" : " Samantha (US) " ,
"name" : " Samantha " ,
"localizedName" : " apple " ,
"altNames" : [
" Samantha (Enhanced) " ,
" Samantha (English (United States)) "
],
"language" : " en-US "
}
Языки
language
требуется для каждого рекомендуемого голоса.
Он содержит языковой тег BCP 47, где за двухбуквенным кодом языка, написанным вниз, следует двухбуквенный код страны, написанный заглавными буквами.
Коды языка и страны разделяются дефисом (-).
Некоторые голоса также поддерживают другой язык, например, испанский голос для США также может обрабатывать английский.
По этой причине также доступно additionalLanguages
свойствоLanguages, хотя в настоящее время оно используется довольно редко.
Он содержит список языков, использующих только двухбуквенные коды, без вложенных тегов.
Некоторые совершенно новые голоса от Microsoft также поддерживают многоязычный вывод. Переключение языка не поддерживается в середине предложения, но вывод, похоже, способен автоматически определять язык каждого предложения и адаптироваться соответствующим образом.
Для поддержки этого вывод может автоматически переключаться на другой голос в процессе.
Эти голоса идентифицируются с помощью логического значения multiLingual
.
Пример 4: Голос с многоязычным выводом
{
"label" : " Emma (US) " ,
"name" : " Microsoft EmmaMultilingual Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"multiLingual" : true
}
Пример 5: Голос, способный обрабатывать дополнительный язык
{
"label" : " Sylvie (Canada) " ,
"name" : " Microsoft Sylvie Online (Natural) - French (Canada) " ,
"language" : " fr-CA " ,
"otherLanguages" : [
" en "
]
}
Гендер и голоса детей
gender
— это необязательное свойство для каждого голоса, которое документирует пол, связанный с каждым голосом.
Поддерживаются следующие значения: female
, male
или neutral
.
children
также является необязательным и идентифицирует детские голоса с помощью логического значения.
Пример 6: Голос детей женского пола
{
"label" : " Ana (US) " ,
"name" : " Microsoft Ana Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"gender" : " female " ,
"children" : true
}
Качество
quality
— это необязательное свойство для каждого голоса, которое документирует качество различных вариантов голоса.
Поддерживаются следующие значения:
- очень высокий
- Очень высокое, почти неотличимое от человека качество синтеза речи.
- высокий
- Высокое, близкое к человеческому качество синтеза речи
- нормальный
- Нормальное качество синтеза речи
- низкий
- Низкое, нечеловеческое качество синтеза речи.
- очень низкий
- Очень низкое, но все же внятное качество синтеза речи
Пример 7. Голос Apple доступен в трех вариантах качества.
{
"label" : " Ava (US) " ,
"name" : " Ava " ,
"note" : " This voice can be installed on all Apple devices and offers three variants. Like all voices that can be installed on Apple devices, it suffers from inconsistent naming due to localization. " ,
"altNames" : [
" Ava (Premium) " ,
" Ava (Enhanced) " ,
" Ava (English (United States)) " ,
],
"language" : " en-US " ,
"gender" : " female " ,
"quality" : [
" low " ,
" normal " ,
" high "
],
"rate" : 1 ,
"pitch" : 1 ,
"os" : [
" macOS " ,
" iOS " ,
" iPadOS "
]
}
ОС и браузер
И os
, и browser
являются необязательными свойствами. Они используются для указания, в каких операционных системах и браузерах доступен голос.
Эти два свойства следует интерпретировать отдельно, а не как комбинацию.
Пример 8. Голос Microsoft доступен как в Edge, так и в Windows.
{
"label" : " Denise (France) " ,
"name" : " Microsoft Denise Online (Natural) - French (France) " ,
"note" : " This voice is preloaded in Edge on desktop. In other browsers, it requires the user to run Windows 11 and install the voice pack. " ,
"language" : " fr-FR " ,
"gender" : " female " ,
"os" : [
" Windows "
],
"browser" : [
" Edge "
]
}
Кроме того, preloaded
указывает, предварительно загружен ли голос во всех идентифицированных ОС и браузерах.
При нынешнем подходе невозможно указать, что голос доступен в Chrome и Windows, но его необходимо загрузить, например, в Windows.
Пример 9. Голос Google, предварительно загруженный в Chrome Desktop.
{
"label" : " Google female voice (UK) " ,
"name" : " Google UK English Female " ,
"language" : " en-GB " ,
"gender" : " female " ,
"browser" : [
" ChromeDesktop "
],
"preloaded" : true
}
Темп и высота речи
При использовании API веб-речи SpeechSynthesisUtterance
поддерживает дополнительные значения для:
-
rate
для контроля скорости речи - и
pitch
для управления высотой звука
Каждый голос, описанный в этом репозитории, поддерживает следующие дополнительные свойства:
-
pitchControl
— это логическое значение, которое по умолчанию имеет значение true
и указывает, можно ли управлять высотой голоса. -
rate
— целое число от 0,1 до 10, которое по умолчанию равно 1 и обеспечивает рекомендуемую скорость речи по умолчанию для каждого голоса. -
pitch
– это целое число от 0 до 2, которое по умолчанию равно 1 и обеспечивает рекомендуемую высоту звука по умолчанию для каждого голоса.
Пример 10: голос Microsoft, высоту звука которого невозможно отрегулировать.
{
"label" : " Ana (US) " ,
"name" : " Microsoft Ana Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"gender" : " female " ,
"pitchControl" : false
}
Пример 11. Голос Google с рекомендуемыми высотой звука и скоростью.
{
"label" : " Voix Google féminine (France) " ,
"name" : " Google français " ,
"language" : " fr-FR " ,
"gender" : " female " ,
"rate" : 1 ,
"pitch" : 0.8
}
Дополнительные примечания
В ходе работы по документированию списка рекомендуемых голосов я также протестировал различные браузеры/ОС, чтобы посмотреть, как они себя ведут. Этот раздел предназначен для обобщения некоторой части этой информации.
Также доступна специальная метка для отслеживания внешних проблем, о которых сообщается в Apple, Google, Microsoft или Mozilla.
Общий
- API Web Speech возвращает следующие поля через метод
getVoices()
: name
, voiceURI
, lang
, localService
и default
. - Хотя
voiceURI
теоретически должен быть наиболее последовательным способом идентификации голоса, на практике это очень далеко от истины. Большинство браузеров используют для voiceURI
то же значение, что и name
, и не обеспечивают уникальность. - Как мы увидим в примечаниях для конкретных браузеров/ОС,
name
также реализовано непоследовательно и может возвращать разные значения для одного и того же голоса на одном и том же устройстве. -
localService
указывает, доступен ли голос для автономного использования и работает ли он должным образом, поэтому текущий список рекомендуемых голосов не содержит этой информации. -
lang
кажется наиболее надежным во всех реализациях, возвращая язык с использованием языковых тегов BCP 47, где основной язык указан в нижнем регистре, а вложенный тег - в верхнем регистре ( pt-BR
). - К сожалению, есть несколько отклонений:
- В Android Samsung и Chrome вместо этого используют подчеркивание в качестве разделителя:
en_us
(связанная проблема) - В то время как Firefox для Android становится еще более креативным, используя трехбуквенные коды языков и добавляя в конце дополнительную строку:
eng-US-f000
(связанная проблема).
-
default
предназначен для указания того, является ли голос голосом по умолчанию для текущего языка приложения. Теоретически это должно быть чрезвычайно полезно, но на практике его действительно сложно использовать из-за несогласованности реализаций, ограниченного контекста (системные настройки по умолчанию или пользовательские настройки) и отсутствия возможности установки голоса по умолчанию для каждого языка. - Помимо использования
default
, разработчики всегда должны рассмотреть возможность использования HTTP-заголовка Accept-Language
, поскольку он содержит упорядоченный список предпочтительного языка/региона для данного пользователя.
Андроид
- На данный момент мы рассмотрели тестирование и документацию только по базовым версиям Android, доступным на устройствах Google Pixel. Список доступных голосов может сильно различаться в зависимости от OEM, устройства и версии Android.
- Из-за особенностей Android документировать все эти варианты будет очень сложно. В будущей версии этого проекта будут предприняты дальнейшие попытки с использованием ферм устройств (связанная проблема).
- В последних версиях обычного Android имеется отличный выбор высококачественных голосов, охватывающих широкий спектр языков и регионов (67 по состоянию на апрель 2024 г.).
- Чтобы использовать эти голоса, пользователю необходимо довольно глубоко зайти в настройки системы, либо загрузить их (по умолчанию предварительно загружены только язык вашей системы и некоторые из самых популярных языков), либо выбрать предпочитаемый голос для каждого языка/региона.
- К сожалению, Chrome на Android не возвращает список голосов, доступных пользователям, вместо этого он возвращает нефильтрованный список языков/регионов (связанная проблема).
- Что еще хуже, все эти голоса и регионы локализованы в соответствии с языковым стандартом системы.
- Помимо прочего, это означает, что даже языки и регионы, для которых требуется установка голосового пакета, будут отображаться в списке, возвращаемом API веб-речи (связанная проблема).
- Если пользователь выбирает язык/регион, для которого необходимо загрузить голосовой пакет, Chrome по умолчанию использует английский голос (связанная проблема).
- Даже если голосовой пакет установлен, пользователю может потребоваться выбрать голос по умолчанию для каждого региона, прежде чем вообще можно будет использовать язык/регион.
- Из-за такого плохого подхода к выбору голоса Chrome на Android не указывает предпочитаемый язык/регион пользователя по
default
(связанная проблема).
Chrome для рабочего стола
- На настольном компьютере в Chrome предустановлен ограниченный набор из 19 высококачественных голосов на 15 языках.
- Для использования всех этих голосов требуется онлайн-доступ без какого-либо перехода к автономному варианту более низкого качества.
- К сожалению, эти голоса также страдают от ошибки, если какое-либо высказывание, считываемое Web Speech API, занимает больше 14 секунд (связанная проблема) и не возвращает граничные события (связанная проблема).
- В текущих обстоятельствах этим голосам Google в списке рекомендуемых голосов присвоен более низкий приоритет, чем их аналогам Microsoft/Apple.
- В целом, к сожалению, Chrome Desktop сильно отстает от Android и Chrome OS, когда дело касается диапазона голосов и языков, поддерживаемых по умолчанию (связанная проблема).
Хром ОС
- Chrome OS поставляется с четырьмя наборами голосов: голоса Chrome OS, голоса Android (более 50 языков), голоса Natural и голоса eSpeak (38 языков).
- По умолчанию Chrome OS загружает голоса Chrome OS для языка вашей системы, а голоса Android и eSpeak доступны для всех языков.
- Google также постепенно добавляет поддержку голосов Natural, которые, по сути, представляют собой более качественные варианты голосов Android с дополнительным преимуществом работы в автономном режиме. Чтобы установить естественные голоса, пользователю необходимо перейти к настройкам системы.
- Chrome OS имеет досадную тенденцию удалять голосовые пакеты всякий раз, когда устанавливается новое обновление Chrome OS, что происходит очень часто.
- Большинство голосов Android предлагают офлайн- и онлайн-варианты, и по качеству они находятся на одном уровне с тем, что предлагает Apple в плане загружаемых голосов.
- Эти голоса Android имеют одни из худших названий на любой платформе/браузере, что делает их едва ли пригодными для использования без изменения маркировки, предлагаемого этим проектом.
- Голоса Android также страдают от проблем с задержкой и/или доступностью. В некоторых случаях чтение первого высказывания вслух может занять до минуты.
- Голоса Chrome на шаг ниже голосов Android, но предлагают достойный выбор для наиболее распространенных языков.
- Голосов eSpeak следует избегать любой ценой из-за их чрезвычайно низкого качества, и они документированы отдельно для их фильтрации.
Край
- На настольном компьютере Edge предоставляет лучший выбор высококачественных голосов с более чем 250 предварительно загруженными голосами на 75 языках (по состоянию на апрель 2024 г.).
- Все эти так называемые «естественные» голоса основаны на машинном обучении (ML) и поэтому требуют онлайн-доступа для их использования.
- Небольшое количество этих голосов также многоязычны и, похоже, способны распознавать язык предложения и соответствующим образом адаптироваться. К сожалению, это не работает, когда в середине предложения есть переключатель языка.
- По крайней мере, в macOS есть странная ошибка, из-за которой Edge изначально отображает только 18 естественных голосов, но это число увеличивается до 250+, как только для вывода высказывания используется Web Speech API.
- Существуют также дополнительные проблемы, о которых следует знать разработчикам при использовании этих голосов: они не поддерживают регулировку высоты тона (связанная проблема), и необходимо экранировать ряд символов, чтобы избежать проблем с воспроизведением (связанная проблема).
- На мобильных устройствах Edge не так интересен:
- Его совершенно невозможно использовать на Android, поскольку он возвращает пустой список голосов, что делает невозможным его использование с API веб-речи (связанная проблема).
- В iOS/iPadOS все браузеры в настоящее время вынуждены использовать Safari в качестве своего движка, а это означает, что Edge ведет себя точно так же, как Safari Mobile.
Firefox
- На рабочем столе Firefox кажется довольно простым, когда дело доходит до выбора голоса.
- В отличие от Chrome и Edge, Firefox не имеет собственного предустановленного голоса.
- Firefox использует другой подход к
voiceURI
, где каждый голос действительно идентифицируется уникальным URN. - Поскольку это уникально для Firefox, текущие файлы JSON пока не документируют этот URI, но это может быть добавлено в будущем.
- В macOS Firefox требует полной перезагрузки системы, чтобы новые голоса появились в списке.
iOS и iPadOS
- Обе ОС поставляются с тем же набором предварительно загруженных и загружаемых голосов, что и macOS. Прочтите раздел macOS ниже, чтобы получить дополнительную информацию о доступных голосах.
- По неизвестной причине некоторые предварительно загруженные голоса также отображаются дважды, но обеспечивают один и тот же аудиовыход.
- Все браузеры должны работать в системном веб-просмотре, а это означает, что они представляют собой просто оболочку поверх Safari Mobile, а не действительно разные браузеры.
- Эта ситуация может измениться из-за Закона о цифровом рынке в Европе, который вынудит Apple изменить свою политику в отношении сторонних браузеров и веб-просмотров.
macOS
- macOS предоставляет обширный список голосов на 45 языках, как предварительно загруженных, так и загружаемых.
- Эти голоса могут иметь до трех разных вариантов в зависимости от качества вывода (и размера загрузки).
- Голоса самого высокого качества, вероятно, доступны для Siri, но, к сожалению, они недоступны через Web Speech API (связанная проблема).
- На другом конце спектра у Apple возникла неудачная идея предварительно загрузить большой набор голосов низкого качества и странных голосов, таких как голосовые пакеты Eloquence (8 голосов) и Effects (15 голосов).
- Само по себе существование этих голосов является веской причиной для фильтрации голосов, доступных пользователям macOS, и выделения тех, которые рекомендованы в этом репозитории.
- В отличие от других платформ/ОС, macOS решила локализовать голосовые имена. Это не было бы проблемой, если бы
voiceURI
можно было использовать в качестве надежного идентификатора голосов, но это не так (связанная проблема). - В своем текущем состоянии этот репозиторий документирует только локализации для официально поддерживаемых языков, а не для 45 языков, поддерживаемых движком macOS TTS.
Сафари
- К лучшему или к худшему, поведение Safari в настольной и мобильной версиях в основном одинаково.
- Загружаемые голоса не отображаются в списке, возвращаемом API Web Speech (связанная проблема).
- Хуже того, при установке более качественных вариантов предварительно загруженных голосов эти голоса исчезают в Safari, а это означает, что целые языки могут полностью исчезнуть.
- Все голоса возвращают
true
по default
в Safari, что делает невозможным обнаружение и выбор системного/пользовательского значения по умолчанию (связанная проблема).
Окна
- Microsoft предоставляет очень полезную страницу, на которой перечислены все голоса, доступные в Windows 10 и 11, всего 98 голосов на 36 языках.
- Естественные голоса обеспечивают гораздо лучший опыт, но для них требуется актуальная версия Windows 11, и их необходимо загрузить (с дополнительным преимуществом, заключающимся в том, что они также работают в автономном режиме).
- Microsoft в целом не спешила добавлять эти естественные голоса в Windows 11. До недавнего времени были доступны только голоса США (3 голоса). Список теперь немного длиннее (23 голоса на 8 языках), но все еще сильно отстает от того, что они предлагают через Edge (более 250 голосов на 75 языках).
- К сожалению, эти голоса более высокого качества в настоящее время не отображаются должным образом в Chrome или Firefox (связанная проблема). Они отображаются только в Edge, где они все равно предварительно загружены, но исключительно для использования в Интернете.