[ROS] 安装 sound_play 驱动及播放、合成声音

相关简介:
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 接口,使得开发者可以不用关心底层的驱动和算法。

0、安装环境:
Ubuntu 14.04
ROS indigo
audio_common 0.2.8

1、下载源码:
sound_play 源码地址如下,它是 audio_common 的一个组件,我们这里将整个 audio_common 库下载:
https://github.com/ros-drivers/audio_common

我这里使用的是 0.2.8 版,您可以在以上地址下载更新版本,或者直接使用我这里的源码包:
audio_common-master.zip

2、编译源码:
1)在你的 ROS 工作区新建一个 audio 目录作为 audio 的 workspace,比如我这里为 ~/rosbuild_ws/package_dir/audio,后面简称为 AUDIO_WORKSPACE_PTAH:

2)在下面再新建 src 源码目录以及 audio_common 子目录:

3)将刚才下载的代码解压缩并拷贝到该 src 目录下。

4)在 AUDIO_WORKSPACE_PTAH 目录执行如下命令:

如果所有依赖库都已安装会显示:
#All required rosdeps installed successfully

如果没有的话则会自动进行安装。

5)在 AUDIO_WORKSPACE_PTAH 目录运行 catkin_make 编译:

3、运行节点:
1)运行 roscore:

2)新开一个 terminal 窗口进入 AUDIO_WORKSPACE_PTAH 并配置环境:

3)在刚才新打开的 terminal 窗口运行节点:

如果显示类似以下信息则表示节点打开成功:
[INFO] [WallTime: 1448443557.340794] sound_play node is ready to play sound

4、测试播放:
打开新的 terminal 窗口进行测试。

1)测试播放内置声音:
我们使用系统内置的声音进行播放,运行如下命令:

如果听到两声锣声则表示运行成功。

2)测试播放 WAV 或 MP3 等声音:
使用 play.py 这个例子即可,后面的是我的 wav 路径,你可以修改成你自己的:

或者播放 MP3 文件:

正常情况下它会显示:
Playing "/home/skylook/Music/a2002011001-e02-128k.mp3".

为了方便你测试,我把这两个文件附在这里,你可以下载使用:
sample_sounds.zip

内容试听如下:
WAV:
MP3:

如果你听到了一段古典音乐,那么就说明播放成功了。

3)测试语音合成:
这是比较吸引人的一个功能,它使用了 text2wave 库将一段文本转成语音再进行播放。调用的例子如下:

正常情况下它会显示:
Saying: Hello World
Voice: voice_kal_diphone
Volume: 1.0

如果你听到一段蹩脚的英文朗读 Hello World 那么这个例子你也运行成功了。由于音频库大小问题,这个合成效果可能不太自然,有兴趣的同学可以参照参考文献 [3] 研究下 text2wave 库怎么替换下别的声音。

关于 sound_play 的编译调试和运行就说明到这里了。

常见问题:
1)错误: package 'gstreamer-1.0' not found
该错误是由于没有安装 gstreamer 引起,请使用如下命令安装相关 gstreamer 库:

2)错误:Error opening pygst.
在执行命令:

时可能出现如下错误:
No handlers could be found for logger "rosout"

**************************************************************
Error opening pygst. Is gstreamer installed? (sudo apt-get install python-gst0.10
**************************************************************

请参照提示执行如下命令安装即可:

3)错误:sh: 1: text2wave: not found
在测试 say.py 的时候可能出现如下错误而无法发出声音:
sh: 1: text2wave: not found
[ERROR] [WallTime: 1448277178.711451] Sound synthesis failed. Is festival installed? Is a festival voice installed? Try running "rosdep satisfy sound_play|sh". Refer to http://wiki.ros.org/sound_play/Troubleshooting
[ERROR] [WallTime: 1448277178.712974] Exception in callback: 'NoneType' object has no attribute 'command'

这是由于没有安装相应的依赖库 festival and festvox-kallpc16k,使用如下命令进行安装:

4)错误:asoundconf: command not found
在教程中使用 asoundconf 进行默认声卡配置的时候,会遇到如下错误:
asoundconf: command not found

该错误的原因是 asoundconf 已经过期了。其实通常情况下我们没有必要选择默认声卡,如果需要的话可以在 Setting -> Sound 界面进行设置。至于替换 asoundconf 的工具我也没有找过。

5)错误:Sound command issued
运行例子 say.py 等时,如果出现如下警告:
[WARN] [WallTime: 1448443406.273976] Sound command issued, but no node is subscribed to the topic. Perhaps you forgot to run soundplay_node.py?

请根据提示在新 terminal 窗口运行:

参考文献:
[1] http://wiki.ros.org/sound_play
[2] http://wiki.ros.org/sound_play/Tutorials/ConfiguringAndUsingSpeakers
[3] http://ubuntuforums.org/showthread.php?t=751169

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注