博舍

[人工智能] 在树莓派上把文字转成语音(Text 人工智能朗读文字怎么写

[人工智能] 在树莓派上把文字转成语音(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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇