Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

raspberry Pi でのpythonを用いた音声出力

今回は今までの流れとガラッと変えて、raspberry Piでの音声出力です。

ちょっと必要になり調べたので備忘録として残しておこうと思います!!
実行言語はpythonですので、pythonで実行できる音声出力方法を調べました。


調査した結果、使いやすそうだったのはこちらです。
 ・aplay
 ・pygame
 ・mpg321


■aplay
ラズパイ上でこちらのコマンドを実行すると音声出力されます。

aplay 音声ファイル名.wav

ここでapalyは、、.mp3は再生できません!!
.wavファイルであれば問題なく再生されますが、.mp3は雑音が出てきます。
※知らずに爆音で流してしまい、びっくりしました。。。心臓に悪い泣



pythonで実行する場合には、subprocessを用いて、このように実行すればよいです。

import subprocess

subprocess.call("aplay 音声ファイル名.wav", shell=True)


pygame
pygamepythonでコンピュータグラフィックスと音声を扱うためのライブラリとのことです。
ゲーム作成に用いるライブラリのようです。
pygameであれば.mp3も再生できます。
pythonでの実行は下記で行えます。

import pygame.mixer
import time

pygame.mixer.init()
pygame.mixer.music.load("音声ファイル名.mp3") ←.wavファイルも再生可能です。
pygame.mixer.music.play(1) ←music.playの引数が再生回数です。 -1を設定すれば無限ループが可能。

time.sleep(10)       ←pygameはマルチスレッドで動作するようでsleepさせておかないと再生された瞬間に次の処理(Stop)が実行.
pygame.mixer.music.stop()

 
■mpg321
mpg321はraspberry Piに標準でインストールされていないため、下記を実行しパッケージをインストールする必要があります。

sudo apt-get -y install mpg321

mpg321もコマンドとして実行ができ、raspberry Pi上でこちらを実行すれば音声再生できます。

mpg321 音声ファイル名.mp3

こちらはaplayと逆で、.mp3は再生できますが、.wavは再生できない(雑音が出力されます)です。
pythonで実行する場合には、subprocessを用いて、このように実行すればよいです。

import subprocess

subprocess.call("mpg321 音声ファイル名.wav", shell=True)

■まとめ
先ほどの3種類の方法をまとめるとこちらになります。
f:id:Elsammit:20200728224047p:plain 


■最後に
音声出力だけでも様々な種類があって調べていて面白かったです。
出力するファイルに応じて使用する方法も切り替えていきたいな、と思いました。

ついでに、、、
pyAudio
という手段もあるのですが、
ストリーミング配信として主に用いられているようですし、.mp3が再生できないようでした。
また、ちょっとしようするのにパラメータが多く、簡単に使えそうになかったので除外しました!!


■参考
Raspberry Piで音楽(wav/mp3)ファイルを再生する方法 python編 - Qiita