星星博客 »  > 

auto.js进行语音合成+情感判别

利用Android原生tts来进行语音的合成,并导入pytorch训练的模型进行情感判别。

详细讲解步骤及源码下载在我的公众号:
在这里插入图片描述

一.语音合成

function voice(str){
let pitch = 1.0 //声音尖度
let speechRate = 1.0//说话速度
let obj = {
onInit: function(status) {
if (status == TextToSpeech.SUCCESS) {
if (tts.setLanguage(Locale.CHINESE) == TextToSpeech.SUCCESS && tts.setPitch(pitch) == TextToSpeech.SUCCESS && tts.setSpeechRate(speechRate) == TextToSpeech.SUCCESS) {
toast(“正在朗读”)
}else{
toastLog(“error”)
exit()
}
} else {
toastLog(“不成功”)
}
}
}
tts = new TextToSpeech(context, TextToSpeech.OnInitListener(obj))

setTimeout(function(){
let a = tts.speak(str, TextToSpeech.QUEUE_ADD, null);

let save = tts.synthesizeToFile(str, java.util.HashMap(), “/storage/emulated/0/合成语音.wav”)
},1000);
toast(“语音已保存☞ /storage/emulated/0/合成语音.wav”)
}

代码写完测试一下功能,能够听到声音,在目录下也存在对应文件

效果图:
在这里插入图片描述

二.情感判别

情感判别使用浩然开发的插件来实现

function analysis(){
let text = ui.input.getText().toString();
//语句简单化处理 过滤标点 全部小写
let textSimple = pytorch.simplifySentence(text)
//定义模型输入词汇量长度
let inputSize = 128
//根据词汇表将语句换成词向量序号 未知单词与长度不足处自动补0
let ids = vocab.getIds(textSimple.split(" “),inputSize)
//将列表构造成Tensor类型,适合网络输入
let inputTensor = pytorch.fromBlob(ids,[1,128])
//执行模型得到输出结果
let outPutTensor = pytorch.forward(model,inputTensor)
//输出张量转换为浮点数组
let result = outPutTensor.getDataAsFloatArray()
//分析结果
if(result[0]<=result[1]){
ui.output.setTextColor(colors.parseColor(”#90EE90"));
ui.ver.backgroundDrawable=GradientDrawable(“TL_BR”,["#cc6633","#3366cc","#99ff99"]);
ui.output.setText(“正面情感”);
}else{
ui.output.setTextColor(colors.parseColor("#FF0000"));
ui.ver.backgroundDrawable=GradientDrawable(“TL_BR”,["#cc6633","#3366cc","#FF0000"]);
ui.output.setText(“负面情感”);

}

效果图:

在这里插入图片描述
在这里插入图片描述
详细讲解步骤及源码下载在我的公众号:
在这里插入图片描述

相关文章