语音合成(Text To Speech,TTS):将文本合成为语音,即声音文件。
去官网创建应用,,并下载SDK文件,解压后的压缩包中有一个官方的demo,其实按照这个demo来就行了,在这里需要注意的只有两个问题
**
1、关于assets中文件的一个读取
**
因为官方给的Eclipse版本中的,如果用Android Studio开发的话,那就要注意到这两者对于assets文件的的处理是不一样的。
百度语音识别这里PARAM_TTS_TEXT_MODEL_FILE、PARAM_TTS_SPEECH_MODEL_FILE、PARAM_TTS_LICENCE_FILE、loadEnglishModel(),这几个中都需要放入assets文件的一个路径,供它去读取,并且进行处理,但是如果直接用“file://android_asset/xxx”或者this.getClass().getResourceAsStream()都是不可取的,这里必须要先把assets中的文件放到存到本地,然后读本地存储路径,这里附一个自己已经做好的类
copyFilesFassets方法传入的两个参数是:"assets/bd_etts_speech_female.dat"、"/voicetest/bd_etts_speech_female.dat"
public class CopyAssetsFile {
/**
* 从assets目录中复制整个文件夹内容
* @param context Context 使用CopyFiles类的Activity
* @param oldPath String 原文件路径 如:/aa
* @param newPath String 复制后路径 如:xx:/bb/cc
*/
public void copyFilesFassets(Context context,String oldPath,String newPath) {
try {
String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名
if (fileNames.length > 0) {//如果是目录
File file = new File(newPath);
file.mkdirs();//如果文件夹不存在,则递归
for (String fileName : fileNames) {
copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
}
} else {//如果是文件
File file=new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + newPath);
String path = newPath.substring(0, newPath.lastIndexOf("/"));
getDirectory(path);
if(!file.exists()){
file.createNewFile();
}
InputStream is = context.getClass().getClassLoader().getResourceAsStream(oldPath);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int byteCount = 0;
while((byteCount = is.read(buffer)) != -1) {//循环从输入流读取 buffer字节
fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流
}
fos.flush();//刷新缓冲区
is.close();
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到错误则通知UI线程
}
}
//分级建立文件夹
public void getDirectory(String path){
//对path进行处理,分层级建立文件夹
String[] s=path.split("/");
String str=Environment.getExternalStorageDirectory().getAbsolutePath();
for (int i = 0; i < s.length; i++) {
str=str+"/"+s[i];
File file=new File(str);
if(!file.exists()){
file.mkdir();
}
}
}
}
**
2、libs中的文件
**
其实在官方文档也可以看到这样说的:
(1)、如与第三方库集成,至少要保留armeabi目录。如第三方库有7个架构目录,比语音识别SDK多出2个目录 mips和mips64,请将mips和mips64目录删除,剩下5个同名目录合并。
(2)、如第三方库仅有armeabi这一个目录,请将语音识别SDK的额外4个目录如armeabi-v7a删除,合并armeabi目录下的so。 即目录取交集,so文件不可随意更改所属目录。
因为在百度语音识别和合成中,需要进行两次SDK的集成,这两次中的libs中的文件只能取交集,也就是有相同的文件夹就把相同的文件夹中的内容合并为一个,如果一边有一边没有,那就把这类文件夹删除了
另,附上地址,里面包含了百度语音识别和合成整合后的demo:https://git.oschina.net/lee_vane/BaiduVoiceRecognition