Pythonでオーディオファイルを再生する


38

標準のオーディオ出力を使用してRaspberry Piでオーディオファイルを再生できる、適切に管理されたPythonライブラリを探しています。

これまでにいくつか試してみましたが、どれも機能していないようです。pygletは通常のコンピューターでは正常に動作しますが、Raspberry Piでエラーが発生します。使いやすいことが証明されているPythonライブラリはありますか?


使いやすいことが証明されていますが、StackOverflowの同様の質問にpygameの代替をここに投稿しました。基本的にその代替はvlc.py(非常によく管理されているlibVLC Pythonモジュール)です。
ベン

さらに下の質問では、PygletはRPiで動作します。エラーで更新できますか?
ブライアンBulkowski

回答:


31

広く人気のある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

そしてさらに試みる。


2
複数のサウンドを再生する場合(可能性が高い場合)、それぞれにpygame.mixer.Soundオブジェクトを作成することをお勧めします。サウンドファイル名の定義を1か所に保持できます。
フランシス14年

これは私が望むものですが、マザーボードのサウンドにはドライバーがないため、USBサウンドカードを使用します。それはespeakうまくいくが、これではない。
SDsolar

10

他のユーザー入力に応答しながら、バックグラウンドで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のドキュメントを参照してください。

うまくいけば、それがいくらか役立つでしょう!


1
これは実際には本当にきれいです。このadafruitチュートリアルでは、サウンドの再生について説明していますが、停止することはできません。
ギデオン

6

別のオプションはmpg321、コマンドラインから使用して呼び出すことです。

apt-get install mpg321

次に、Pythonで:

import os

os.system('mpg321 foo.mp3 &')

Pygameはほぼ確実に堅牢ですが、それはあなたのニーズが何であるかによると思います。


1
私は自分でこれについて考えましたが、一時停止や音量調節などが非常に難しくなるため、あまりエレガントではないと思いました。
スタイン

これは非常に遅いです。
アレックス14

3

グラフィックスが必要ない場合は、pygameではなくpygletをお勧めします。私の見解では、それはよりシンプルで、よりエレガントで、より良く維持されています。繰り返しますが、私はそれが好みの問題かもしれないと期待しています。


1
では、どのように使用しますか?
–SDsolar

pygletは、ディスプレイが利用可能な場合にのみ実行されるようです。リモートで実行したり、サウンドを再生する目的でのみデーモンとして実行したりすることはできません。
oh7lzb

0

Pygameを使用すると、さまざまなチャンネルでサウンドを簡単にロードおよび再生できます。


0

パイプを介して多数の外部プレーヤーを使用できます。ただし、ほとんど常に速度が低下します。再生制御にも問題があります。

pyaudioをお勧めします、うまく動作します。

圧縮されたファイルも再生したい場合は、私のモジュールdecode.pyを自由に指定できます。PyPIで見つけることができます。

また、サブプロセスも使用しますが、プレーヤーの代わりにデコーダーを呼び出します。多くのCPUを使用せず、ハードウェアアクセラレーションの使用方法を知っている人もいます。その後、pyaudioまたは何かを使用して生のオーディオデータを出力できます。必要に応じて、pygame.sndarrayを利用してpygameを使用することもできます。そのようにして、pygameがサポートするよりも多くのフォーマットをプレイできます。

PyQT GUI環境でpyaudioとdeplayを外部プレーヤーとして使用してdecoder.pyを試しました。それはRaspberry Pi Bでした。

どちらの場合も結果はかなり満足のいくものでした。

シンプルさが疑問視されることがあります。

decode.py自体は非常にシンプルですが、他のライブラリと組み合わせる必要があり、コード行が増えます。

decode.pyに含まれるファイルの再生方法の例があります。


0

OSMC(Debian)を実行していますが、HDMIで接続されているテレビスピーカーから再生するサウンドが得られました。https://youtu.be/p2ljmTE67gs

私の方法は、@ xxmbabanexxとここに投稿された上記のソリューションに基づいていまし。基本的に、に追加するdtparam=audio=on必要がありました/boot/config.txt


「標準オーディオ出力」を指すとき、TSは3.5 mmジャックを意味すると思います。これは3.5ジャックでも機能しますか?
ベックス

ああなるほど。うーん、おそらく試しませんが、試したことはありません。
-jjinking
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.