質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

4回答

2133閲覧

cronでmp3をbluetoothスピーカーで再生できない(Raspberry Pi 400)

yuta.kamoi

総合スコア11

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2022/01/11 06:11

編集2022/01/11 12:51

閲覧ありがとうございます。
Raspberry Pi 400でcronでmp3ファイルを再生できません。
crontab -eで

cron

1*/1 * * * * mpg321 ~/test.mp3

というコードを書き込んだのですが再生されません。
mpg321はインストール済みで、cronではなくターミナルでmpg321 ~/test.mp3と実行すると問題なくbluetoothスピーカーから再生されます。
また、crontabのコマンドの部分をecho 'hello' > ~/hello.txtとすると問題なくhello.txtが生成されるのでcronも問題なく動作しているようです。
再生はされているものの音声出力がbluetoothスピーカー以外で再生しているのかもしれませんが対処法がわかりません。
cronで実行されるコマンドは違うユーザーで実行されると聞いたのでそのせいかもしれません。
試したこととしては普段使っているpiユーザーで実行しようと思いコマンドをsudo -u pi mpg321 ~/test.mp3としましたがダメでした。

色々と原因を探っているのですがaxmier controlsを行うと
numid=4,iface=MIXER,name='Master Playback Switch'
numid=3,iface=MIXER,name='Master Playback Volume'
numid=2,iface=MIXER,name='Capture Switch'
numid=1,iface=MIXER,name='Capture Volume'
と表示されるのですがcronでamixer controls > ~/test.txtと出力して確認すると
numid=5,iface=MIXER,name='PCM Playback Volume'
numid=4,iface=PCM,name='ELD'
numid=3,iface=PCM,name='IEC958 Playback Default'
numid=2,iface=PCM,name='IEC958 Playback Mask'
numid=1,iface=PCM,name='Playback Channel Map'
と表示されています。これはbluetoothスピーカーでないもので再生しようとしているのでしょうか。
amixer controlsをcronでないときと同じ設定にする方法はでしょうか。

また、プレイヤーが悪いのかと思い別のメディアプレイヤー(mplayer)をインストールして試したところmplayer [音声ファイル]とすると再生されるもののsudo mplayer [音声ファイル]とすると再生されません。
下記リンクのスクショのように、
AO: [pulse] Init failed: Connection refused
と表示されて代わりにalsaというものを使用して再生しようとしているように見えるのですがpulseで再生をする方法はあるでしょうか。
https://dotup.org/uploda/dotup.org2694773.png

どうにかcronでbluetoothスピーカーからmp3ファイルを再生したいです。
追加で必要な情報があれば教えて頂けると幸いです。
ご回答よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

以下の様に export XDG_RUNTIME_DIR="/run/user/1000"; を追加してみて下さい

#0 9 * * * mpg321 /tmp/hoge.mp3 2>/dev/null 0 9 * * * export XDG_RUNTIME_DIR="/run/user/1000";mpg321 /tmp/hoge.mp3 2>/dev/null

ちなみにmpg123でも同じです

0 9 * * * export XDG_RUNTIME_DIR="/run/user/1000";mpg123 /tmp/hoge.mp3 2>/dev/null

投稿2023/01/19 09:44

編集2023/01/19 10:41
nopnop2002

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cronで実行されるコマンドは違うユーザーで実行されると聞いたのでそのせいかもしれません。

いいえ。
ユーザーAでcrontab -eを実行して書き込んだ場合、そのコマンドはユーザーAで実行されます。

実行したいユーザーでcrontab -eしましょう。
ファイルのパスもそのユーザーの視点で指定します。よくわからない場合は、コマンドやファイルは常にフルパス(絶対パス)を書きましょう。

また、cronからの実行では環境変数はほとんど指定されないので、必要な環境変数があれば、

crontab

1AAAAA=BBBBB 2XXXXX=YYYYY 3*/1 * * * * mpg321 ~/test.mp3

のようにcrontabファイル内で指定します。
なお、環境変数の値部分で環境変数は参照できません(シェル設定ファイルに書くようなFOO_DIR=$HOME/fooというような書き方は不可という意味)。

投稿2022/01/11 08:07

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta.kamoi

2022/01/11 08:14 編集

ご回答ありがとうございます! なるほど!使用しているラズベリーパイは今日開封したばかりの新品でユーザーも一つしかないのでユーザーの問題ではなさそうです。勘違いしていました。 フルパスで /bin/usr/mpg321 /home/pi/Music/test.mp3としてもダメだったので環境変数?というもののせいかもしれません! 環境変数についてと、mpg321の実行に必要な環境変数について調べてみます。
guest

0

mpg231 と mp3 をフルパスで書いたら?

投稿2022/01/11 06:24

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta.kamoi

2022/01/11 06:46

ご回答ありがとうございます! crontab -e のコマンドをmpg321 /home/pi/Music/test.mp3にしましたが再生されませんでした。cronでなく普通にmpg321 /home/pi/Music/test.mp3と入力したときは再生されました。 リンクを参考にhomeに以下の内容のtest.shを作りました。 #!/bin/sh mpg321 --gain 25 /home/hoge/chime.mp3 crontab -eのコマンドをroot /home/pi/test.shとしましたが再生されませんでした。
yuta.kamoi

2022/01/11 06:53

cronでなく、コマンドでsh /home/pi/test.shと入力すると問題なく再生されました。sudo sh /home/pi/test.shでは再生されませんでした。root /home/pi/test.shはrootコマンドがありませんと表示されました。 すべてcrontab -eでも試しましたがどれも再生されませんでした。
takasima20

2022/01/11 06:54

いや mpg321 もフルパスでって意味だったんスけど…
yuta.kamoi

2022/01/11 07:06

ありがとうございます!コマンドにフルパスがあるということを知りませんでした汗すみません。 /usr/bin/mpg321 /home/pi/Music/test.mp3は問題なく再生されたのですが、crontab -eに同じコマンドを書いても再生されませんでした。 また、test.sh内のコマンドもフルパスに書き直してsh /home/pi/test.shと入力すると再生されたのですが、cronではコマンドをroot /home/pi/test.shにしてもsh /home/pi/test.shにしても再生されませんでした。
takasima20

2022/01/11 07:11

ちなみにスピーカーはどうなってますか? (ハードウェア的な意味で)
yuta.kamoi

2022/01/11 07:20

ご返答ありがとうございます! AnkerのSoundCore2というスピーカーをbluetoothでつなげています!
takasima20

2022/01/11 07:27

ん~ 環境変数でなんか関係ありそうなの設定してないスかね? わかったらそれをシェルスクリプトに追記すればあるいは
guest

0

sudo噛ませてみてはどうでしょうか?

投稿2022/01/11 06:21

編集2022/01/11 06:26
yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta.kamoi

2022/01/11 06:40 編集

ご回答ありがとうございます! crontab -eのコマンドをsudo mpg321 /home/pi/Music/test.mp3としましたが再生されませんでした。 cronでなくてもsudo mpg321 /home/pi/Music/test.mp3と入力すると音が再生されないのでcronのコマンドがsudoで実行されてしまっているのではないかと考えています。 cronでなくターミナルでmpg321 /home/pi/Music/test.mp3と入力すると問題なく再生されます。
yambejp

2022/01/11 06:42

cronユーザーにきちんと設定していますか?
yuta.kamoi

2022/01/11 06:49

ありがとうございます! 当方UNIXやラズパイやコマンドラインには慣れておらず知識が少なくて恐縮なのですが、cronユーザーというものが調べてもよくわかりませんでした汗
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問