BGMと効果音の再生
効果音やBGMを鳴らす方法を紹介します。Pygameでは、効果音用にwavとogg、 BGM用にmp3とoggをサポートしています。midiも鳴りましたがループ再生しないなど問題があるようです。midiはiTunesなどでmp3に変換してから使った方がよさそうです。ただ鳴らすだけではつまらないので画像の移動と跳ね返り処理のスクリプトをもとに壁にあたったら音が鳴るようにしてみます。
効果音はザ・マッチメイカァズさん、MP3はTAM Music Factoryさんからお借りしました。
サンプルスクリプト
#!/usr/bin/env python # -*- coding: utf-8 -*- import pygame from pygame.locals import * import sys SCR_WIDTH,SCR_HEIGHT = 640,480 pygame.init() screen = pygame.display.set_mode((SCR_WIDTH,SCR_HEIGHT)) pygame.display.set_caption(u"サウンドテスト") # 画像をロード img = pygame.image.load("python.png").convert_alpha() img_rect = img.get_rect() # サウンドをロード hit_sound = pygame.mixer.Sound("hit.wav") vx = vy = 300 # 1秒間の移動ピクセル clock = pygame.time.Clock() # BGMを再生 pygame.mixer.music.load("tam-n11.mp3") pygame.mixer.music.play(-1) while True: time_passed = clock.tick(60) time_passed_seconds = time_passed / 1000.0 # 画像の移動 img_rect.x += vx * time_passed_seconds img_rect.y += vy * time_passed_seconds # 壁にぶつかると跳ね返る if img_rect.left < 0 or img_rect.right > SCR_WIDTH: hit_sound.play() # サウンドを再生 vx = -vx if img_rect.top < 0 or img_rect.bottom > SCR_HEIGHT: hit_sound.play() # サウンドを再生 vy = -vy screen.fill((0,0,255)) screen.blit(img, img_rect) pygame.display.update() for event in pygame.event.get(): if event.type == QUIT: sys.exit() if event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit()
効果音のロードと再生
hit_sound = pygame.mixer.Sound("hit.wav") # サウンドをロード hit_sound.play() # サウンドを再生
効果音はpygame.mixer.Soundにファイルを名を指定するだけで簡単にロードできます。戻り値はSound オブジェクトです。鳴らすときはSound.play()を使います。同時にいくつかの効果音を鳴らすこともできます。
BGMのロードと再生
pygame.mixer.music.load("tam-n11.mp3") # BGMをロード pygame.mixer.music.play(-1) # BGMを再生
BGMはpygame.mixer.music.load()にファイル名を指定するだけで簡単にロードできます。こっちはサウンドと違って戻り値は返しません。BGMを鳴らすときはpygame.mixer.music.play()で鳴らします。引数に-1を指定するとループ再生します。
load()にmidiファイルを指定するとちゃんと再生されましたが、私の環境ではループ再生しませんでした。ドキュメントにもmidiをサポートしていると明示してないのでmp3かoggを使った方がよいかもしれません。midiをmp3に変換する方法ですが、iTunesなどでできます。midiファイルをiTunesで読み込んで、右クリック→選択項目をMP3に変換でできます。