Pythonで音楽を再生したい(3) pygame編
スドウです。
前回のソースを少し改良してみました。
追加機能は、「一時停止」「再開」ボタンと「音量スライダー」です。
ソースと同じフォルダに sound.wav
を入れておきます。
以下ソースです。
import wave import pygame.mixer as pyx import tkinter as tk def main(): base = tk.Tk() # 再生制御 base2 = tk.Tk() # 音量制御 sound_file = "sound.wav" pyx.init(frequency = 44100, size = -16, channels = 2, buffer = 4096) # 初期設定 sounds = pyx.Sound(sound_file) # 再生ファイルを設定 sd_loop = -1 # 再生階数(-1:無限ループ) channel = sounds.play(loops = sd_loop) # 音楽再生 sound_time = sounds.get_length() # 再生時間取得(曲の長さ, 秒単位) print(sound_time) channel.set_volume(0.5) # 音量初期値 sound_end = channel.get_endevent() # 再生終了時のイベント取得 # 再生/一時停止 def push1(): print('一時停止') channel.pause() # 一時停止 def push2(): print('再開') channel.unpause() # 再開 # 音量調節 def sound_vol(n): channel.set_volume((float)(scale2.get())) button1 = tk.Button(base, text = '一時停止' , command = push1).pack() button2 = tk.Button(base, text = '再開' , command = push2).pack() tk.Label(base2, text = '音量').pack() scale2 = tk.Scale(base2, orient = 'h', from_ = 0.0, to = 1.0, resolution = 0.1 ,command = sound_vol ) scale2.set(0.5) # 音量スライダーの初期値 scale2.pack() base.mainloop() if __name__ == '__main__': main()
IDLEからプログラムを実行すると、sound.wav
が再生されます。
音量注意
一応、音楽の一時停止・再開の機能は実装できました。
(ボタンの数は増えましたが。。。)
また、音楽の再生中に音量の変更ができるようになりました。
ここまでたどり着くのに、かなりの時間を要しましたが、がんばりました(^^;)
ただ実のところ、追加したい機能が他にもいくつかありまして。。。 その内の1つが、現在の再生時間の表示です。
それで、時間表示ができるように変更してるのですが、 以下のソースを実行すると
import wave import pygame.mixer as pyx import time import tkinter as tk def main(): base = tk.Tk() # 再生制御 base2 = tk.Tk() # 音量制御 sound_file = "sound.wav" pyx.init(frequency = 44100, size = -16, channels = 2, buffer = 4096) # 初期設定 sounds = pyx.Sound(sound_file) # 再生ファイルを設定 sd_loop = -1 # 再生階数(-1:無限ループ) channel = sounds.play(loops = sd_loop) # 音楽再生 sound_time = sounds.get_length() # 再生時間取得(曲の長さ, 秒単位) print(sound_time) channel.set_volume(0.5) # 音量初期値 # 再生/一時停止 def push1(): print('一時停止') channel.pause() # 一時停止 def push2(): print('再開') channel.unpause() # 再開 # 音量調節 def sound_vol(n): channel.set_volume((float)(scale2.get())) button1 = tk.Button(base, text = '一時停止' , command = push1).pack() button2 = tk.Button(base, text = '再開' , command = push2).pack() tk.Label(base2, text = '音量').pack() scale2 = tk.Scale(base2, orient = 'h', from_ = 0.0, to = 1.0, resolution = 0.1 ,command = sound_vol ) scale2.set(0.5) # 音量スライダーの初期値 scale2.pack() time_count = 0.0 while pyx.get_busy(): # 音楽再生中のときwhile実行 print(time_count) time.sleep(1) if(time_count < sound_time): time_count += 1 else : time_count = 0.0 base.mainloop() if __name__ == '__main__': main()
whileを使用し再生時間の表示はできました。が、
while以降の処理が実行されずにウィンドウが表示されません。
そのため、一時停止や音量変更の設定が一切できません。
どうしよう。。。
Pythonを学習して日が浅い&オブジェクト指向がほとんどまったくわかっていないので、現状解決策がありません。
これからは、「オブジェクト指向とな何ぞや」という部分も含めてPythonの学習をゆっくり進めていこうかと考えています。
ブログが三日坊主にならなくてよかった
ではでは!
スポンサードリンク
Pythonで音楽を再生したい(2) pygame編
こんにちは、スドウです。
前回に引き続き、Pythonで .wav
形式の音楽ファイルを再生してみようと思います。
今回は pygame
ライブラリを使用します。
pygame
は外部ライブラリなので、予めインストールしておいてください。
以下にソースです。
def main(): sound_file = "sound.wav" # 再生する.wavファイル pyx.init(frequency = 44100, size = -16, channels = 2, buffer = 4096) \# 初期設定 sounds = pyx.Sound(sound_file) # 再生ファイルを設定 channel = sounds.play(loops = -1) # 音楽再生(-1:無限ループ) sound_time = sounds.get_length() # 再生時間取得(曲の長さ, 秒単位) print(sound_time) volume = channel.get_volume() # 音量取得 print(volume) channel.set_volume(0.5) # 音量変更 if __name__ == '__main__': main()
IDLEからプログラムを実行すると、sound.wav
が再生されます。
音量注意
ソース内のコメントで各機能に軽く触れていますが、簡単に説明します。
channel = sounds.play(loops = -1)
で再生回数を設定します。
loops = 0
の場合は1回のみ再生されます。
( loops = n
の場合n+1回再生。-1
の場合は無限ループ)
volume = channel.get_volume()
で音量情報を取得します。
音量はデフォルトで最大(1.0)になっています。
次に、channel.set_volume(0.5)
で音量を0.5に設定します。
pygame
を使用して音楽再生ができました。
個人的には、前回使用したwinsound
よりも音量等の設定ができるのはうれしいですね。
pygame
の 日本語サイト を見ると、一時停止・再開もできるみたいですね。
これからこういった機能も実装してみたいですね。
ではでは!
スポンサードリンク
Pythonで音楽を再生したい(1) winsound編
こんにちは、スドウです。
WindowsPCでPythonを使って音楽再生をしてみたいと思います。
再生する音源は.wav
です。
(タイトルに(1)ってあるけど、どのくらい続くのかなぁ。。。)
今回は標準ライブラリの winsound
wave
を使用します。
以下、ソースコードです。
再生する音源はソースファイルと同じフォルダに入れておきます。
import wave import winsound as ws sound_name = 'sound.wav' ws.PlaySound(sound_name , ws.SND_ALIAS) # 指定した音声ファイルがある場合再生。ない場合はシステム音を再生(音量注意)
IDLEから実行すると音楽が再生されます。
が、かなり大きい音で再生されます。
(そのためPC本体の音量は3以下に設定しています)
思っていたよりカンタンにできてしまいました。
ただ現状では
1. 一時停止ができない(実行したら1曲フル再生)
2. 別の曲を再生するにはソースを変更する必要がある
3. 音量調節ができない(PC本体音量で調整)
などなど
「音楽再生」で見れば一応は目標達成ですが、
「音楽プレイヤー」として見るとイマイチどころか全然ですね。。。
ですので、今後は PyAudio
か pygame
を使ってみようかな、と考えています。
(サンプルは見たけど難しそうだなぁ。。。)