LoginSignup
2
0

More than 3 years have passed since last update.

【RaspberryPi4】aplayとpigpioライブラリの同時使用で起きる問題の対処法

Last updated at Posted at 2021-03-14

はじめに

こんにちは、だるおです。

今回はラズパイ関連の記事です。

先日Raspberry Pi4でOpen Jtalk関連をいじっていた際、リモコンモジュールが動作しなくなる事象が発生しました。
また、リモコンモジュールを動作させるとRaspberry Pi4のオーディオ関連全般が動作しなくなるという逆の事象も発生しました。

これについて、解決法を調査し、最終的に解決することができたので記事にすることにしました。

動作不良の原因

いろいろ試してみた結果、わかったことは以下の通りです。

  • オーディオ関連の操作(aplayコマンドなど) → pigpioライブラリが動作しなくなる (再起動したら動作する)
  • pigpioライブラリの使用 → オーディオ関連全般が動作不良 (エラーは出ない) (再起動したら動作する)

オーディオ関連の操作では他にもvlcやpygameを試しました。
どちらか一方を使用すると一方が動作しなくなることから、二つが何らかの処理を取り合っていると考えられます。
調べてみると、pigpioライブラリとオーディオ関連はPWMPCMといった名前の制御を行っていることがわかりました。

pigpioライブラリはデフォルトでPCM制御を行う設定になっています。
また、aplayコマンドなどは基本的にPCM制御で音源を扱っているみたいです。
つまり、両者がPCM制御を取り合っている状態なわけです。

解決法

PCM制御を取り合うのであれば、pigpioライブラリをPWM制御で扱うよう変更すれば問題がなくなるはずです。

gpio libraryのページから引用すると、

You can change the default with a configuration option. For C use gpioCfgClock, for the pigpio daemon use the -t option.

と、-tオプションで設定できるみたいです。

また、コマンドオプションのページに以下の記述もありました。どうやら正解だったようです。

Default PCM. pigpio uses one or both of PCM and PWM. If PCM is used then PWM is available for audio. If PWM is used then PCM is available for audio. If waves or hardware PWM are used neither PWM nor PCM will be available for audio.

では設定していきます。

/lib/systemd/system/pigpiod.serviceを編集。

[Unit]
Description=Daemon required to control GPIO pins via pigpio
[Service]
ExecStart=/usr/bin/pigpiod -l -t 0
ExecStop=/bin/systemctl kill pigpiod
Type=forking
[Install]
WantedBy=multi-user.target

ExecStartの部分に-t 0を設定しました。
これで、pigpioライブラリはPWM制御で扱うことになります。

あとは、サービスを再起して完了です。

$ systemctl restart pigpiod.service

エラーを吐かれたらデーモンをリロードしてください。

$ systemctl daemon-reload

あとは音楽を流したり、リモコン操作したりして、問題がなければ解決です。

結論

  • ラズパイ関連に限らず、英語で調べれば大体解決方法が載っている。
  • 結局公式サイトが最強。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0