標準のオーディオ出力を使用してRaspberry Piでオーディオファイルを再生できる、適切に管理されたPythonライブラリを探しています。
これまでにいくつか試してみましたが、どれも機能していないようです。pygletは通常のコンピューターでは正常に動作しますが、Raspberry Piでエラーが発生します。使いやすいことが証明されているPythonライブラリはありますか?
標準のオーディオ出力を使用してRaspberry Piでオーディオファイルを再生できる、適切に管理されたPythonライブラリを探しています。
これまでにいくつか試してみましたが、どれも機能していないようです。pygletは通常のコンピューターでは正常に動作しますが、Raspberry Piでエラーが発生します。使いやすいことが証明されているPythonライブラリはありますか?
回答:
広く人気のあるPygameをお勧めします。私は間違っているかもしれませんが、Piにプリインストールされていると思います。Pygame Mixer Music Moduleを使用して、オーディオファイルを再生できます。以下にいくつかのサンプルコードを含めました。
という音声ファイルがあると仮定しますmyFile.wav
。
import pygame
pygame.mixer.init()
pygame.mixer.music.load("myFile.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
continue
注:これが失敗した場合は、ターミナルに移動してシステムを更新してください
apt-get update
apt-get upgrade
そしてさらに試みる。
espeak
うまくいくが、これではない。
他のユーザー入力に応答しながら、バックグラウンドで30秒から曲を再生するスクリプトが必要でした。それから、あるイベントで歌を終わらせたいと思いました。
特にエレガントだとは思いませんが、バックグラウンドのMPlayerプロセスへのパイプを開きました。
import subprocess
player = subprocess.Popen(["mplayer", "song.mp3", "-ss", "30"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
その後、MPlayerプロセスを終了したいときに、パイプへの終了を表す「q」を書き込むだけでした。
player.stdin.write("q")
この方法で再生を制御するために渡すことができるあらゆる種類のコマンドについては、MPlayerのドキュメントを参照してください。
うまくいけば、それがいくらか役立つでしょう!
パイプを介して多数の外部プレーヤーを使用できます。ただし、ほとんど常に速度が低下します。再生制御にも問題があります。
pyaudioをお勧めします、うまく動作します。
圧縮されたファイルも再生したい場合は、私のモジュールdecode.pyを自由に指定できます。PyPIで見つけることができます。
また、サブプロセスも使用しますが、プレーヤーの代わりにデコーダーを呼び出します。多くのCPUを使用せず、ハードウェアアクセラレーションの使用方法を知っている人もいます。その後、pyaudioまたは何かを使用して生のオーディオデータを出力できます。必要に応じて、pygame.sndarrayを利用してpygameを使用することもできます。そのようにして、pygameがサポートするよりも多くのフォーマットをプレイできます。
PyQT GUI環境でpyaudioとdeplayを外部プレーヤーとして使用してdecoder.pyを試しました。それはRaspberry Pi Bでした。
どちらの場合も結果はかなり満足のいくものでした。
シンプルさが疑問視されることがあります。
decode.py自体は非常にシンプルですが、他のライブラリと組み合わせる必要があり、コード行が増えます。
decode.pyに含まれるファイルの再生方法の例があります。
OSMC(Debian)を実行していますが、HDMIで接続されているテレビスピーカーから再生するサウンドが得られました。https://youtu.be/p2ljmTE67gs
私の方法は、@ xxmbabanexxとここに投稿された上記のソリューションに基づいていました。基本的に、に追加するdtparam=audio=on
必要がありました/boot/config.txt