該存儲庫是一個更大項目的一部分,旨在確定在閱讀應用程式中實現朗讀功能的最佳實踐。
預設情況下,各種瀏覽器和作業系統都有數百種可用的語音,因此開發人員提供合理的預設值和精選的語音清單可能會很棘手。
該專案專注於語音選擇,其目標是記錄各種平台上可用的更高品質的語音,並提供一種使用 JSON 設定檔實施這些建議的簡單方法。
提供基於 Readium Speech 專案的現場演示。
該演示實現了語音選擇的最佳實踐以及該存儲庫中的數據。
該專案的目標是支援 Windows 和 macOS 上可用的所有 43 種語言。
目前,它涵蓋 43 種語言:
另一方面,該專案也確定了一些應從語音選擇器組件中過濾掉的語音。
其中一些對整體閱讀體驗有害,而另一些則在有更好的預載選項的平台上品質非常低。
JSON 模式可用於驗證或有興趣為新語言或語音新增開啟 PR 的潛在貢獻者。
每個推薦的語音都需要label
,並為每個語音提供一個人性化的標籤。
該字串針對目標語言進行了本地化,通常包含以下資訊:
範例 1:Microsoft Natural 語音
雖然微軟記錄的自然聲音名稱很容易理解,但它們往往很長,而且都是英語本地化的。
{
"label" : " Isabella (Italia) " ,
"name" : " Microsoft Isabella Online (Natural) - Italian (Italy) " ,
"language" : " it-IT "
}
範例 2:Chrome 作業系統聲音
Chrome 作業系統透過其 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
屬性也可用,儘管現在很少使用它。
它包含僅使用兩個字母代碼的語言列表,沒有子標籤。
微軟的一些全新聲音也能夠進行多語言輸出。句子中間不支援語言切換,但輸出似乎能夠自動偵測每個句子的語言並相應地採用自身。
為了支援這一點,輸出可能會在此過程中自動切換到不同的聲音。
這些聲音是使用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:Edge 和 Windows 中均提供 Microsoft 語音
{
"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: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 語音
{
"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 報告的外部問題。
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
,這使得無法偵測並選擇系統/使用者預設值(相關問題)。