ROS学习--语音合成&语音识别

说明

前一篇的语义理解主要是跑通ROS Node的一个流程,下面开发的语音Node略有点实际意义,其中构建node的过程,如同语义理解Node,略有不同。

整理的代码放在github上,语音合成https://github.com/roboyun/ros_tts,语音识别https://github.com/roboyun/ros_asr

准备

在开始之前,先做一些准备工作,就是播放音频和录音相关的代码。因为树莓派本身没有录音的接口,所以需要外接一个usb声卡。音频输出暂时直接用树莓派上面的耳机接口。

测试播放mp3

首先用mplayer播放一下mp3,一般是可以听见的。
当然可以直接在python中调用mplayer区播放mp3,
import os
os.system('mplayer out.mp3')
或者
import subprocess
subprocess.call('mplayer out.mp3',shell=True)
或者
subprocess.Popen(['mplayer','out.mp3'])

测试录音

录音可以用arecord
$ sudo apt-get install alsa-utils
这个工具包包含
alsactl, aconnect, alsamixer, amidi, amixer, aplay, aplaymidi, arecord, arecordmidi,
aseqnet, iecset, speaker-test
我们只使用其中的arecord
$ arecord -D 'plughw:1,0' -d 10 test.wav
-D表示设备,外接的usb录音设备,如果不是在树莓派上测试,这个会不一样
-d 10 表示录制10秒钟的时间
-t 表示type,可以加参数-t wav也可以不加
最后是文件名。
录完之后可以用aplay或者mplayer播放,有一个问题是当录音距离比较远的时候,声音很小。alsamixer有一个在命令行之下的图形界面,可以对不同的声卡调节音量,我实验了下录音mac的音量,并没有改变。

实验完成以后写两个服务很简单,代码放在上面给出的github地址,这里就不贴了。

TODO

语音识别这个node还是有很多工作需要做的,比如应该将模块改为publisher/subscriber模式,在运行过程中一直保持着语音监听,还有就是语音识别中通常需要的端点检测,流失识别等。

你可能感兴趣的:(机器人)