ROS语音交互 —— sound_play
ROS语音交互 - sound_play
Introduction of sound_play package
audio_common
是一个第三方音频开发包,它实现了音频驱动以及相关的 ROS 消息机制。它包含如下几个库:
1)audio_capture: 从麦克风采集声音
2)audio_play: 从 audio_capture 收集声音并通过声卡播放
3)audio_common_msgs: 声音传输的消息定义
4)sound_play: 播放声音和语音合成
我们这里主要使用的是最后这个sound_play
,它的主要的功能包括:
1)声卡驱动;
2)播放声音(wav、ogg);
3)语音合成(仅限英文)
同时它支持 C++ 以及 python 接口,使得开发者可以不用关心底层的驱动和算法。
sound_play
提供一个node,可以把topic中的commands转化为语音, 该node支持内建语音,播放OGG/WAV文件,以及通过festival做语音合成功能。
参考链接:
Install sound_play
下载 sound_play 功能包并编译
1)新建一个~/ros_workspace/src/
目录后从github直接clone
git clone https://github.com/ros-drivers/audio_common.git
2)返回~/ros_workspace/
目录下使用rosdep安装依赖
rosdep install sound_play
如果所有依赖库都已安装会显示,没有的话会自行安装:
#All required rosdeps installed successfully
3)最后在同一目录下编译即可:
catkin_make
Usages
Test for sound_play
1)运行roscore:
roscore
2)新开一个terminal窗口并cd到之前创建的~/ros_workspace/
目录下source:
source devel/setup.bash
3)启动节点:
rosrun sound_play soundplay_node.py
如果显示类似以下信息则表示节点打开成功:
[INFO] [WallTime: 1448443557.340794] sound_play node is ready to play sound
Play sound
1)测试播放内置声音:
我们使用系统内置的声音进行播放,运行如下命令:
rosrun sound_play playbuiltin.py 2
如果听到两声锣声则表示运行成功。
2)测试播放 WAV 或 MP3 等声音:
使用 play.py 这个例子即可,后面的是我的 wav 文件路径,使用时修改成自己的:
rosrun sound_play play.py /home/zacdeng/Music/a2002011001-e02-ulaw.wav
**注意:文件路径必须是绝对路径,不要使用~/
**
或者播放 MP3 文件:
rosrun sound_play play.py /home/zacdeng/Music/a2002011001-e02-128k.mp3
正常情况下它会显示:
Playing “/home/zacdeng/Music/a2002011001-e02-128k.mp3”.
3)测试语音合成:
这是比较吸引人的一个功能,它使用了 text2wave
库将一段文本转成语音再进行播放。调用的例子如下:
rosrun sound_play say.py 'Hello world'
正常情况下它会显示:
Saying: Hello World
Voice: voice_kal_diphone
Volume: 1.0
注意:输入文本必须是英文,暂时不能播放中文
如果你听到一段蹩脚的英文朗读 Hello World 那么这个例子你也运行成功了。由于音频库大小问题,这个合成效果可能不太自然,有兴趣的同学可以根据 参考 研究下 text2wave
库怎么替换下别的声音。
大概整个使用流程就是这么多了,如果有遇到其他问题可以参考上面提到的博客!Good Luck!