HOWTO · Python

Python を使用して MP3 ファイルを再生する

設定、パス、プラットフォームに関するガイダンスとともに、PythonでMP3ファイルを再生する5つの方法を学びます。

このページの内容

PythonでMP3を再生するには、短い再生スクリプトならplaysound、ミキサーを制御するならpygame、VLCが利用できる環境ならpython-vlcを使えます。また、webbrowserでブラウザーのハンドラーにファイルを開かせたり、インストール済みのシステムプレーヤーを起動したりする方法もあります。各例のsample.mp3は、音声ファイルのパスに置き換えてください。相対パスは、プロセスの現在の作業ディレクトリを基準に解決されます。

playsoundでMP3ファイルを再生する

サードパーティ製のplaysoundパッケージを、python -m pip install playsoundでインストールします。その後、再生関数にファイルパスを渡します。MP3やWAVなど一般的な音声形式に対応していますが、再生にはパッケージがサポートするプラットフォーム別の音声バックエンドが必要です。

次のスクリプトは、現在の作業ディレクトリにあるsample.mp3を再生します。先にパッケージをインストールしてファイルをその場所に置くか、trackを正しいパスに変更してください。再生には、利用可能な音声デバイスと、このパッケージがサポートするプラットフォームの音声バックエンドが必要です。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    from playsound import playsound

    playsound(str(track))

pygameでMP3ファイルを再生する

python -m pip install pygameでpygameをインストールします。ミキサーAPIでトラックを読み込み、再生を開始できます。MP3のデコード可否は使用するpygameとSDL_mixerのビルドによって異なります。インストール済みのビルドでMP3をデコードできない場合は、WAVファイルが実用的な代替手段です。MP3ファイルをWAVに変換する方法も参照してください。

このスクリプトは、現在の作業ディレクトリにあるsample.mp3を読み込みます。先にpygameをインストールし、音声バックエンドを利用できるようにしてください。ミキサーのplay()呼び出しは非同期で再生を開始し、ループはトラックが終わるまでスクリプトを実行状態に保ちます。MP3のデコード可否は使用するpygameとSDL_mixerのビルドによって異なるため、トラックをデコードできない場合はWAVファイルが実用的な代替手段になります。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    import time

    import pygame

    pygame.mixer.init()
    pygame.mixer.music.load(str(track))
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        time.sleep(0.1)

python-vlcでMP3ファイルを再生する

python-vlcはpipでの配布名で、Pythonからのインポート名はvlcです。python -m pip install python-vlcでバインディングをインストールします。このバインディングはVLCのネイティブメディアフレームワークを使うため、互換性のあるVLCランタイムもインストールし、プロセスから利用できるようにしてください。必要な設定はオペレーティングシステムによって異なる場合があります。

このスクリプトは、現在の作業ディレクトリにあるsample.mp3を使います。実行前にpython-vlcのバインディングと互換性のあるVLCランタイムの両方をインストールしてください。player.play()は非同期で再生を開始するため、トラックの再生中もプロンプトがプロセスを実行状態に保ちます。停止したいときにEnterキーを押してください。音声を出力できる環境も必要です。

from pathlib import Path

track = Path("sample.mp3")
if track.is_file():
    import vlc

    player = vlc.MediaPlayer(str(track))
    player.play()
    input("Press Enter to stop playback.\n")
    player.stop()

webbrowserでMP3ファイルを開く

webbrowserはPython標準ライブラリの一部なので、pipでのインストールは不要です。次の例は、システムに設定されたブラウザーに対し、現在の作業ディレクトリにあるsample.mp3のファイルURLを開くよう依頼します。パスを解決してURIに変換することで、空白などのパス中の文字を扱えます。

from pathlib import Path
import webbrowser

track = Path("sample.mp3")
if track.is_file():
    webbrowser.open(track.resolve().as_uri())

これは、ブラウザーまたは登録済みのハンドラーにファイルを開くよう依頼するものです。ブラウザーのタブで音声が再生されるとは限りません。動作はブラウザーとオペレーティングシステムによって異なります。

Pythonからシステムプレーヤーを起動する

インストール済みのコマンドラインプレーヤーを起動するには、引数リストを指定してsubprocess.runを使います。これにより、ファイルパスを組み立てたシェルコマンドに含めずに済みます。プレーヤーは別途インストールしてください。利用できるプレーヤーやコマンド名はオペレーティングシステムによって異なります。以下の例では、Linuxでmpg123、macOSでafplayを使います。

このスクリプトは、Linuxではmpg123、macOSではafplayを使い、現在の作業ディレクトリにあるsample.mp3を再生します。使用するプレーヤーは別途インストールしてください。引数リスト形式では、空白を含むパスも1つの引数として渡されます。check=Trueを指定すると、プレーヤーがゼロ以外の終了コードを返した際にPythonエラーとして報告されるため、起動に失敗した原因を調べるのに役立ちます。

from pathlib import Path
import subprocess
import sys

track = Path("sample.mp3")
if track.is_file():
    if sys.platform.startswith("linux"):
        player = "mpg123"
    elif sys.platform == "darwin":
        player = "afplay"
    else:
        raise SystemExit("Choose a player command for this operating system.")

    subprocess.run([player, str(track)], check=True)

再生方法を選ぶ前にパスを簡単に確認するには、次の単独で実行できるPython例を使います。現在の作業ディレクトリを基準にしたパスから、ファイル名を表示します。

from pathlib import Path

track = Path("sample.mp3")
print(track.name)
sample.mp3