来自网友的树莓派 讯飞语音SDK,我在树莓派3B上进行验证;
tts sample 是离线tts合成;iat sample是离线识别;
转载来自:https://www.jianshu.com/p/efb15aaa2de9
1、下载讯飞SDK
请参考链接:http://blog.csdn.net/yanghuan313/article/details/50992909
因为科大讯飞官方在新版本SDK移除了树莓派的支持,我把以前的版本上传了,供大家使用:
https://github.com/Qianlitp/RaspberryPiSDK
2、安装
下载好SDK到用户目录后,可以在PC上下载后然后用FTP上传到树莓派 。然后把支持树莓派的动态库复制到系统目录。
pi@raspberrypi:~ $ sudo cp Linux_voice_1.109/libs/RaspberryPi/libmsc.so /usr/local/lib/
再复制头文件到系统目录
pi@raspberrypi:~ $ sudo cp Linux_voice_1.109/include/* /usr/local/include/
3、编译测试
完成以上步骤之后就可以编译SDK中自带的samples,以tts_sample为例。
pi@raspberrypi:~ $ cd Linux_voice_1.109/samples/tts_sample/
编辑32bit_make.sh文件,树莓派系统是32位系统,而且提供的SDK也是32位的
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ nano 32bit_make.sh
将export一行注释掉,文件内容如下:
#编译32位可执行文件
make clean;make
#设置libmsc.so库搜索路径
#export LD_LIBRARY_PATH=$(pwd)/../../libs/x86/
编辑Makefile文件
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ nano Makefile
将以下内容注释掉,因为我们刚才已经把动态库复制到系统目录下了,不需要再指定
#可根据实际需要修改,选择所需平台SDK,默认为x64或x86平台。
#ifdef LINUX64
#LDFLAGS := -L$(DIR_LIB)/x64
#else
#LDFLAGS := -L$(DIR_LIB)/x86
#endif
编译tts,编译成功后会在SDK根目录下的bin目录下生成tts_sample
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ source 32bit_make.sh
运行tts_sample,成功运行后会在同级目录下生成tts_sample.wav,调用mplayer播放测试
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ cd ~/Linux_voice_1.109/bin/
pi@raspberrypi:~/Linux_voice_1.109/bin $ ./tts_sample
pi@raspberrypi:~/Linux_voice_1.109/bin $ mplayer tts_sample.wav
4、实现文字转语音小工具
我们希望做成一个语音播放小工具,输入文字可以直接读出语音,比如可以这样用:
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ tts_sample "测试一下"
编辑tts_sample.c文件
我这里做了一些改动:名称改为iflytek_tts.c,代码上最后也把合成的wav删除,多余的打印也删除了,替换为omxplayer进行音频文件播放;
int main(int argc, char* argv[])
{
int ret = MSP_SUCCESS;
const char* login_params = "appid = 56ee43d0, work_dir = .";//登录参数,appid与msc库绑定,请勿随意改动
/*
* rdn: 合成音频数字发音方式
* volume: 合成音频的音量
* pitch: 合成音频的音调
* speed:合成音频对应的语速
* voice_name:合成发音人
* sample_rate: 合成音频采样率
* text_encoding: 合成文本编码格式
* 详细参数说明请参阅《iFlytek MSC Reference Manual》
*/
const char* session_begin_params = "voice_name = xiaoyan, text_encoding = UTF8, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2";
const char* filename = "tts_temp.wav";//合成的语音文件名称
const char* text = "亲爱的用户,您好,这是一个语音合成示例,感谢您对科大讯飞语音技术的支持!科大讯飞是亚太地区最大的语音上市公司,股票代码:002230"; //合成文本
if(argc < 2)
{
printf("usage:tts_sample 测试\n");
return -1;
}
text = argv[1];
/* 用户登录 */
ret = MSPLogin(NULL, NULL, login_params);//第一个参数是用户名,第二个参数是密码,第三个参数是登录参数,用户名和密码可在http://open.voicecloud.cn注册获取
if (MSP_SUCCESS != ret)
{
printf("MSPLogin failed, error code: %d.\n", ret);
goto exit ;//登录失败,退出登录
}
/* 文本合成 */
printf("开始合成 ...\n");
ret = text_to_speech(text, filename, session_begin_params);
if (MSP_SUCCESS != ret)
{
printf("text_to_speech failed, error code: %d.\n", ret);
goto exit ;
}
printf("合成完毕\n");
system("omxplayer tts_temp.wav");
exit:
MSPLogout(); //退出登录
return 0;
}
编译tts_sample
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ source 32bit_make.sh
将编译好的tts_sample复制到系统bin目录下
pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ cd ~
pi@raspberrypi:~ $ sudo cp Linux_voice_1.109/bin/tts_sample /usr/local/bin/
接上音箱测试
pi@raspberrypi:~ $ tts_sample "这只是一个测试"
作者:oldfool
链接:https://www.jianshu.com/p/efb15aaa2de9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
iat 这个sample 是离线识别改法和tts sample 一样的;
默认识别的是/bin/wav/iflytek02.wav这个文件,文本为中美速控;
自己从麦克风进行录制音频,按照讯飞sdk参数要求
arecord -d 3 -r 16000 -c 1 -t wav -f S16_LE test.wav
复制替换
mv test.wav ../../bin/wav/iflytek02.wav
重新执行
pi@raspberrypi:~/raspilab/iflytek/Linux_voice_1.109/bin$ ./iat_sample
########################################################################
## 语音听写(iFly Auto Transform)技术能够实时地将语音转换成对应的文字。##
########################################################################
演示示例选择:是否上传用户词表?
0:不使用
1:使用
0
开始语音听写 ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
语音听写结束
=============================================================
打开灯光关闭灯光,空调调到17度。
=============================================================
按任意键退出 ...
getconf LONG_BIT
返回32 就是32bit系统;
./tts_sample: error while loading shared libraries: libmsc.so: cannot open shared object file: No such file or directory
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
参考自:https://blog.csdn.net/onlyellow/article/details/80633124
LD_LIBRARY_PATH 重启后无效处理办法
在~/.bashrc 文件最后加上,
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
参考自:https://blog.csdn.net/weixin_34223655/article/details/85095183