Pythonで音楽を再生したい(4) pygame編
お久しぶりです、こんにちは。
スドウです。
ブログの更新が滞っていました、スイマセン。。。
(生きて。。。いました。。。)
Pygame
を使った音楽プレイヤー(もどき)の作成記録です。
前回のソースから改良してみました。
(前回が100日以上前。。。)
【前回の記事】 sudo2501lab01.hatenablog.com
変更した内容は下記です。
* ファイル選択の追加
* 曲のタイトル表示追加
* 1つのウィンドウにまとめた
* 再生/一時停止ボタンを1つにまとめた
* 音量を0~10から0~100へとより細かく設定できるように変更
今回も前回と同様に wavファイル
を再生します。
※ ソースと同じフォルダに wavファイル
がなくてもOKです。
以下ソースです。
import os import sys import tkinter as tk from tkinter import ttk from tkinter import * from tkinter.ttk import * from tkinter import filedialog import wave import pygame.mixer as pymix import time button_act = 0 # 再生/一時停止用のグローバル変数 # ファイル選択処理 def fp_select(): # ファイル拡張子の指定 #fType = [("", "*.wav *.mp3")] #.wav,.mp3のみ fType = [("", "*.wav")] #.wavのみ # ディレクトリ名を返す iDir = os.path.abspath(os.path.dirname(__file__)) # ファイル選択ダイアログ(選択ファイルの絶対パスを取得) fPath = filedialog.askopenfilename(filetype = fType, initialdir = iDir) # ファイル名のみ表示 fName = os.path.basename(fPath) # ファイルパスor名前をセット file1.set(fPath) # 絶対パス file2.set(fName) # ファイル名のみ(曲名表示用) # 選択したファイルを開には絶対パスが必要 # プログラム終了 def push_exit(): exit() # 音楽再生 def music_play(): # 再生中の音声を終了する pymix.quit() # 再生するファイルパスを取得 sound_file = file1.get() # 初期設定 pymix.init(frequency = 44100, size = -16, channels = 2, buffer = 4096) # 再生ファイルを設定 sounds = pymix.Sound(sound_file) # Sound系 # 再生回数(-1:無限ループ) sd_loop = -1 # 音楽再生 music_play = sounds.play( loops = sd_loop)# Sound系 # 音量初期値 music_play.set_volume(0.1) # Sound系 # 音量調節 def sound_vol(n): music_play.set_volume((float)(vol_scale.get()/100)) # 0.01刻みで0.00~1.00 vol_scale = tk.Scale(root, orient = HORIZONTAL, length = 400, from_ = 0.0, to = 100.0, resolution = 1.0 , command = sound_vol ) vol_scale.set(10) # 音量スライダの初期値 vol_scale.grid(row = 3, column = 1) # 音量スライダ if __name__ == '__main__': root = Tk() root.title('Music Player by Pygame (Test)') # フレームタイトル(名前がひどい) #root.resizable(False, False) # ファイル名取得 file1 = StringVar() # フルパス取得(再生に必要) file2 = StringVar() # 名前のみ取得(表示用) # ファイル名表示ラベルの作成 name_label = ttk.Label(root, textvariable = file2, width = 50) name_label.grid(row = 1, column = 1) #ファイル名表示ラベル # ファイル選択用ボタン fp_select_btn = ttk.Button(root, text = 'ファイル', command = fp_select) fp_select_btn.grid(row = 0, column = 0) # ファイル選択用ボタン(左上) # 終了ボタン exit_btn = ttk.Button(root, text = '終了', command = push_exit) exit_btn.grid(row = 0, column = 1) # 終了ボタン # スタートボタン start_btn = ttk.Button(root, text = 'Start', command = music_play) start_btn.grid(row = 2, column = 0) # スタートボタン # 再生/一時停止 def ply_stop(): global button_act if(button_act == 0): pymix.pause() # 一時停止 button_act = 1 btn_text.set("一時停止") elif(button_act == 1): pymix.unpause() # 再開 button_act = 0 btn_text.set("再生") # 再生/一時停止ボタン btn_text = StringVar() btn_text.set("再生") play_button = ttk.Button(root, textvariable = btn_text, command = ply_stop) play_button.grid(row = 2, column = 1) # 再生/一時停止ボタン # 音量スライダ(ラベル) ttk.Label(root, text = '音量').grid(row = 3, column = 0) root.mainloop()
IDLEからプログラムを実行すると、下図のウィンドウが表示されます。
ファイル
ボタンから再生したい wavファイル
を ダブルクリック
か 開く
ボタンをクリックします。
(通常のファイル選択と同じです。)
ファイルが選択されていると、下図のようにファイル名が表示されます。
(今回は核P-MODELさんの回=回から「ECHO-233.wav」を使用しています。)
この状態でStart
ボタンをクリックすると wavファイル
が再生されます。
音量注意
終了する際は上図の 終了
ボタンをクリックすると
wavファイル
の再生を停止しウィンドウも閉じます。
ウィンドウ右上の ×
ボタンでは wavファイル
が停止しません。
ファイル選択機能を追加することで、好きな wavファイル
を再生できるようになりました。
また、 再生/一時停止
機能を1つのボタンにまとめることで使いやすくなったと思います。
少しずつですが、音楽プレイヤーぽくなってきたと思います。
ただ、Pygameで再生できるファイルが wav
と ogg
なので
mp3
といった他の形式を生成するにはもう少し弄る必要があるのですが。。。
しばらくはPygameで作りこんでみようと思います。
また、Pygameの音声ファイルの操作はあくまでゲーム制作に付随した機能なので、
より高度な処理を実装しようとした場合、音声処理に特化したライブラリ
への移行も考えています。
それとGUIのデザインも少しずつ変えていきたいですね。
メーカソフトまでいかなくても、せめてダサくないデザインにはしたいです。
ではでは。
スポンサードリンク