当我speechSynthesis.getVoices()
在 Chrome 中运行时,我会得到一个可能的声音列表。该列表会根据计算机和 Chrome 版本而有所不同。
有什么方法可以扩展支持并添加更多声音?
我觉得这可以通过要求用户下载他们选择的语言的语音文件来完成。这样的文件存在吗?
编辑:
这需要适用于 Windows 和 Mac 计算机。
它还需要简单,因此没有脚本或任何需要广泛技术知识的东西。我希望有一个“下载和安装”类型的东西
当我speechSynthesis.getVoices()
在 Chrome 中运行时,我会得到一个可能的声音列表。该列表会根据计算机和 Chrome 版本而有所不同。
有什么方法可以扩展支持并添加更多声音?
我觉得这可以通过要求用户下载他们选择的语言的语音文件来完成。这样的文件存在吗?
编辑:
这需要适用于 Windows 和 Mac 计算机。
它还需要简单,因此没有脚本或任何需要广泛技术知识的东西。我希望有一个“下载和安装”类型的东西
您应该首先在以下位置使用显示列表语音测试:在浏览器上显示可用语音
chrome 有本地和服务器语音,edge 有本地和可以下载更多,firefox 没有别的,只有 3 个支持的语音被 windows registy 锁定。
这是解锁的脚本:
如果您不确定如何运行 powershell 脚本:
点击开始
搜索“Powershell”
启动 Powershell(因为这是编辑 LocalMachine 密钥,您需要以管理员身份运行)。将脚本复制并粘贴到控制台中。按回车。
$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
微软大卫桌面;微软 Zira 桌面;微软 Zira 移动;(与桌面版相同)Microsoft Mark Mobile;
我发现这些声音优于桌面变体,而且多样性总是很好
重启后你可以在这里测试你的新声音:在浏览器上显示可用的声音
在这里,在 Firefox 上,我可以有 10 个声音而不是 3 个声音。即使我可以从 Windows 语言中安装 Microsoft An 越南语语音,而我的 Firefox 可以将越南语读取为边缘。
speechSynthesis.getVoices()
将返回可以使用的 SpeechSynthesisVoice 对象数组。
该列表由本地语音和浏览器将从服务器获取的语音组成,因此会因操作系统和浏览器而异。每个 SpeechSynthesisVoice 对象都有一个布尔“localService”属性,让您知道它是由操作系统还是浏览器提供的。
要获得更多本地语音,用户需要从其操作系统的控制面板/设置中下载更多语音包。
例如,在 Windows 上,在语音设置下(不要与语音识别应用程序混淆)有一个“管理语音”部分,用户可以在其中从语言和方言列表中选择要下载的语音包。一键下载并安装。每个语音包将包含几个语音。
请注意,一旦speechSynthesis.getVoices()
调用了函数,数组将填充函数调用时可用的声音。为了将新下载的语音包含在数组中,用户需要在浏览器中刷新页面,并且可能还需要关闭并重新打开浏览器和/或删除缓存。