はじめに
購入したCDがかなりたくさんあり、家で簡単に聴くことができないかと思い、今回ミュージックプレーヤーをPythonで作ることを考えました。
とは言っても今回は動作確認がメインなので、簡単なミュージックプレーヤにしています。
開発環境
- Windows 10
- Python 3.10.5
プログラム
プログラムは以下です。
import tkinter
from tkinter import *
import tkinter as tk
import glob
import random
from playsound import playsound
def ButtonPush300_00(e):
title = entry100_00.get()
sel = var200.get()
MusicStart(title, sel)
def MusicStart(title, sel):
print('MusicStart')
lst=glob.glob(title+'\\'+'*.mp3')
print('lst =', lst)
while(1):
if (sel==1):
random.shuffle(lst)
for tune in lst:
print('tune =', tune)
playsound(tune)
#-- tkinter --
root = tkinter.Tk()
root.title('ミュージックプレーヤー')
frame_100 = Frame(root, pady=5, padx=5)
frame_200 = Frame(root, pady=5, padx=5)
frame_300 = Frame(root, pady=5, padx=5)
# ラベル
label100_00 = tkinter.Label(frame_100, text="CDタイトル ", font=("MS明朝", "14"))
#入力ボックス
entry100_00 = tkinter.Entry(frame_100, width=30, bg="white", justify='center', font=("MS明朝", "14"))
entry100_00.insert(0, "Eliane Elias")
label100_00.pack(side=tk.LEFT)
entry100_00.pack(side=tk.LEFT)
frame_100.pack(fill=tk.X, padx=2, pady=2)
var200 = tkinter.IntVar()
var200.set(0)
# ラベル
label200_00 = tkinter.Label(frame_200, text="曲順 ", font=("MS明朝", "14"))
# ラジオボタン
rdo200_00 = tkinter.Radiobutton(frame_200, value=0, variable=var200, text='ノーマル', font=("MS明朝", "14"))
rdo200_01 = tkinter.Radiobutton(frame_200, value=1, variable=var200, text='ランダム', font=("MS明朝", "14"))
label200_00.pack(side = 'left')
rdo200_00.pack(side = 'left')
rdo200_01.pack(side = 'left')
frame_200.pack(fill=tk.X, padx=2, pady=2)
#ボタン
button300_00 = tkinter.Button(frame_300, text="スタート", fg="white", bg="#0000FF", height="1", width="20", font=("MS明朝", "14"))
button300_00.pack(side=tk.LEFT)
frame_300.pack(fill=tk.X, padx=2, pady=2)
#ボタン処理
button300_00.bind("<Button-1>", ButtonPush300_00)
root.mainloop()
簡単にプログラムの説明をしたいと思います。
from playsound import playsound
playsoundはmp3などを再生するためのライブラリで標準ライブラリではないのでインストールする必要があります。
以下のコマンドでインストールできます。
pip3 install playsound
他にもよく使うライブラリのインストールコマンドをある程度書きました。こちらをご覧ください。
#-- tkinter --
root = tkinter.Tk()
root.title('ミュージックプレーヤー')
frame_100 = Frame(root, pady=5, padx=5)
frame_200 = Frame(root, pady=5, padx=5)
frame_300 = Frame(root, pady=5, padx=5)
# ラベル
label100_00 = tkinter.Label(frame_100, text="タイトル ", font=("MS明朝", "14"))
#入力ボックス
entry100_00 = tkinter.Entry(frame_100, width=30, bg="white", justify='center', font=("MS明朝", "14"))
entry100_00.insert(0, "Eliane Elias")
label100_00.pack(side=tk.LEFT)
entry100_00.pack(side=tk.LEFT)
frame_100.pack(fill=tk.X, padx=2, pady=2)
var200 = tkinter.IntVar()
var200.set(0)
# ラベル
label200_00 = tkinter.Label(frame_200, text="曲順 ", font=("MS明朝", "14"))
# ラジオボタン
rdo200_00 = tkinter.Radiobutton(frame_200, value=0, variable=var200, text='ノーマル', font=("MS明朝", "14"))
rdo200_01 = tkinter.Radiobutton(frame_200, value=1, variable=var200, text='ランダム', font=("MS明朝", "14"))
label200_00.pack(side = 'left')
rdo200_00.pack(side = 'left')
rdo200_01.pack(side = 'left')
frame_200.pack(fill=tk.X, padx=2, pady=2)
#ボタン
button300_00 = tkinter.Button(frame_300, text="スタート", fg="white", bg="#0000FF", height="1", width="20", font=("MS明朝", "14"))
button300_00.pack(side=tk.LEFT)
frame_300.pack(fill=tk.X, padx=2, pady=2)
#ボタン処理
button300_00.bind("<Button-1>", ButtonPush300_00)
root.mainloop()
これはthinterの部分です。
ここtkinterの部分で、表示するウィンドウを構成しています。
button300_00.bind("<Button-1>", ButtonPush300_00)
ボタンがクリックされるとイベントが発生し、ButtonPush300_00というルーチンが実行されることになります。
<Button-1>というのはマウスを左クリックしたときにイベントが発生します。他にもいくつか種類があります。<BUtton-3>だとマウスを右クリックしたときにイベントが発生します。
1番下のroot.mainloop()はとても重要な1行です。これがあるのでtkinterは動作中イベントをループで監視し、イベントが発生すると対応するルーチンを動かすことをします。
def ButtonPush300_00(e):
title = entry100_00.get()
sel = var200.get()
MusicStart(title, sel)
イベントによりこのルーチンが実行されます。entry100_00とvar200の値を読み込み、引数としてMusicStartに渡します。
entry100_0はタイトルで、var200は曲順をランダムにするかどうかの選択です。
def MusicStart(title, sel):
print('MusicStart')
lst=glob.glob(title+'\\'+'*.mp3')
print('lst =', lst)
while(1):
if (sel==1):
random.shuffle(lst)
for tune in lst:
print('tune =', tune)
playsound(tune)
先程のentry100_00で読み込まれた値をフォルダ名として、その下にあるmp3ファイルをリストにしています。つまりこのフォルダの下のmp3ファイルを音として聴かせることになります。
var200が1であればシャッフルしてリスト(lst)の順番をかえた後実行します。
While(1)なので繰り返し実行されます。
プログラムを実行すると、このようなウィンドウが表示されます。曲順でノーマルを選択するとリスト順に音を出し、ランダムを選択するとリストがシャッフルされ、その順に音を出します。
今回は本当に動くかの確認なので機能もシンプルですし、ストップコマンドもなく繰り返し演奏のみです。
機会があれば、もう少し機能があるものを考えてみたいと思います。