Pythonで音楽を再生したい(5) pygame編
こんにちは、スドウです。
Pygame
を使った音楽プレイヤー(もどき)の作成記録です。
前回のソースを少し改良してみました。
【前回の記事】
改良と言っても大きな変更はありません。
本当に地味な、
地味~~な変更です。
変更内容は下記です。
* ファイル選択後に自動再生するように変更
* 上記の変更に伴いスタートボタンの削除
* ファイル選択キャンセル時にファイル名の表示が消えないように変更
* ファイル名表示のフォントサイズを変更
* 再生/一時停止ボタンの表示修正
いつものように 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 = [("", "*")] # 全てのファイル #fType = [("", "*.wav *.mp3")] #.wav,.mp3のみ fType = [("", "*.wav")] #.wavのみ # ディレクトリ名を返す iDir = os.path.abspath(os.path.dirname(__file__)) # ファイル選択ダイアログ(選択ファイルの絶対パスを取得) fPath = filedialog.askopenfilename(filetype = fType, initialdir = iDir) if (fPath != ""): # 絶対パスが空ではない # ファイル名のみ表示 fName = os.path.basename(fPath) # ファイルパスor名前をセット file1.set(fPath) # 絶対パス file2.set(fName) # ファイル名のみ(曲名表示用) # 選択したファイルを開には絶対パスが必要 # ファイルを自動再生 if (fPath != "") : # ファイル選択時 music_play() else : # ファイル未選択時 pass else : # ファイルパスが空 pass # プログラム終了 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) # 再生回数(-1:無限ループ) sd_loop = -1 # 音楽再生 music_play = sounds.play( loops = sd_loop) # 音量初期値 music_play.set_volume(0.1) # 音量調節 def sound_vol(n): # 0.01刻みで0.00~1.00 の範囲で変化 music_play.set_volume((float)(vol_scale.get()/100)) 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, font = ("",12), # フォントサイズ変更 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) # 終了ボタン # 再生/一時停止 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 = 0) # 再生/一時停止ボタン # 音量スライダ(ラベル) ttk.Label(root, text = '音量').grid(row = 3, column = 0) root.mainloop()
IDLEからプログラムを実行します。
ファイル
ボタンから wavファイル
を選択すると、
再生を開始します。
下図のようにファイル名の表示を大きくしました。
(今回は核P-MODELさんの回=回から「遮眼大師.wav」を使用しています。)
※前回のはコレ(↓)です。比較するとわかりやすいかも?
(前回は核P-MODELさんの「ECHO-233.wav」を使用しました。)
(核P-MODEL好きだね。うん、大好き。)
やーーーーっと音楽プレイヤーらしくなってきました、が。
これからは、今まで使用してきたPygame
から
Pydub
と言うライブラリへの移行を考えています。
理由は、ざっと調べた限り音声/映像の処理に特化しているため
もっといろいろなことができるのかなー、
と言うボンヤリしたものですが。。。(笑)
なので、次回からはPydub
で開発している!
。。。かもしれません。
(Pydub
の他にイイ感じのライブラリがあれば、使ってみようと思っています。)
また、気が向いたときにPygame
も触ってみると思います。
ペースはかなり落ちると思いますが、
来年もブログの更新を続けていきたいです。
相変わらずグッダグダな内容ですが、これにて。
ではでは!
スポンサードリンク