JAVAJNI调⽤科⼤讯飞离线语⾳合成(Linux篇)JNI调⽤科⼤讯飞离线语⾳合成(Linux篇)
背景:,今天我们接着聊⼀聊在Linux系统中如何使⽤科⼤讯飞离线语⾳合成,我们这⾥以(ubuntu)为例。
这⾥着重感谢以下博友的优秀⽂章,给了我很⼤帮助
1. 开始编码
1.1 开始编写java代码
import flect.Field;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NativeKeDa {
private static final Logger LOGGER = Logger(NativeKeDa.class);
public static void setLibraryPath(String path)throws Exception {
System.setProperty("java.library.path", path);
final Field sysPathsField = DeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}
static{
// Linux系统中准备加载动态库(.so库)的位置
String javaLibraryPath ="/kedaxunfei/lib/";
try{
setLibraryPath(javaLibraryPath);
System.loadLibrary("kedaxunfei");
}catch(Exception e){
<(e.getMessage(), e);
<("Native code library failed to load.\n"+ e);
}
}
public native int text2Speech(String content, String params, String filePath);
public native void sayHello();
}
1.2 ⽣成.h 头⽂件
请参考
JNI调⽤科⼤讯飞离线语⾳合成(Windows篇)
blog.csdn/qq_34620527/article/details/89237601
1.3 编写 .cpp ⽂件,这⾥不能编写为 .c ⽂件,因为编写 .c ⽂件链接 libmsc.so 库时有问题
linux系统安装步骤csdn其他内容与.c ⽂件相同
char*jstringToChar( JNIEnv * env, jstring jstr )
{
char* rtn =NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("UTF-8");
jmethodID mid = env->GetMethodID(clsstring,"getBytes","(Ljava/lang/String;)[B");
jbyteArray barr=(jbyteArray)env->CallObjectMethod(jstr,mid,strencode);
jsize alen = env->GetArrayLength(barr);
jbyte * ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen >0)
{
rtn =(char*)malloc(alen+1);//new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0);
return rtn;
}
1.4 将.cpp ⽂件上传⾄Linux系统中,在.cpp⽂件⽬录中编译 .so ⽂件,这⾥需要使⽤ g++命令,命令如下:
g++-fPIC -D_REENTRANT -shared -o libkedaxunfei.so kedaxunfei.cpp-I "$JDKPath$/include"-I "$JDKPath$/include/linux"-I "./"/**/**/**/libmsc.so
注意:
libmsc.so 使⽤Linux中绝对路径
-I "./"这⾥将科⼤讯飞.h ⽂件和我们⽣成的.h ⽂件放到⼀起了,因此这⾥也可以省略
⾄此完成Linux JNI调⽤科⼤讯飞离线语⾳合成
欢迎⼤家留⾔技术交流
参考资料

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。