音楽連続再生機能(python )

##pythonで音源の連続再生機能を作ってみた

```python
import pygame.mixer
from mutagen.mp3 import MP3 as mp3
import time
playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
for p in playlist:
 pygame.mixer.init()
 pygame.mixer.music.load(p)
 mc = mp3(p).info.length #音源の長さを取得
 pygame.mixer.music.play(1) #再生
 time.sleep(mc + 0.5) #誤差があるかもしれないので一応0.5足しておく
```

mutagenとpygameは下記コマンドでインストール

```console
$ pip install pygame mutagen
```


##ランダム再生

###方法1
```python
import pygame.mixer
import sys
import random
from mutagen.mp3 import MP3 as mp3
import time
playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
num = len(playlist) - 1
try:
 while True:
  number = random.randint(0, num)
  p = playlist[number]
  pygame.mixer.init()
  pygame.mixer.music.load(p)
  mc = mp3(p).info.length
  pygame.mixer.music.play(1)
  time.sleep(mc + 0.5)
except KeyboardInterrupt:
 sys.exit()
```

random.randint()を使って乱数を生成してそれをリストのインデックスに代入するとランダム再生が実現出来ます(完全ランダムなので何回も同じ曲が流れる可能性があります)
またこのプログラムはKeyboardInterruptエラー、つまりCtrl+Cキーでの強制終了によって終了します。

```python
import pygame.mixer
import sys
import random
from mutagen.mp3 import MP3 as mp3
import time
playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
num = len(playlist) - 1
try:
 while True:
  numbers = random.randint(0, num)
  if numbers == number:
   continue
  number = numbers
  p = playlist[number]
  pygame.mixer.init()
  pygame.mixer.music.load(p)
  mc = mp3(p).info.length
  pygame.mixer.music.play(1)
  time.sleep(mc + 0.5)
except KeyboardInterrupt:
 sys.exit()
```
重複が嫌いな方はこちら

###以下追記
上記のままだとif numbers == number:のところでNameErrorが出ると思います。
なので下のように最初にnumberに適当な値を入れてあげると動くと思います。

```python
import pygame.mixer
import sys
import random
from mutagen.mp3 import MP3 as mp3
import time
number = 10 #ここは適当な値を入れてください
playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
num = len(playlist) - 1
try:
 while True:
  numbers = random.randint(0, num)
  if numbers == number:
   continue
  number = numbers
  p = playlist[number]
  pygame.mixer.init()
  pygame.mixer.music.load(p)
  mc = mp3(p).info.length
  pygame.mixer.music.play(1)
  time.sleep(mc + 0.5)
except KeyboardInterrupt:
 sys.exit()
```

###方法2
```python
import pygame.mixer
from mutagen.mp3 import MP3 as mp3
import time
import random
playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
random.shuffle(playlist)
for p in playlist:
    pygame.mixer.init()
    pygame.mixer.music.load(p)
    mc = mp3(p).info.length
    pygame.mixer.music.play(1)
    time.sleep(mc + 0.5)
```

この方法はコメント欄で教えていただきました。
リスト自体をシャッフルして再生をすることでランダム再生を実現するという手もあります。

```python
import pygame.mixer
from mutagen.mp3 import MP3 as mp3
import time
import random
import sys

playlist = ['/test/test1.mp3', '/test/test2.mp3', '/test/test3.mp3']
class playmusic:
 def shuffle():
  random.shuffle(playlist)
  playmusic.play()
 def play():
  try:
   for p in playlist:
    pygame.mixer.init()
    pygame.mixer.music.load(p)
    mc = mp3(p).info.length
    pygame.mixer.music.play(1)
    time.sleep(mc + 0.5)
  except KeyboardInterrupt:
     sys.exit()
  playmusic.shuffle()

if __name__ == "__main__":
 playmusic.shuffle()
```

さっきのソースコードを元にして、全曲再生が終わると再びplaylistをシャッフルし再生するというプログラムを作ってみました

##注意
この記事で紹介した内容は.mp3のみ対応しています(.m4a等では動かない)


##終わり
連続再生などは、ファイルパスをリスト化してあげると実現するのが楽です