700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php调用科大讯飞离线语音合成linux sdk

php调用科大讯飞离线语音合成linux sdk

时间:2020-10-03 23:39:25

相关推荐

php调用科大讯飞离线语音合成linux sdk

背景

要使用tts功能,文字转语言文件。目前已采用百度在线web api接口实现了联网版,现需要现实离线版。故采用科大讯飞的离线语音合成sdk,但是对于linux的sdk官方只有c语言的api接口,现提供php调用该c语言接口的方式。

步骤

一、下载资源包

访问科大讯飞官网下载对应版本sdk包: /services/offline_tts

本文只下载了离线语音合成功能的sdk包,重要结构目录为下:

├─bin(如果运行demo后,生成的可执行文件会生成在该目录下)

│ └─msc(离线资源目录)

├─doc(文档目录)

├─include(c语言头文件目录)

├─libs(调用动态扩展库目录)

└─samples(各功能案例目录

│ └─tts_offline_sample(离线语音合成案例目录)

二、php构建自定义扩展模块

构建自定义扩展模块需要ext_skel这个文件,如果php是通过yum方式安装的话,就没有这个文件,需要去官网下载对应已安装版本php源码,再将需要文件拷贝到已安装的php目录下。如果php是源码方式安装的话,则本身源码目录下就会有。

本文适用于yum方式已经安装过php的情况

1、前提准备

安装php-devel包

yum -y install php-devel

下载对应版本php源码: /distributions/php-5.4.16.tar.gz

将下载的php源码中ext目录下的 skeleton目录 和 ext_skel文件 都拷贝到linux中已安装的php的ext目录下(我的目录为/usr/include/php/ext/,以下代码均以该目录为基本进行书写,使用时注意按实际情况替换路径)

将科大讯飞sdk包中libs包中对应版本的libmsc.so复制到/usr/lib64文件夹下

2、构建扩展库

#cd到已安装的php目录下cd /usr/include/php/ext#使用ext_skel生成自定扩展模块目录./ext_skel --extname=tts_offline#此时ext目录下会生成tts_offline目录,cd到该目录下cd ./tts_offline#编辑config.m4文件vi config.m4

在config.m4文件约16-18行位置处改为下面的内容(其实就是删除了注释符dnl):

PHP_ARG_ENABLE(hello, whether to enable hello support,

dnl Make sure that the comment is aligned:

[ --enable-hello Enable hello support])

#然后再使用phpize生成.configure等文件phpize#修改生成的php_tts_offline.h文件,该文件为自定义php方法头文件vi php_tts_offline.h

在文件中 PHP_FUNCTION(confirm_tts_offline_compiled); 后另起一行,添加 PHP_FUNCTION(text_to_speech);

(注意分号要有,新加的这句话就表示定义了一个名为text_to_speech的php方法,后续也是通过这个方法实现调用c的api)

#编辑tts_offline.c文件,实现调用api的代码逻辑vi tts_offline.c

在文件中 PHP_FE(confirm_hello_compiled, NULL) 位置后另起一行,增加如下内容 PHP_FE(text_to_speech, NULL)

(注意没有分号)

然后在该文件末尾则增加text_to_speech方法的代码实现内容(以下为调用科大讯飞离线接口的大体结构,详细代码可以参考samples中的tts_offline_sample.c代码):

PHP_FUNCTION(text_to_speech)

{

char* text;

int text_len;

char* filename;

int filename_len;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “ll”, &text, &text_len, &filename, &filename_len) == FAILURE) {

return;

}

#以上代码表示接受入参,text存放第一个入参的值,text_len存放第一个入参的长度,filename存放第二个入参,filename_len存放第二个入参的长度。一定要有参数接收入参长度才可以,即时你不需要这个参数,否则会报错。其中的“ll”表示text_to_speech这个php方法会有两个入参,类型为string#以下为调用科大讯飞api的代码,具体实现可以参考samples文件中的tts_offline_sample.c。#需要注意的是调用MSPLogin时,work_dir参数的值为科大讯飞sdk包中msc目录路径,否则会报错读取不到资源。还有就是样例中的头文件也要引入进来

MSPLogin(……);

QTTSSessionBegin(……);

QTTSTextPut(……);

QTTSSessionEnd(……);

}

上述tts_offline.c文件编辑完成后,就可以制作自定义so动态库了

#进行配置,期间如果报错,缺少什么库装什么库/.configure#由于依赖科大讯飞提供的so动态库,所以需加LDFLAGSmake LDFLAGS=-lmsc#拷贝生成的自定义扩展库的so文件到php的模块目录下cp ./modules/tts_offline.so /usr/lib64/php/modules/#在php.ini文件中增加扩展库引入vi /etc/php.ini

文件中增加 extension=tts_offline.so 这段内容,表示引入刚刚自建的库(也可以不加这个,那就要在php文件里加上 dl(“tts_offline.so") 这段代码)

#测试是否成功php -r "text_to_speech('语音合成测试','test.wav');"

本文出处: /qq_35706916/article/details/95470105

转载请注明出处

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。