ひこぽんのーと

覚書と雑記です。

pythonで音声を再生するのこと

pythonで音楽を再生したくなったので、やり方を調べてみた。
まずあたったのが、pyAudioというライブラリ。

PyAudio: PortAudio v19 Python Bindings

ページにはpipで入れよと書いてあったけど、
ubuntuならapt-getでもインストールできる。

sudo apt-get install python-pyaudio

けれども、ライブラリのサンプルを眺めてみると
どうやらこれはwave再生のようで、MP3が再生できるかはわからない。
コードを書いて調べるのも面倒だったので、
次に行くことにした。

MP3が再生できそうなライブラリにpygameが当たった。

ダウンロード&リファレンスサイト
http://pygame.org/download.shtml

その日本語訳。
pygame - Pygameドキュメント 日本語訳

これもapt-getでインストールできる。

sudo apt-get install python-pygame

ゲーム制作用のライブラリのようだが、
それなら当然、音声再生もできる。
というわけでこれを使ってみることにした。
音の出し方は意外と簡単だった。

import pygame
import time


if __name__ == '__main__':
    # ライブラリの初期化
    pygame.mixer.init()
    # MP3ファイルのロード
    pygame.mixer.music.load(u"MP3ファイルパス")
  # 再生回数の指定。-1ならリピート
    pygame.mixer.music.play(1)
    # 音楽再生の間、スレッドを止めるためにスリープ。
    # これでは中断のために割り込みとかできないから、
    # 本当に使うときは色々と作りこみをする必要がある。
    time.sleep(300)
    # 再生の停止。
    pygame.mixer.music.stop()

これはストリーム再生なので起動も早く、負荷も少ない。
ただし、音声ファイルの再生時間が取得できない。
ストリーム故にバッファに読み込んだデータの再生時間は取得できるが。。。
とはいえ、waitする時間の根拠値としても、音声の再生時間はどうしても取得したい。

なんとかならないかと探してみた。
mutagenというライブラリでMP3の再生時間が取得できるらしい。

Overview — mutagen

インストールはやはりapt-getでいける。

sudo apt-get install python-mutagen

使い方は簡単で、ファイルを読み込んで該当のプロパティを叩けばいい。

import mutagen.MP3

sound = mutagen.MP3(u"MP3ファイルパス")
print sound.info.length

といわけで、これらのライブラリを使うことでMP3の再生はできた。
いやぁ、楽しいなぁ、こういうの。