[ROS]オフライン音声再生
移動ロボットなどインターネットにつながっていないPCで音声を再生する方法を試しました。
ROS audio_common Packageのsound_playを使います。
試した環境
Ubuntu20.04, ROS noetic
Windows11 WSL2, Ubuntu20.04, ROS noetic
音声再生パッケージ sound_playの使い方
インストール
$ sudo apt-get install ros-noetic-sound-play
ノードを起動する
$ roslaunch sound_play soundplay_node.launch
テストしてみる
別のターミナルを開き、下記のコマンドを実行するとテストが実行されます。
$ rosrun sound_play test.py
[INFO] [1668408042.225281]: This script will run continuously until you hit CTRL+C, testing various sound_node sound types.
[INFO] [1668408042.227821]: wave
[INFO] [1668408044.250219]: quiet wave
[INFO] [1668408046.274122]: plugging
[INFO] [1668408048.277964]: quiet plugging
[INFO] [1668408050.282618]: unplugging
[INFO] [1668408052.285954]: plugging badly
[INFO] [1668408054.289835]: unplugging badly
[INFO] [1668408056.334298]: New API start voice
[INFO] [1668408059.337887]: New API start voice quiet
[INFO] [1668408062.344257]: New API wave
[INFO] [1668408064.348993]: New API wave quiet
[INFO] [1668408066.354983]: New API builtin
[INFO] [1668408068.359735]: New API builtin quiet
[INFO] [1668408070.365346]: New API stop
音声ファイルを再生してみる
WAV形式やOGG形式の音声ファイルを再生できます。
$ rosrun sound_play play.py --help
$ rosrun sound_play play.py /opt/ros/noetic/share/sound_play/sounds/say-beep.wav
$ rosrun sound_play play.py /opt/ros/noetic/share/sound_play/sounds/BACKINGUP.ogg
内蔵サウンドを再生してみる
$ rosrun sound_play playbuiltin.py --help
$ rosrun sound_play playbuiltin.py 2
組み込み音声の一覧を表示する
$ cat `rospack find sound_play`/msg/SoundRequest.msg
音声合成(TTS)を試してみる
$ rosrun sound_play say.py --help $ rosrun sound_play say.py 'Hello world'
$ echo Hello again | rosrun sound_play say.py
Pythonプログラムから音声を再生する
サンプルプログラム
sample_sound.py
#!/usr/bin/env python3
import sys
import rospy
from sound_play.msg import SoundRequest
from sound_play.libsoundplay import SoundClient
rospy.init_node('sample_sound', anonymous=True)
soundhandle = SoundClient()
rospy.sleep(1)
voice = 'voice_kal_diphone'
volume = 1.0 #ボリューム (0:ミュート、1.0:最大)
# 音声ファイルを再生する
soundhandle.playWave('/opt/ros/noetic/share/sound_play/sounds/say-beep.wav', volume)
rospy.sleep(2)
# 内蔵音声を再生する
soundhandle.play(3, volume)
rospy.sleep(2)
# 音声合成を試す
soundhandle.say("Hello World!", voice, volume)
rospy.sleep(2)
実行方法
sound_playノードを起動します。
$ roslaunch sound_play soundplay_node.launch
別のターミナルを開き、Pythonプログラムを実行して下さい。
$ rosrun ./sample_sound.py
この記事が気に入ったらサポートをしてみませんか?