ROSパッケージ(gx_sound_player)を使ってUSBスピーカーから音楽再生する


目的

ROSパッケージ(gx_sound_player)を使ってUSBスピーカーから音楽再生しました。
再生するまでに何点か詰まった箇所がありましたので、実際に実施した確認手順とともに本記事にまとめさせて頂きます。

尚、本記事の内容は以下の記事をベースにしております。

gx_sound_player の紹介と ROS パッケージのリリース手順

準備

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

参考

gx_sound_player の紹介と ROS パッケージのリリース手順
フリーWave,MP3