2021年07月30日 更新

python-vlcで音楽再生をプログラム制御

どうも、クラゲです。
VLCをPythonでプログラム制御できるpython-vlcを紹介します。工夫次第で自分だけのミュージックプレーヤーを作ることが可能です!

インストール

VLC media playerが入ってない場合はこれをインストール

sudo apt-get install vlc

次にpython-vlcをインストールします

sudo pip3 install python-vlc

1曲だけ再生する最短コード

vlcモジュール読み込みと3行だけで書けます。
この場合は、Ctrl + C などで強制終了させる必要があります。

import vlc

p = vlc.MediaPlayer()
p.set_mrl('test.mp3')
p.play()

複数曲をリピート再生する最短コード

複数曲を扱うにはMediaListPlayerクラスを使います。
次のコードでは、リストに複数の曲を入れてループ再生させています。

import vlc

player = vlc.MediaListPlayer()
mediaList = vlc.MediaList(['test.wav', 'test.mp3', 'test.ogg'])
player.set_media_list(mediaList)
player.set_playback_mode(vlc.PlaybackMode.loop)
player.play()

set_playback_mode関数で vlc.PlaybackMode.loop を設定することでループになります。
ちなみに、最初のサンプルコードで使っていたMediaPlayerクラスの場合、リピート回数指定はできますが、ループ指定ができません。1曲リピートの場合もこちらの形式で書いた方がスマートです。

情報取得や制御を行うコード

これまでは play関数で再生するという機能しかありませんでしたが、python-vlcでは様々な機能があります。先程のコードにwhileループを加え、4つの機能を追加しました。

import vlc

player = vlc.MediaListPlayer()
mediaList = vlc.MediaList(['test.wav', 'test.mp3', 'test.ogg'])
player.set_media_list(mediaList)
player.set_playback_mode(vlc.PlaybackMode.loop)
player.play()

while True:
    data = input()

    #POSITION
    if data == 'a':
        p = player.get_media_player()
        pos = p.get_position()
        print(pos)

    #INDEX
    elif data == 'b':
        p = player.get_media_player()
        media_instance = p.get_media()
        index = mediaList.index_of_item(media_instance)
        print(index)

    #NEXT
    elif data == 'c':
        player.next()

    #STOP
    elif data == 'd':
        player.stop()
        break

a, b, c, dを入力するとそれぞれの以下の機能が確認できたと思います。

  • 再生曲の位置を取得(0.0~1.0の範囲)
  • 再生曲のインデックス番号を取得
  • 次の曲へスキップ
  • 曲を停止

紹介したのはわずか1部の機能です。
他にもpause関数で一時停止、previous関数で前の曲へスキップなど、たくさんありますので、以下の詳細リンク先を参照して下さい。
https://www.olivieraubert.net/vlc/python-ctypes/doc/

以上、「python-vlcで音楽再生をプログラム制御」でした!