根据百度的语音识别例子,展示C如何调用C++库
2018-06-18 04:15:04来源:未知 阅读 ()
刚才无聊摆弄了一下百度的语音识别RestAPI,看到语音识别的Sample是用C++写的,一共有三个组件,libcurl.a、libjson.a、base64.cpp,在编译时出现Json::Reader未定义引用的错误。想着还是用C重写一下这个例子吧。RestAPI的调用方式是先用过SKey获得Token,然后把音频(例如:test.pcm)通过Base64编码成字符串附加到地址中,通过curl的方式post到语音识别平台,返回JSON获取音频结果。作者重写代码时json组件没有用libjson.a,而是用的cJSON组件,会在另一篇文章展示如何用cJSON。Base64的编码功能还是用的Base64.cpp这个文件。
因为C语言没有类的概念,C代码在调用C++编译的库的时候要在C++代码中添加一段可以被C调用的函数。在对音频编码时需要用到的是
std::string base64_encode(unsigned char const *bytes_to_encode, unsigned int in_len)
这个方法,看到是string类型,C标准没有这个类型,所以我们在写被C调用的方法时要把string转换成char*,作者不太会说,所以还是用代码来说话吧。
#ifdef __cplusplus
extern "C" {
#endif
//把被调用的方法放在这里
char *callBase64Encode(unsigned char const *bytes_to_encode, unsigned int in_len)
{
std::string ret;
ret = base64_encode(bytes_to_encode, in_len);
char *c;
const int len = ret.length();
c = new char[len + 1];
strcpy(c, ret.c_str());
return c;
}
#ifdef __cplusplus
}
#endif
在base64.cpp文件中添加上面的代码,上面的代码就是定义可以被C语言调用的方法,方法开头定义的是char*,因为代码的后部分获取到编码的值后通过
char *c;
const int len = ret.length();
c = new char[len + 1];
strcpy(c, ret.c_str());
return c;
这几行代码将string类型的字符串转换成了char*类型的字符串。
然后在base64.h头文件中添加
#ifdef __cplusplus
extern "C" {
#endif
char *callBase64Encode(unsigned char const *bytes_to_encode, unsigned int in_len);
#ifdef __cplusplus
}
#endif
上方法,在C代码中引用#include <base64.h>这个头文件,然后通过
g++ base64.cpp -fPIC -shared -o libase64.so
把base64代码编译成libase64.so链接库文件,再通过
gcc cJSON.c sample.c -L . -lase64 -lstdc++ -o sample -lm
我们的sample.c代码就可以调用libase64.so的方法了,结果如下:
json的speech值就是对音频进行编码后的字符串。
微信原文地址:http://mp.weixin.qq.com/s?__biz=MzA4NTU0OTU5MA==&mid=2247483660&idx=1&sn=8c02f0084d96de49596899484bd876e9&chksm=9fd77675a8a0ff63e0f61cc1e77e0a4a6e2fcc2ed62dcf8e5d75e9d20826bbc93c4679908594#rd
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:0X02 C语言概述
- Z 字形变换 2020-04-14
- ACM | 算法 | 快速幂 2019-12-04
- 矩阵乘法(三):根据要求构造矩阵进行快速幂运算 2019-09-04
- STL用法整理 2019-04-11
- 关于高斯消元 2018-10-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash