🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

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

Q&A

解決済

1回答

2759閲覧

ラズパイ systemd usbスピーカーから音(pygame)が出ない

tamap

総合スコア12

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

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

0グッド

1クリップ

投稿2020/12/14 07:21

編集2020/12/17 04:22

前提・実現したいこと

pygame、USBスピーカーを利用しています。
プログラムを直で起動すると音がでるのですが、
service登録したら、音がでません。。

発生している問題・エラーメッセージ

エラーは出ていません。一応 status叩いた結果を下記に。

pi@raspberrypi:~ $ sudo systemctl status voiceTest.service ● voiceTest.service - do something Loaded: loaded (/etc/systemd/system/voiceTest.service; enabled; vendor preset: enabled) Active: inactive (dead) since Mon 2020-12-14 16:15:54 JST; 2s ago Process: 1671 ExecStart=/usr/bin/python /home/pi/Desktop/testPygame2.py (code=exited, status=0/SUCCESS) Main PID: 1671 (code=exited, status=0/SUCCESS) 12月 14 16:15:50 raspberrypi systemd[1]: Started do something. 12月 14 16:15:54 raspberrypi python[1671]: pygame 1.9.4.post1 12月 14 16:15:54 raspberrypi python[1671]: Hello from the pygame community. https://www.pygame.org/contribute.html 12月 14 16:15:54 raspberrypi python[1671]: 声が聞こえる? 12月 14 16:15:54 raspberrypi python[1671]: /home/pi/Desktop/voice/01.mp3 12月 14 16:15:54 raspberrypi systemd[1]: voiceTest.service: Succeeded.

該当のソースコード(サービス)

voiceTest.service の内容です

[Unit] Description=do something [Service] ExecStart=/usr/bin/python /home/pi/Desktop/testPygame2.py [Install] WantedBy=user@.service

該当のソースコード(python mp3)

testPygame2.py の内容です

import pygame.mixer import time import random # voice list voiceList = ['01.mp3','02.mp3'] # rasp only voiceDirectory = '/home/pi/Desktop/voice/' def voiceWhenDoorOpen(boxNo): global globalName, voiceDirectory, voiceList mp3data = voiceDirectory + random.choice(voiceList) print('声が聞こえる?') print(mp3data) pygame.mixer.init() #初期化 pygame.mixer.music.load(mp3data) #読み込み pygame.mixer.music.play(1) #再生 time.sleep(3) pygame.mixer.music.stop() #終了 voiceWhenDoorOpen(1)

該当のソースコード(python wav)

pyGameのsound利用(wavファイル利用)バージョンです。こちらも試したけれど同じ症状でした。

import pygame.mixer import time import random # voice list voiceList = ['01.wav','02.wav'] # rasp only voiceDirectory = 'C:\Users\Tamouse\Downloads\本日\voice' def voiceWhenDoorOpen(boxNo): global globalName, voiceDirectory, voiceList mp3data = voiceDirectory + random.choice(voiceList) print('声が聞こえる?') print(mp3data) pygame.mixer.init() #初期化 shoot_sound = pygame.mixer.Sound(mp3data) #読み込み shoot_sound.play() #再生 #time.sleep(3) #pygame.mixer.music.stop() #終了 voiceWhenDoorOpen(1)

補足情報(FW/ツールのバージョンなど)

Raspberry Pi 3 Model B+
Waveshare 7インチ HDMI タッチスクリーン

もとはwebフロントエンド、趣味でpythonやってますが、linux(サーバ系)は弱いです。
なにとぞよろしくお願いいたします。

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

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

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

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

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

argparse

2020/12/18 06:55

X で pi ユーザにログインし、 GUI で PulseAudio の出力先デバイスを設定している、という状況と見て宜しいでしょうか。もしそうであれば、 `/etc/systemd/system` に設置した system service unit は、 root 権限でかつその X session とは無関係に起動しますから、 PulseAudio の設定が反映されない (alsa driver あたりで直接出力している) と思われます。 恐らく期待とは異なる headphone や HDMI から出力されているのでは無いでしょうか。 解決策としては、 `~/.config/systemd/user` に unit file を設置して、 `systemctl --user` で操作する per-user service として登録するのが正攻法であるように思います。或いは、現行の system service のままでも、 `[Service]` に `User=pi` `Group=pi` `Environment="XDG_RUNTIME_DIR=/run/user/1000"` 辺りを追加すると、無理やり動かせるかもしれません。 ALSA になっているのであれば、そのデフォルト card を変更するのも有効と考えられます。
tamap

2020/12/18 09:31 編集

ありがとうございます! > X で pi ユーザにログインし、 GUI で PulseAudio の出力先デバイスを設定している、という状況と見て宜しいでしょうか。 はい。GUIで、デスクトップの右上のスピーカーマークからUSBオーディオを選択しました。 なるほど、なんとなくおっしゃっていることはわかりました。 実際に試してみますので、分かりましたらお知らせします。 この質問ではコードを再生成(抜粋)しましたが、 実際にやりたいことは、FLASKサーバのプログラムに入れたいと思っています。 トリガーを受けて(例 ブラウザでとあるページにアクセスされたら)効果音を出す。と。
tamap

2020/12/21 07:59

確認できました。 おっしゃる通りのやり方で無事に解決しました! > 解決策としては、 `~/.config/systemd/user` に unit file を設置して、 `systemctl --user` で操作する per-user service として登録するのが正攻法であるように思います。 そして、ベストアンサーにさせていただきたいのですが、質問からだったのでできませんでした。 お手数ですが上記コピペで大丈夫なので、回答に入れていただければベストアンサーにさせていただきます。よろしくお願いいたします。 1点自分へのメモ。上記に加えて以下も設定。 [Install] WantedBy=default.target 参考URL https://qiita.com/k0kubun/items/3c94473506e0e370a227
guest

回答1

0

自己解決

argparse さんのコメントにより解決できました。ありがとうございましたm(__)m

解決策としては、 ~/.config/systemd/user に unit file を設置して、 systemctl --user で操作する per-user service として登録するのが正攻法であるように思います。

1点自分へのメモ。上記に加えて以下も設定。
[Install]
WantedBy=default.target

参考URL
https://qiita.com/k0kubun/items/3c94473506e0e370a227

投稿2021/02/04 15:59

tamap

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問