我爱编程树莓派笔记树莓派语音开发笔记

【笔记】树莓派使用讯飞SDK实现语音识别跟语音播报

2017-11-08  本文已影响524人  oldfool

之前我们已经配置好了麦克风并且实现的正常的录音功能。现在我们就将录制的语音通过讯飞的SDK转换成文字,反过来也可以。由于讯飞SDK已经不支持树莓派,我从网上找到先前发布的支持树莓派的版本,主要参考网上大佬的文章:http://blog.csdn.net/yanghuan313/article/details/50992909, 如果有侵犯到大佬的地方,请告知,立马删除。我们尝试把它改造成两个小工具,可以方便我们用来实现语音跟文字的相互转换。

实验环境

硬件:树莓派3b一台、usb声卡一个、麦克风一个

操作系统:Raspbian with Desktop

操作步骤

1、下载讯飞SDK

请参考链接:http://blog.csdn.net/yanghuan313/article/details/50992909

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文件

pi@raspberrypi:~ $ cd Linux_voice_1.109/samples/tts_sample/

pi@raspberrypi:~/Linux_voice_1.109/samples/tts_sample $ nano tts_sample.c

将main函数修改为如下,当然也可以把那些打印信息删除,暂且保留吧

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_sample.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###########################################################################\n");

printf("## 语音合成(Text To Speech,TTS)技术能够自动将任意文字实时转换为连续的 ##\n");

printf("## 自然语音,是一种能够在任何时间、任何地点,向任何人提供语音信息服务的  ##\n");

printf("## 高效便捷手段,非常符合信息时代海量数据、动态更新和个性化查询的需求。  ##\n");

printf("###########################################################################\n\n");

/* 文本合成 */

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("mplayer tts_sample.wav");

exit:

//printf("按任意键退出 ...\n");

//getchar();

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 "这只是一个测试"

5、实现语音转文字小工具

对sample/iat_sample稍作修改并编译即可。需要注意的是传入的音频必须是单声道、16位、16000HZ采样率,可以调用arecord来录制

pi@raspberrypi:~ $ arecord -r 16000 -c 1 -t wav -f S16_LE test.wav

更多

【笔记】树莓派使用FTP软件传输文件


关注微信公众号及时获取更新文章,欢迎大家跟我交流技术与想法:

上一篇 下一篇

猜你喜欢

热点阅读