目的
ROSパッケージ(gx_sound_player)を使ってUSBスピーカーから音楽再生しました。
再生するまでに何点か詰まった箇所がありましたので、実際に実施した確認手順とともに本記事にまとめさせて頂きます。
尚、本記事の内容は以下の記事をベースにしております。
準備
USBスピーカー :例えばこちら
Ubuntu16.04 + ROS kinetic環境
テスト用音楽ファイル(.wav) :例えばこちらからダウンロードさせて頂く
step1. USBスピーカーから音楽再生できることを確認
1.USBスピーカーをPCに接続する
2.サウンドデバイスがみえることをチェック
$ ls -l /dev/snd/*
⇒ pcmC1D0p などがみえるはず
(以降、pcmC1D0p がUSBスピーカーのデバイスファイルであることを前提)
3.aplayでWAVファイルを再生
$ aplay -D hw:1,0 musicbox.wav
⇒ USBスピーカーから音楽再生できればOK
USBスピーカーから音楽再生できなければ手順を見直します。
step2. gx-soundパッケージでWAVファイル再生できることをテスト
gx-soundパッケージをインストールする。
$ sudo apt install ros-kinetic-gx-sound
1.roscore起動
$ source ~/catkin_ws/devel/setup.sh
$ roscore
2.gx-soundノード起動
$ roslaunch gx_sound_player sound_player.launch device_name:="hw:1,0"
3.WAV再生
$ rosrun rulo sound-test.py
⇒ USBスピーカーから音楽再生できればOK
音楽ファイルを/home/ubuntu/Downloads/musicbox.wavに格納しておく
sound-test.py
# ! /usr/bin/env python
# -*- coding: utf-8 -*-
import actionlib
import os
import rospy
from gx_sound_msgs.msg import SoundRequestAction, SoundRequestGoal
def main():
rospy.init_node('sound_request_client_node')
client = actionlib.SimpleActionClient('/gx_sound_player/sound_player/sound_request', SoundRequestAction)
client.wait_for_server()
rospy.loginfo("connected to actionlib server")
now = rospy.Time.now()
# 0秒後に audio3.wav を再生
# 音楽ファイルを/home/ubuntu/Downloads/musicbox.wavに格納しておく
goal1 = SoundRequestGoal(stamp=now + rospy.Duration(0.0), file="/home/ubuntu/Downloads/musicbox.wav")
rospy.loginfo("send request")
client.send_goal(goal1)
rospy.loginfo("send complete")
#client.wait_for_result(rospy.Duration.from_sec(5.0))
if __name__ == '__main__':
main()
音声停止方法
無音ファイルをsendすればOK
無音ファイルはこちらからダウンロードさせて頂きます。
Error対策
gx-soundパッケージが見つからない状況になった場合
gx-soundパッケージインストール
$ sudo apt install ros-kinetic-gx-sound
ros-kinetic-gx-sound not found
以下の通りパッケージリストを更新して解決しました。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-get update
--
音声フォーマットエラーになった場合
ffpmegでフォーマット変換すれば解決しました。
音声ファイルを48000Hz, 16bit LittleEndian, stereoに変換する方法
$ sudo apt-get install ffmpeg
$ ffmpeg -i input.wav -ar 48000 -format S16_LE -channel 2 output.wav