Pygameを用いて音声ファイル(mp3形式、wave形式)を再生する方法について解説します。
pygame.mixerモジュールの使い方
Pygameには、音楽や効果音を扱うためのpygame.mixer
モジュールが用意されています。
以下に、pygame.mixerモジュールのの基本的な操作手順を示します。
1. Pygameの初期化
Pygameをインポートし、pygame.mixer
を初期化します。
import pygame
pygame.init()
pygame.mixer.init()
2. 音楽ファイルの読み込み
次に、再生したい音楽ファイルを読み込みます。以下はsample.mp3
というファイルを例にします。
pygame.mixer.music.load("sample.mp3")
3. 音楽の再生
音楽を再生するには、pygame.mixer.music.play()
を使用します。
pygame.mixer.music.play()
引数に-1
を指定すると、無限ループで再生されます。
pygame.mixer.music.play(-1)
4. 音楽の停止
音楽を停止するには、pygame.mixer.music.stop()
を使用します。
pygame.mixer.music.stop()
5. 音量の調整
音量を調整するには、pygame.mixer.music.set_volume()
を使用します。音量は0.0から1.0の範囲で設定します。
pygame.mixer.music.set_volume(0.5) # 音量を50%に設定
6. 一時停止と再開
音楽を一時停止するには、pygame.mixer.music.pause()
を使用し、再開するにはpygame.mixer.music.unpause()
を使用します。
pygame.mixer.music.pause() # 一時停止
pygame.mixer.music.unpause() # 再開
サンプルコード1
以下に、簡単な音楽再生プログラムを示します。
このプログラムを実行すると、sample.mp3
が無限ループで再生され、「画面を閉じる」ボタンを押すか、Escキーを押すと終了します。
音楽ファイルのパスを適切に設定して試してみてください。なお、waveファイルを再生したい場合、waveファイルのパスを指定します。
動画解説
サンプルコード2
次に、音楽の再生を操作できる簡単なGUIアプリをPygameで作成します。
以下のプログラムでは、音楽の再生、停止、一時停止、再開をボタンで操作します。
サンプルコード2の解説
上記サンプルコードの各部分について解説をします。
インポートと初期設定
import pygame
import sys
pygame
をインポートします。sys
モジュールは、プログラムの終了時に使用するのでインポートします。
画面サイズと音声ファイルパスの設定
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 300
MUSIC_FILE_PATH = "/Users/github/sample/python/pygame/tutorial/sample.mp3"
- 画面の幅と高さを設定しています。
- 再生する音楽ファイルのパスを指定しています。
ボタンの作成関数
def create_button(screen, text, x, y, width, height, color, action=None):
font = pygame.font.Font(None, 36)
button_rect = pygame.Rect(x, y, width, height)
pygame.draw.rect(screen, color, button_rect)
text_surf = font.render(text, True, (255, 255, 255))
text_rect = text_surf.get_rect(center=button_rect.center)
screen.blit(text_surf, text_rect)
return button_rect
- ボタンを作成し、画面に描画する関数です。
text
はボタンに表示するテキスト、x
とy
はボタンの位置、width
とheight
はボタンのサイズ、color
はボタンの色を指定します。pygame.Rect
でボタンの矩形を作成し、pygame.draw.rect
でボタンを描画します。font.render
でテキストを描画し、ボタンの中央に配置します。
メイン関数
def main():
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((SCREEN_WIDTH , SCREEN_HEIGHT))
pygame.display.set_caption("Music Player")
pygame.mixer.music.load(MUSIC_FILE_PATH)
pygame.init()
でPygameを初期化します。pygame.mixer.init()
でミキサーを初期化します。pygame.display.set_mode()
で画面サイズを設定し、ウィンドウを作成します。pygame.display.set_caption()
でウィンドウのタイトルを設定します。pygame.mixer.music.load()
で音楽ファイルを読み込みます。
メインループとイベント処理
running = True
while running:
screen.fill((0, 0, 0))
play_button = create_button(screen, "Play", 50, 200, 100, 50, (0, 180, 0))
stop_button = create_button(screen, "Stop", 250, 200, 100, 50, (200, 0, 0))
pause_button = create_button(screen, "Pause", 50, 100, 100, 50, (0, 0, 180))
unpause_button = create_button(screen, "Unpause", 250, 100, 100, 50, (0, 0, 180))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
if play_button.collidepoint(event.pos):
pygame.mixer.music.play(-1)
if stop_button.collidepoint(event.pos):
pygame.mixer.music.stop()
if pause_button.collidepoint(event.pos):
pygame.mixer.music.pause()
if unpause_button.collidepoint(event.pos):
pygame.mixer.music.unpause()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
pygame.display.flip()
pygame.quit()
sys.exit()
running
フラグがTrue
の間、ループが続きます。screen.fill((0, 0, 0))
で画面を黒でクリアします。create_button()
関数で再生、停止、一時停止、再開の各ボタンを作成し、画面に描画します。pygame.event.get()
でイベントを取得し、各イベントに応じた処理を行います。pygame.QUIT
イベントでループを終了します。pygame.MOUSEBUTTONDOWN
イベントでボタンがクリックされたかを判定し、対応する音楽操作を行います。pygame.KEYDOWN
イベントでEscキーが押されたかを判定し、ループを終了します。
pygame.display.flip()
で画面を更新します。
プログラムの終了処理
pygame.quit()
sys.exit()
pygame.quit()
でPygameを終了し、sys.exit()
でプログラムを終了します。
関連ページ
Pygameの使い方については以下ページで解説しています。
Python全般については以下ページで解説しています。
コメント