我们使用speak.js库进行文本到语音转换。我们需要在这个过程中实现本地化的女声。
我们称它的说话功能为meSpeak.speak('Hello Thomas");
,但我们无法使它在女声中起作用。
我们已经观察到需要传递一些arg作为参数,但不能传递这个参数。
您能指导我如何使用speak.js lib获得女声操作吗?
多谢提前
最佳答案
假设你说的是mespeak.js:
在http://www.masswerk.at/mespeak下载最新版本
用所选语言复制一个语音文件(json),并在编辑器中打开它。
语音文件的结构如下:
{
"voice_id": "<filename>",
"dict_id": "<filename>",
"dict": "<base64-encoded octet stream>",
"voice": "<base64-encoded octet stream>"
}
首先,提供一个唯一的“voice_id”(例如“en-us-f”,这些id实际上是unix文件名)。
编码的语音数据实际上是一个文本文件,可以在eSpeak的数据目录中找到(参见http://espeak.sourceforge.net/)。虽然文件表示为base64编码的八位字节流,但您也可以为此使用文本字符串,方法是提供另一个属性“voice_encoding”:
{
"voice_id": "<filename>",
"dict_id": "<filename>",
"dict": "<base64-encoded octet stream>",
"voice": "<text-string>",
"voice_encoding": "text"
}
现在,参考eSpeak数据和eSpeak语音文档,您可以找到以下语音“en us”的文本:
// moving towards US English
name english-us
language en-us 2
language en-r
language en 3
gender male
[and more]
通过删除第一行中的注释,编辑名称(我们希望它是唯一的),最后更改性别,您将得到:
name english-us-f
language en-us 2
language en-r
language en 3
gender female
用“\n”替换任何换行符以获取有效的JSON字符串:
"name english-us-f\nlanguage en-us 2\nlanguage en-r\nlanguage en 3\ngender female"
并以此作为“声音”属性的值。
保存文件并将其加载到meSpeak中。
您可以根据eSpeak文档对声音进行微调:http://espeak.sourceforge.net/voices.html
(另一种方法是保存一个普通的eSpeak语音文件,并将其内容编码为base64字符串,并将其用作“voice”的值)。在这种情况下,您不会设置“语音编码”属性。使用纯文本可能更适合测试。)
希望这有帮助(不会比这更容易)。
N.L.公司。
编辑:请注意,任何格式错误的语音字符串都会导致eSpeak(m)出错。(eSpeak对语法错误并不友好,但会抛出一个“type error”—由meSpeak作为控制台日志处理。记住,meSpeak的核心只是Emscripten生成的eSpeak端口。所以它不能更好地处理语音文件。)
编辑:此文件的(扩展)版本现在是meSpeak文档的一部分:http://www.masswerk.at/mespeak/voices-and-languages.html