2021年07月30日 更新

音楽や効果音を出力する様々な方法

どうも、クラゲです。
ラズパイで、音楽ファイルや効果音ファイルなどを出力する方法をまとめました。
Linuxコマンドによる再生だけでなく、Pythonプログラムに組み込むことも可能です。

目次

[TOC]

WAVファイルの再生

これが最も簡単。aplay はデフォルトで使えるコマンドです。

aplay test.wav

クラゲの環境だけかもしれませんが、ディスプレイによっては、効果音のような短いwavはHDMIで出力すると頭切れが生じるようです。スピーカーを用意して、後述する出力先設定の変更でアナログにすると調子が良くなります。

MP3ファイルの再生

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

Pythonプログラムで使う方法

方法1:subprocess

これまではターミナルでのコマンドでの方法でしたが、subprocessモジュールを使うと簡単にPythonプログラム上で使うことができます。

サンプルコード

import subprocess

subprocess.Popen(['aplay', 'test.wav'])

subproessの詳細についてはこちらをご覧ください。
https://monomonotech.jp/kurage/raspberrypi/subprocess.html

方法2:python-vlc

現在再生中の位置やタイトルの取得、リスト再生など、もっと細かいことをやりたい人は 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

方法3:Pygame

ゲーム作成用のライブラリPygameを活用することもできます。
ウィンドウ表示やループ処理と絡める必要がありますので、詳しくは以下を参照してください。
https://monomonotech.jp/learning/contents_trial/raspi_okigashi/raspi_okigashi/

出力先設定と音量設定

何か、音出ないぞ??って人は出力先設定や音量設定のミスかもしれません。
こちらを試してみましょう。

GUI

スピーカーアイコンで右クリックすることにより、出力先を Analog にするか HDMI にするかを選べます。簡単。

音量変更は左クリックすることで変更可能です。簡単。

CUI

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(デシベル)でも指定できますが、クラゲがおすすめするのは上記のコマンドです。

以上、「音楽や効果音を出力する様々な方法」でした!