[人工智能] 在树莓派上把文字转成语音(Text
来源:[原创]在树莓派上把文字转成语音(Text-To-Speech/TTS)–编码无悔/Intent&Focused
转载请注明出处:http://www.codelast.com/
本文软硬件环境:树莓派:3代ModelBV1.2,内存1GBOS:ArchLinuxARM
有时候,我们需要在程序中添加文字转语音的功能,即通过某个程序或API,把输入的文字朗读出来,也就是通常所说的text-to-speech(简写为TTS)。我尝试了一个简单的方案——使用Espeak来完成这个任务,在这里记录下来。『1』TTS方案我们可以使用本地的TTS软件,也可以使用云端的TTS服务来实现文字转语音。使用本地TTS软件的好处就是不需要联网,云端的TTS服务通常提供更好的语音转换效果,不过也通常麻烦得多得多——例如,需要写程序来发送数据、接收返回数据等。本地的TTS软件非常多,例如Espeak,Festival等。我试了一下Espeak:
TexttoSpeechengineforEnglish,withsupport forotherlanguages.
也就是说Espeak是一个英语的TTS引擎,但同时也支持其他语言。文章来源:http://www.codelast.com/『2』硬件连接首先你要把可以播放声音的设备连接到树莓派上。使用有源音箱或者无源的耳机都可以。我使用的是耳塞,连接到树莓派的3.5mm音频输出接口上,如下图所示:注意连接的瞬间可能会发出强电流声(爆音),最好不要戴在耳朵上。文章来源:http://www.codelast.com/『3』Espeak安装、系统配置及使用安装非常简单:
1pacman-Sespeakalsa-utils其中,alsa-utils我记得是一个Espeak依赖的包,反正我装了。然而这样安装好之后,你还是无法使用它的。不信可以直接试试:
1espeak"hello"这是让Espeak朗读“hello”。通常情况下会直接报错:
ALSAlibconfmisc.c:767:(parse_card)cannotfindcard‘0’ALSAlibconf.c:4371:(_snd_config_evaluate)functionsnd_func_card_driverreturnederror:NosuchfileordirectoryALSAlibconfmisc.c:392:(snd_func_concat)errorevaluatingstringsALSAlibconf.c:4371:(_snd_config_evaluate)functionsnd_func_concatreturnederror:NosuchfileordirectoryALSAlibconfmisc.c:1246:(snd_func_refer)errorevaluatingnameALSAlibconf.c:4371:(_snd_config_evaluate)functionsnd_func_referreturnederror:NosuchfileordirectoryALSAlibconf.c:4850:(snd_config_expand)Evaluateerror:NosuchfileordirectoryALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMsysdefault……wave_open_sound>Pa_OpenStream:err=-9996(Invaliddevice)这是因为你需要让系统在启动的时候加载和音频相关的模块,修改/boot/config.txt,在里面添加上一句:
dtparam=audio=on
然后重启系统即可。文章来源:http://www.codelast.com/重启之后,你再执行上面的Espeak命令,会发现仍然输出类似于下面的一堆错误信息:
ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.frontALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.rearALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.center_lfeALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.sideALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround21ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround21ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround40ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround41ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround50ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround51ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.surround71ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.iec958ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.iec958ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.iec958ALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.hdmiALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.hdmiALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.modemALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.modemALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.phonelineALSAlibpcm.c:2450:(snd_pcm_open_noupdate)UnknownPCMcards.pcm.phonelineconnect(2)callto/dev/shm/jack-0/default/jack_0failed(err=Nosuchfileordirectory)attempttoconnecttoserverfailed但这并不影响使用,此时已经可以正常发声了。如果要让Espeak朗读中文,可以带参数这样执行:
1espeak-vzh"编程"文章来源:http://www.codelast.com/『4』使用感受最大的感觉就是朗读的语音“不自然”——完全是机器人在读的生硬感,而不是人类在读的顺畅感。并且,朗读的时候会带有比较明显的背景噪音。此外还有一个致命的问题:如果我让它朗读一个非常长的句子(无论是英文还是中文),那么它读着读着就会越来越慢,并且产生越来越大的电流噪音,就好像一个人已经上气不接下气了。这个奇怪的现象我还不知道是为什么。总之,如果拿来读很短的句子或者单词,效果还是勉强能接受的。如果要追求好的发声效果,还是要使用现在流行的一些云端服务,例如科大讯飞、百度的语音合成API等,它们不仅提供了良好的合成效果,并且还有很多可选的音色(男声,女声,成人声,小孩声,老人声,等等)。
人工智能教程系列二:文字朗读
文字朗读
2.1.简介
文字朗读是最基础的人工智能插件,在我们日常生活中,例如排队叫号,车站报播等等,包括比较智能的机器人,与人的语音交互,都是通过文字朗读进行实验的。
文字朗读作用就是:讲文字转换成语音,本文字朗读插件,除了支持中文朗读,还支持其他各国语言朗读。
2.2.实验条件
安装好Kittenblock
电脑可以播放声音(记得调整好音量)
畅顺的网络
(除此外,您无需购买小喵任何硬件套件,人工智能,小喵真的是做到普惠,希望各位老师多多支持!)
2.3.插件加载
双击打开Kittenblock,左下角加载插件
选择文字朗读插件
2.4.插件成功加载
文字朗读插件,只有3个积木块,使用非常简单
2.5.积木块具体介绍
朗读前必须设置朗读的语种,并且朗读的语种与你填写的内容要对应上,假设你设置朗读语种为英文,你朗读内容框应该填入英文字符串。
设置朗读的嗓音,英文可以设置成多种嗓音,但是中文只有一种(也就是对于中文朗读,嗓音设置无效)
朗读内容,需要根据你的朗读语种进行对应填写
错误示范与正确示范:
例如英文,可以设置多种嗓音
如果朗读中文,那就嗓音设置无效,那就干脆不设置了
精灵角色被点击,或者用按键检测,触发朗读
2.6.与Microbit交互的语音朗读
案例1:按键控制语音朗读
如果我手上有一个Microbit,我现在想做一个简单的实验,按键A键让电脑说出一句话来,按B键让电脑说出另外一句话来。
首先你要先将Microbit恢复固件,连接上串口(如果你对Kittenblock控制Microbit在线交互不熟悉,请看这里)
假设上面的步骤都没问题,我们编写程序
最后按Microbit的硬件按下A与按键B就有反应了。(如果没有反应肯定是你硬件串口没有连接)
案例2:超声波控制语音朗读
首先要接好喵家的超声波(喵家超声波接线方法)
总结:硬件与语音交互本质
硬件恢复固件后,串口与Kittenblock在线交互,例如按键触发,超声波距离触发,或者其他传感器触发。接着触发语音朗读的积木。
非常好理解,只需要你先把硬件恢复固件连接上串口即可实现在线交互。
2.7.疑问与解答
问1:为什么我按朗读没有反应?
答1:朗读语言与朗读的内容必须对应才有反应的。
问2:中文为什么不能设置嗓音?
答2:嗓音设置只能针对英文和其他几种语言,因为我们调用的是国外的服务器。中文那边嗓音只有一种
Next Previous