見出し画像

[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


この記事が気に入ったらサポートをしてみませんか?