このリポジトリは、読み上げアプリに読み上げ機能を実装するためのベスト プラクティスを特定することを目的とした、より大きなプロジェクトの一部です。
さまざまなブラウザーや OS でデフォルトで数百の音声が利用できるため、開発者にとって適切なデフォルトと精選された音声リストを提供するのは難しい場合があります。
音声の選択に焦点を当てたこのプロジェクトの目標は、さまざまなプラットフォームで利用できる高品質の音声を文書化し、JSON 構成ファイルを使用してこれらの推奨事項を実装する簡単な方法を提供することです。
Readium Speech プロジェクトに基づくライブ デモが利用可能です。
このデモでは、音声選択に関するベスト プラクティスとこのリポジトリからのデータの両方が実装されています。
このプロジェクトの目標は、Windows と macOS で利用可能な 43 言語すべてをサポートすることです。
現在の状態では、43 の言語をカバーしています。
このプロジェクトでは、スペクトルの反対側で、音声セレクター コンポーネントから除外する必要がある多数の音声も特定します。
それらの中には全体的な読書体験に有害なものもあれば、より優れたプリロードオプションが利用可能なプラットフォームでは非常に低品質なものもあります。
JSON スキーマは、新しい言語や音声の追加の PR を開始することに興味がある検証者や潜在的な貢献者のために利用できます。
label
推奨される各音声に必要であり、各音声にわかりやすいラベルを提供します。
この文字列はターゲット言語用にローカライズされており、通常は次の情報が含まれています。
例 1: Microsoft ナチュラル ボイス
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
が必要です。
これには、小文字の 2 文字の言語コードの後に大文字の 2 文字の国コードが続く BCP 47 言語タグが含まれています。
言語コードと国コードはハイフン (-) で区切られます。
一部の音声は別の言語も処理できます。たとえば、米国向けのスペイン語音声は英語も処理できる場合があります。
このため、現時点ではほとんど使用されていませんが、 additionalLanguages
プロパティも利用できます。
これには、サブタグなしで 2 文字のコードのみを使用する言語のリストが含まれています。
Microsoft の新しい音声の中には、多言語出力が可能なものもあります。文の途中での言語の切り替えはサポートされていませんが、出力は各文の言語を自動検出し、それに応じて適応できるようです。
これをサポートするために、出力がプロセス中に自動的に別の音声に切り替わる場合があります。
これらの音声は、 multiLingual
ブール値を使用して識別されます。
例 4: 多言語出力の音声
{
"label" : " Emma (US) " ,
"name" : " Microsoft EmmaMultilingual Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"multiLingual" : true
}
例 5: 第 2 言語を処理できる音声
{
"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: 3 つの品質バリエーションで利用可能な 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
どちらもオプションのプロパティです。これらは、音声が利用できるオペレーティング システムとブラウザを示すために使用されます。
これら 2 つのプロパティは、組み合わせとしてではなく、個別に解釈されることを意図しています。
例 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
識別されたすべての OS およびブラウザに音声がプリロードされているかどうかを示します。
現在のアプローチでは、音声が Chrome と Windows で利用可能であることを示すことはできませんが、たとえば Windows ではダウンロードが必要です。
例 9: Chrome デスクトップにプリロードされた Google 音声
{
"label" : " Google female voice (UK) " ,
"name" : " Google UK English Female " ,
"language" : " en-GB " ,
"gender" : " female " ,
"browser" : [
" ChromeDesktop "
],
"preloaded" : true
}
Web Speech API を使用する場合、 SpeechSynthesisUtterance
次のオプションの値をサポートします。
rate
pitch
でピッチをコントロールこのリポジトリに記載されている各音声は、次のオプションのプロパティをサポートしています。
pitchControl
はブール値で、デフォルトはtrue
で、音声のピッチを制御できるかどうかを示します。rate
は 0.1 ~ 10 の整数で、デフォルトは 1 で、各音声に推奨されるデフォルトの発話速度を提供します。pitch
は 0 ~ 2 の整数で、デフォルトは 1 で、各音声に推奨されるデフォルトのピッチを提供します。例 10: ピッチを調整できない Microsoft voice
{
"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
}
推奨される音声のリストを文書化する作業を通じて、さまざまなブラウザ/OS をテストして、それらがどのように動作するかを確認することになりました。このセクションは、この情報の一部を要約することを目的としています。
Apple、Google、Microsoft、または Mozilla に報告された外部の問題を追跡するための専用ラベルも利用できます。
getVoices()
メソッドを通じて次のフィールドを返します: name
、 voiceURI
、 lang
、 localService
、およびdefault
。voiceURI
音声を識別する最も一貫した方法であるはずですが、実際にはこれは真実からは程遠いものです。ほとんどのブラウザは、 voiceURI
にname
と同じ値を使用し、一意性を強制しません。name
の実装にも一貫性がなく、同じデバイス上の同じ音声に対して異なる値を返す可能性があります。localService
音声がオフラインで使用可能であり、期待どおりに動作しているかどうかを示します。そのため、現在の推奨音声リストにはその情報が含まれていません。lang
実装全体にわたってほとんど信頼できるようで、BCP 47 言語タグを使用して言語を返します。メイン言語は小文字、サブタグは大文字 ( pt-BR
) です。en_us
(関連する問題)eng-US-f000
を追加します (関連問題)default
音声が現在のアプリ言語のデフォルトの音声であるかどうかを示すことを目的としています。理論的にはこれは非常に便利なはずですが、実装間での不一致、限られたコンテキスト (システムのデフォルトとユーザーのデフォルト)、および言語ごとにデフォルトの音声を設定する機能の欠如により、実際に使用するのは非常に困難です。default
の使用に加えて、特定のユーザーの優先言語/地域の順序付きリストが含まれるAccept-Language
HTTP ヘッダーの使用も常に考慮する必要があります。default
を使用してもユーザーの優先言語/地域を示しません (関連する問題)。voiceURI
に対して異なるアプローチを採用しており、各音声は一意の URN によって実際に識別されます。voiceURI
音声の信頼できる識別子として使用できる場合、これは問題になりませんが、そうではありません (関連する問題)。default
ではすべての音声がtrue
返すため、システム/ユーザーのデフォルトを検出して選択することができなくなります (関連する問題)。