2021年07月30日 更新
どうも、クラゲです。
ラズパイで、音楽ファイルや効果音ファイルなどを出力する方法をまとめました。
Linuxコマンドによる再生だけでなく、Pythonプログラムに組み込むことも可能です。
[TOC]
これが最も簡単。aplay はデフォルトで使えるコマンドです。
aplay test.wav
クラゲの環境だけかもしれませんが、ディスプレイによっては、効果音のような短いwavはHDMIで出力すると頭切れが生じるようです。スピーカーを用意して、後述する出力先設定の変更でアナログにすると調子が良くなります。
MP3ファイル再生は mpg321 が便利です。事前にインストールが必要です。
インストール
sudo apt-get install mpg321
コマンド
mpg321 test.mp3
ちなみに、mpg321でwavを再生させたり、aplayでmp3を再生するとノイズ音が出力されるのでご注意。
wavとmp3も含めて、様々な形式のファイルを再生させたい場合は VLC media playerがお勧めです。Raspbian OSのバージョンによっては入っていない場合がありますので、必要に応じてインストールしてください。
インストール
sudo apt-get install vlc
コマンド
cvlc test.ogg
cvlcコマンドだとGUIではなくCUIで扱えるのがポイントです。
その他 aac, wma, mov, mp4など、音声ファイルだけでなく、動画ファイルなど様々なメディアに対応しています。
再生サポート一覧 by wikipedia
これまではターミナルでのコマンドでの方法でしたが、subprocessモジュールを使うと簡単にPythonプログラム上で使うことができます。
サンプルコード
import subprocess
subprocess.Popen(['aplay', 'test.wav'])
subproessの詳細についてはこちらをご覧ください。
https://monomonotech.jp/kurage/raspberrypi/subprocess.html
現在再生中の位置やタイトルの取得、リスト再生など、もっと細かいことをやりたい人は vlc-module を使いましょう。前述のVLC media playerのインストールも必要です。
インストール
sudo pip3 install python-vlc
サンプルコード
import vlc
player = vlc.MediaListPlayer()
mediaList = vlc.MediaList(['test.wav', 'test.mp3', 'test.ogg'])
player.set_media_list(mediaList)
player.set_playback_mode(vlc.PlaybackMode.loop)
player.play()
input() #入力待ち
player.stop()
上記のサンプルコードは、test.wav、test.mp3、test.ogg の順に無限ループで再生します。エンターキーを押すと、音声出力が停止してプログラムが終了します。
python-vlcの詳細についてはこちらをご覧ください。
https://monomonotech.jp/kurage/raspberrypi/python_vlc.html
ゲーム作成用のライブラリPygameを活用することもできます。
ウィンドウ表示やループ処理と絡める必要がありますので、詳しくは以下を参照してください。
https://monomonotech.jp/learning/contents_trial/raspi_okigashi/raspi_okigashi/
何か、音出ないぞ??って人は出力先設定や音量設定のミスかもしれません。
こちらを試してみましょう。
スピーカーアイコンで右クリックすることにより、出力先を Analog にするか HDMI にするかを選べます。簡単。
音量変更は左クリックすることで変更可能です。簡単。
Analogに設定するコマンド
amixer cset numid=3 1
HDMIに設定するコマンド
amixer cset numid=3 2
参考:https://www.raspberrypi.org/documentation/configuration/audio-config.md
最後に音量変更コマンド。クラゲによるイチオシのコマンド例をご紹介します。
音量10%アップするコマンド
amixer sset PCM 10%+ -M
音量20%ダウンするコマンド
amixer sset PCM 20%- -M
ポイントはオプションで -M を使うことにより、マップされた値で指定できるという点です。
-Mを付けなかったりdb(デシベル)でも指定できますが、クラゲがおすすめするのは上記のコマンドです。
以上、「音楽や効果音を出力する様々な方法」でした!