树莓派 Step by Step之智能语音(讯飞)

来自网友的树莓派 讯飞语音SDK,我在树莓派3B上进行验证;

tts sample 是离线tts合成;iat sample是离线识别;

离线TTS合成

转载来自: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/

export LD_LIBRARY_PATH=$(pwd)/../../libs/RaspberryPi/

编辑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

LDFLAGS := -L$(DIR_LIB)/RaspberryPi

编译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度。
=============================================================
按任意键退出 ...

其它

  • 如何确认系统是32bit还是64bit

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

参考自:关于cannot open shared object file: No such file or directory 的解决_onlyellow的博客-CSDN博客

  • LD_LIBRARY_PATH 重启后无效处理办法

在~/.bashrc 文件最后加上,


export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

参考自:linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH_weixin_34223655的博客-CSDN博客

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值