speechSynthesis.getVoices()
时,我会得到一份可能的语音列表。该列表因计算机和Chrome版本而异。有没有办法扩展支持并添加更多语音?
我认为可以通过要求用户下载其选择语言的语音文件来实现。这样的文件存在吗?
编辑:
这需要在Windows和Mac计算机上都能够工作。
它还需要简单易行,所以不要使用任何需要广泛技术知识的脚本或其他东西。我希望它是“下载和安装”类型的。
speechSynthesis.getVoices()
时,我会得到一份可能的语音列表。该列表因计算机和Chrome版本而异。首先应该使用显示浏览器上可用语音列表测试:show available voice on browser
Chrome有本地和服务器语音,Edge有本地语音并可以下载更多,Firefox除了3个由Windows注册表锁定的支持语音外没有其他内容。
以下是解锁的脚本:
如果您不确定如何运行PowerShell脚本:
点击开始
搜索“PowerShell”
启动PowerShell(因为这是编辑LocalMachine键,所以您需要以管理员身份运行)。将脚本复制并粘贴到控制台中。按Enter键。
$sourcePath = 'HKLM:\software\Microsoft\Speech_OneCore\Voices\Tokens' #Where the OneCore voices live
$destinationPath = 'HKLM:\SOFTWARE\Microsoft\Speech\Voices\Tokens' #For 64-bit apps
$destinationPath2 = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens' #For 32-bit apps
cd $destinationPath
$listVoices = Get-ChildItem $sourcePath
foreach($voice in $listVoices)
{
$source = $voice.PSPath #Get the path of this voices key
copy -Path $source -Destination $destinationPath -Recurse
copy -Path $source -Destination $destinationPath2 -Recurse
}
在我的示例机器上运行并重新启动后,我可以使用以下语音调用API:
Microsoft David Desktop; Microsoft Zira Desktop; Microsoft Zira Mobile(与桌面版相同); Microsoft Mark Mobile;
我认为这些语音比桌面版本优秀,并且变化多样总是好的。
你可以在重启后在此处测试新语音: 在浏览器上显示可用语音
在火狐上,我现在可以使用10种语音而不是之前的3种。我甚至可以使用来自Windows语言的Microsoft An安装越南语音,我的火狐可以像Edge一样读取越南语。
来源 reddit.com
speechSynthesis.getVoices()
将返回一个 SpeechSynthesisVoice 对象数组,可以使用它们。
此列表由本地语音和浏览器从服务器获取的语音组成,因此根据操作系统和浏览器而异。每个 SpeechSynthesisVoice 对象都有一个布尔值的 'localService' 属性,让您知道它是由操作系统还是浏览器提供的。
要获取更多本地语音,用户需要从其操作系统的控制面板/设置中下载更多语音包。
例如,在 Windows 上,在语音设置下(不要与语音识别应用程序混淆),有一个“管理语音”部分,用户可以从语言和方言列表中选择要下载的语音包。单击即可下载并安装。每个语音包将包含几个语音。
请注意,一旦调用了 speechSynthesis.getVoices()
函数,该数组将填充在函数调用时可用的语音。为了将新下载的语音包包含在数组中,用户需要刷新浏览器中的页面,并可能还需要关闭和重新打开浏览器和/或删除缓存。