安卓TTS朗读
分句翻译安卓版支持调用外部TTS引擎,可以支持上百种朗读音色,下面介绍两个主流的外部TTS引擎导入教程。
MultiTTS教程
分句翻译安卓3.1.4版本支持MultiTTS语音引擎,下面是使用方法。
需要下载的资源:
步骤:
安装MultiTTS 安卓APP并打开
导入数据
- 分别导入英文TTS和中文TTS两个zip压缩包文件
- 软件设置
- 开启“本地配置”和“合成对话”
- 回到应用首页,设置语速和对话
- 语速设为32,长按情感女声中的“南芳”设为对话。注意是长按
- 切换到“微软语音”,设置旁白
- 点击“en-US,Jenny”,设为旁白。注意是点击
- 分句翻译设置
- 打开分句翻译,进入双语阅读页面,找到“朗读设置”,选择“multitts”
注意事项:
- 教程中特别强调了哪些操作需要长按,哪些需要点击,请严格按照图片中的标注进行操作。
更多TTS资源获取:
tts_server导入教程
TTS Server 安卓版下载地址
- 访问 TTS Server GitHub Releases 页面 以获取最新版本。
打开tts_server,在右上角菜单勾选多语音,然后选择导入下面代码:
{
"group": {
"id": 1695085210756,
"name": "分句翻译",
"isExpanded": true
},
"list": [
{
"id": 1695085242891,
"groupId": 1695085210756,
"displayName": "云健(zh-CN-YunjianNeural)",
"isEnabled": true,
"speechRule": {
"target": 4,
"tag": "dialogue",
"tagRuleId": "ttsrv.multi_voice"
},
"tts": {
"#type": "internal",
"voiceName": "zh-CN-YunjianNeural",
"prosody": {
"rate": -8
}
}
},
{
"id": 1695085374545,
"groupId": 1695085210756,
"displayName": "Michelle(en-US-MichelleNeural)",
"isEnabled": true,
"speechRule": {
"target": 4,
"tag": "narration",
"tagRuleId": "ttsrv.multi_voice"
},
"tts": {
"#type": "internal",
"locale": "en-US",
"voiceName": "en-US-MichelleNeural",
"prosody": {
"rate": -15
}
}
}
]
}
朗读规则管理代码:
let SpeechRuleJS = {
name: "分句翻译",
id: "ttsrv.multi_voice",
author: "TTS Server",
version: 4,
tags: {narration: "旁白", dialogue: "对话"},
handleText(text) {
const list = [];
let tmpStr = "";
let endTag = "narration";
text.split("").forEach((char, index) => {
tmpStr += char;
if (char === '{') {
endTag = "dialogue";
list.push({text: tmpStr, tag: "narration"});
tmpStr = "";
} else if (char === '}') {
endTag = "narration";
tmpStr = tmpStr.slice(0, -1)
list.push({text: tmpStr, tag: "dialogue"});
tmpStr = "";
} else if (index === text.length - 1) {
list.push({text: tmpStr, tag: endTag});
}
});
return list;
},
splitText(text) {
let separatorStr = "。??!!;;"
let list = []
let tmpStr = ""
text.split("").forEach((char, index) => {
tmpStr += chacharr
if (separatorStr.includes(char)) {
list.push(tmpStr)
tmpStr = ""
} else if (index === text.length - 1) {
list.push(tmpStr);
}
})
return list.filter(item => item.replace(/[“”]/g, '').trim().length > 0);
}
};