Pygameサウンドプログラミング: set_volumeの基本と実践テクニック

2025-05-31

pygame.mixer.Sound.set_volume() は、Pygameライブラリにおける音声モジュール (pygame.mixer) の一部で、個々の Sound オブジェクトの再生音量を設定するために使用されるメソッドです。

Pygameで音声を扱う際、通常はまず pygame.mixer.Sound オブジェクトを音声ファイル(例: .wav, .mp3)からロードします。この Sound オブジェクトは、その音声データ自体を表します。set_volume() メソッドは、このロードされた Sound オブジェクトが再生される際の音量を、全体的なミキサーの音量とは独立して調整したい場合に使用します。

使い方

set_volume() メソッドは、0.0 から 1.0 までの浮動小数点数を引数として取ります。

  • 0: 音量を最大に設定します。
  • 0: 音量を最小(無音)に設定します。
sound_object.set_volume(volume)
  • volume: 設定したい音量(0.0 から 1.0 の浮動小数点数)。
  • sound_object: pygame.mixer.Sound クラスのインスタンス(つまり、ロードされた音声)。

import pygame

pygame.init()
pygame.mixer.init()

# 音声ファイルをロード
try:
    sound_effect = pygame.mixer.Sound("your_sound_file.wav") # あなたの音声ファイル名に置き換えてください
except pygame.error as e:
    print(f"音声ファイルのロード中にエラーが発生しました: {e}")
    pygame.quit()
    exit()

# 音量を半分に設定
sound_effect.set_volume(0.5)

# 音声を再生
sound_effect.play()

# しばらく待つ(音声が再生される時間)
pygame.time.wait(2000) # 2秒待つ

# 音量を最大に設定し直す
sound_effect.set_volume(1.0)
sound_effect.play()

pygame.time.wait(2000)

# Pygameを終了
pygame.quit()

注意点

  1. グローバル音量との関係: pygame.mixer.Sound.set_volume() は、個々の Sound オブジェクトの音量を設定します。これは pygame.mixer.music.set_volume()pygame.mixer.set_volume() とは異なります。

    • pygame.mixer.set_volume(): 全てのチャンネル(そして結果的に全ての Sound オブジェクト)のグローバルな音量を設定します。
    • pygame.mixer.music.set_volume(): ストリーミング再生される音楽(例: BGM)の音量を設定します。
    • Sound.set_volume() で設定された音量は、その Sound オブジェクトが再生される際の「基準音量」となり、最終的な再生音量はグローバルなミキサーの音量とこの個別の音量の積で決定されます。例えば、グローバル音量が0.8で、Sound オブジェクトの音量が0.5であれば、実際の再生音量は 0.8×0.5=0.4 相当になります。
  2. Sound オブジェクトごと: このメソッドは、呼び出された Sound オブジェクトにのみ影響します。別の Sound オブジェクトの音量を変更したい場合は、そのオブジェクトに対して再度 set_volume() を呼び出す必要があります。

  3. play() の前でも後でも: set_volume()Sound オブジェクトを再生する前でも後でも呼び出すことができます。再生中に音量を変更することも可能です。



pygame.mixer.Sound.set_volume() は比較的シンプルなメソッドですが、Pygameの音声システム全体に関連する問題から、意図した通りの音量にならないといった誤解まで、いくつかの一般的な落とし穴があります。

pygame.mixer が初期化されていない (pygame.error: mixer system not initialized)

エラーの症状
sound_object.set_volume() を呼び出す前に、pygame.mixer.init() または pygame.init() を呼び出していない場合、pygame.error: mixer system not initialized のようなエラーが発生します。

原因
Pygameの音声機能を使用する前に、ミキサーモジュールを初期化する必要があります。

トラブルシューティング
プログラムの冒頭で必ず pygame.init() または pygame.mixer.init() を呼び出してください。通常は pygame.init() を呼び出すだけで十分ですが、より細かい設定(周波数、バッファサイズなど)が必要な場合は、pygame.mixer.pre_init() の後に pygame.mixer.init() を呼び出します。

import pygame

# 良い例: pygame.init() で全てを初期化
pygame.init()

# あるいは、ミキサーだけを初期化(より詳細な設定が必要な場合)
# pygame.mixer.pre_init(44100, -16, 2, 2048) # 周波数, フォーマット, チャンネル数, バッファサイズ
# pygame.mixer.init()

# ここで Sound オブジェクトをロードし、set_volume を使う
# sound = pygame.mixer.Sound("your_sound.wav")
# sound.set_volume(0.5)

set_volume をクラスに対して呼び出している (TypeError: descriptor 'set_volume' for 'Sound' objects doesn't apply to a 'float' object)

エラーの症状
pygame.mixer.Sound.set_volume(0.5) のように、Sound クラス自体に対して set_volume() を呼び出してしまうと、TypeError が発生します。

原因
set_volume() は、pygame.mixer.Sound クラスのインスタンス(つまり、ロードされた特定の音声データ)に対して呼び出すメソッドです。クラス自体に対して呼び出すことはできません。

トラブルシューティング
まず Sound オブジェクトを生成(ロード)し、そのインスタンスに対して set_volume() を呼び出します。

import pygame

pygame.init()
pygame.mixer.init()

# 誤った例:
# pygame.mixer.Sound.set_volume(0.5) # TypeError になる

# 正しい例:
sound_effect = pygame.mixer.Sound("your_sound_file.wav")
sound_effect.set_volume(0.5)

音声ファイルがロードされていない、またはパスが間違っている (pygame.error: Unable to open file 'filename')

エラーの症状
pygame.mixer.Sound() で音声ファイルをロードしようとした際に、ファイルが見つからない、またはサポートされていない形式の場合にエラーが発生します。この場合、Sound オブジェクトが正しく生成されないため、その後の set_volume() を呼び出す前に問題が発生します。

原因

  • Pygameがサポートしていない音声形式(例: 一部のMP3ファイルは追加のライブラリが必要な場合があります。WAVやOGGが推奨されます)。
  • ファイルが指定された場所に存在しない。
  • ファイル名に誤りがある。
  • 音声ファイルのパスが間違っている。

トラブルシューティング

  • PygameがサポートしているWAVやOGG形式のファイルを使用することを推奨します。MP3で問題が発生する場合は、変換を検討してください。
  • 音声ファイルが your_sound_file.wav のように、指定したパスに実際に存在するか確認します。
  • ファイル名にスペルミスがないか確認します。
  • 音声ファイルのパスが正しいことを確認します。相対パスを使用している場合は、スクリプト実行時のカレントディレクトリからのパスを考慮してください。

音量を変更しても効果がない、または期待通りにならない

症状
set_volume() を呼び出しても、音が全く変わらない、またはほとんど変化がないように感じる。

  • バッファサイズの設定
    稀に、pygame.mixer.pre_init() で設定するバッファサイズが原因で、音量の変化がスムーズでなかったり、音が途切れたりする場合があります。特にレイテンシを重視してバッファサイズを小さくしすぎると問題が起こり得ます。 解決策: デフォルトのバッファサイズ(通常は2048)を使用するか、pygame.mixer.pre_init() を試行錯誤して調整します。

  • 複数のサウンドが同時に再生されている
    複数のサウンドが同時に再生されている場合、それぞれの set_volume() 設定が競合する可能性があります。例えば、あるサウンドの音量を下げても、別の大きな音量のサウンドが鳴っているために効果が分かりにくいことがあります。 解決策: 各サウンドの音量を個別に調整し、全体のミックスを考慮する必要があります。また、pygame.mixer.Channel を使って、より細かくチャンネルごとの音量を制御することも可能です。

  • 音量設定の範囲外の値
    set_volume() の引数には 0.0 から 1.0 までの浮動小数点数しか指定できません。これ以外の値を指定すると、予期しない動作をするか、エラーになる可能性があります(通常は0.0~1.0にクランプされますが、意図しない挙動を防ぐため正しい範囲で指定すべきです)。 解決策: sound_object.set_volume(0.0) から sound_object.set_volume(1.0) の間の値を指定しているか確認します。

  • PCのシステム音量
    Pygameの音量は、最終的にオペレーティングシステム(OS)のマスター音量に影響されます。OSの音量がミュートされている、または非常に小さい場合、Pygame側で音量を最大にしても聞こえません。 解決策: PCのマスター音量やアプリケーションごとの音量設定(ミキサー)を確認し、適切に設定されているか確認します。

  • グローバルなミキサー音量 (pygame.mixer.set_volume()) の影響
    Sound.set_volume() は個々のサウンドの音量を設定しますが、最終的な再生音量はミキサー全体の音量 (pygame.mixer.set_volume()) にも依存します。ミキサー全体の音量が非常に小さい場合、個々のサウンドの音量を上げても効果が薄いことがあります。 解決策: pygame.mixer.set_volume(1.0) でミキサー全体の音量を最大に設定してみて、個々のサウンドの音量設定が有効になるか確認します。



これらの例を実行するには、Pygameがインストールされており、再生する音声ファイル(.wav.ogg、またはPygameがサポートする形式)が用意されている必要があります。

例1: 基本的な音量設定と再生

この例では、サウンドをロードし、その音量を設定して再生します。

import pygame
import time # 音声が再生されるのを待つために使用

pygame.init() # Pygameの全てのモジュールを初期化
pygame.mixer.init() # ミキサーモジュールを初期化 (pygame.init()に含まれるが、明示的に記述することも可能)

# ----------------------------------------------------
# 設定
# ----------------------------------------------------
SOUND_FILE = "your_sound_file.wav" # <-- ここをあなたの音声ファイル名に置き換えてください
DEFAULT_VOLUME = 0.5
HIGH_VOLUME = 1.0
LOW_VOLUME = 0.2

# ----------------------------------------------------
# サウンドのロード
# ----------------------------------------------------
try:
    sound_effect = pygame.mixer.Sound(SOUND_FILE)
    print(f"'{SOUND_FILE}' をロードしました。")
except pygame.error as e:
    print(f"エラー: サウンドファイル '{SOUND_FILE}' をロードできませんでした。{e}")
    print("適切な音声ファイルがスクリプトと同じディレクトリにあるか確認してください。")
    pygame.quit()
    exit()

# ----------------------------------------------------
# 音量を設定して再生する
# ----------------------------------------------------

print(f"\n1. デフォルト音量 ({DEFAULT_VOLUME}) で再生...")
sound_effect.set_volume(DEFAULT_VOLUME)
sound_effect.play()
time.sleep(2) # 2秒間再生を待つ

print(f"\n2. 高い音量 ({HIGH_VOLUME}) で再生...")
sound_effect.set_volume(HIGH_VOLUME)
sound_effect.play()
time.sleep(2)

print(f"\n3. 低い音量 ({LOW_VOLUME}) で再生...")
sound_effect.set_volume(LOW_VOLUME)
sound_effect.play()
time.sleep(2)

print("\n再生終了。")

# ----------------------------------------------------
# Pygameの終了
# ----------------------------------------------------
pygame.mixer.quit() # ミキサーモジュールを終了
pygame.quit() # Pygameの全てのモジュールを終了

解説

  1. pygame.init()pygame.mixer.init() でPygameとミキサーを初期化します。
  2. pygame.mixer.Sound() で音声ファイルをロードし、sound_effect オブジェクトを作成します。
  3. sound_effect.set_volume() を使って、再生する前に音量を設定します。
  4. sound_effect.play() で音声を再生します。time.sleep() は、音声が再生される時間を確保するために使っています。

例2: 再生中に音量を動的に変更する

この例では、サウンドが再生されている間に音量を徐々に変更する(フェードイン/アウトのような効果)方法を示します。

import pygame
import time

pygame.init()
pygame.mixer.init()

SOUND_FILE = "your_sound_file.wav" # <-- ここをあなたの音声ファイル名に置き換えてください
FADE_DURATION = 3 # フェードにかける秒数
FPS = 30 # 1秒あたりの更新回数

try:
    sound_effect = pygame.mixer.Sound(SOUND_FILE)
    print(f"'{SOUND_FILE}' をロードしました。")
except pygame.error as e:
    print(f"エラー: サウンドファイル '{SOUND_FILE}' をロードできませんでした。{e}")
    pygame.quit()
    exit()

# ----------------------------------------------------
# フェードインの例
# ----------------------------------------------------
print(f"\nサウンドを {FADE_DURATION} 秒かけてフェードインさせます...")
sound_effect.set_volume(0.0) # 最初は無音に設定
sound_effect.play() # サウンドを再生開始

for i in range(int(FADE_DURATION * FPS)):
    volume = i / (FADE_DURATION * FPS) # 0.0 から 1.0 へ徐々に音量を増加
    sound_effect.set_volume(volume)
    print(f"  音量: {volume:.2f}")
    time.sleep(1 / FPS)

print("フェードイン完了。しばらく再生...")
time.sleep(2) # フェードイン後、しばらくフル音量で再生

# ----------------------------------------------------
# フェードアウトの例
# ----------------------------------------------------
print(f"\nサウンドを {FADE_DURATION} 秒かけてフェードアウトさせます...")
# 現在の音量から開始 (フェードイン後の1.0から)
for i in range(int(FADE_DURATION * FPS)):
    volume = 1.0 - (i / (FADE_DURATION * FPS)) # 1.0 から 0.0 へ徐々に音量を減少
    sound_effect.set_volume(volume)
    print(f"  音量: {volume:.2f}")
    time.sleep(1 / FPS)

sound_effect.stop() # 完全に音が聞こえなくなったら停止
print("フェードアウト完了。")

pygame.mixer.quit()
pygame.quit()

解説

  1. sound_effect.play() で音声を再生した後、ループ内で sound_effect.set_volume() を繰り返し呼び出しています。
  2. ループの各ステップで、volume 変数を計算し、その値を使って音量を徐々に変化させています。
  3. time.sleep(1 / FPS) は、音量変更の間に短い間隔を設けることで、スムーズな変化を実現しています。

例3: 複数のサウンドの音量を個別に制御する

この例では、異なるサウンドオブジェクトの音量をそれぞれ個別に設定する方法を示します。

import pygame
import time

pygame.init()
pygame.mixer.init()

# ----------------------------------------------------
# 設定
# ----------------------------------------------------
SOUND_FILE_1 = "your_sound_file_1.wav" # <-- 1つ目の音声ファイル
SOUND_FILE_2 = "your_sound_file_2.wav" # <-- 2つ目の音声ファイル (異なる音源が望ましい)

# ----------------------------------------------------
# サウンドのロード
# ----------------------------------------------------
try:
    sound_a = pygame.mixer.Sound(SOUND_FILE_1)
    sound_b = pygame.mixer.Sound(SOUND_FILE_2)
    print(f"'{SOUND_FILE_1}' と '{SOUND_FILE_2}' をロードしました。")
except pygame.error as e:
    print(f"エラー: サウンドファイルをロードできませんでした。{e}")
    print("適切な音声ファイルがスクリプトと同じディレクトリにあるか確認してください。")
    pygame.quit()
    exit()

# ----------------------------------------------------
# 個別の音量設定と再生
# ----------------------------------------------------

print("\nサウンドAを大きく、サウンドBを小さく再生します...")
sound_a.set_volume(0.8) # サウンドAの音量を大きく
sound_b.set_volume(0.3) # サウンドBの音量を小さく

sound_a.play()
sound_b.play()
time.sleep(3) # 3秒間再生

print("\nサウンドAを小さく、サウンドBを大きく再生します...")
sound_a.set_volume(0.3) # サウンドAの音量を小さく
sound_b.set_volume(0.8) # サウンドBの音量を大きく

# 再生中のサウンドの音量を変更するため、ここではplay()を再度呼び出す必要はない
# すでに再生されているチャンネルがあれば、その音量設定が適用される
# ただし、チャンネルが空いていて新しい再生を開始したい場合はplay()が必要
# 今回は、すでに再生されている前提で音量変更のみを行う
# sound_a.play() # 必要に応じてコメントを外して再度再生
# sound_b.play() # 必要に応じてコメントを外して再度再生
time.sleep(3)

# 全てのサウンドを停止
sound_a.stop()
sound_b.stop()

print("\n再生終了。")

pygame.mixer.quit()
pygame.quit()

解説

  1. 異なる2つの Sound オブジェクトを作成します。
  2. それぞれの Sound オブジェクトに対して独立して set_volume() を呼び出します。
  3. これにより、同時に再生される複数のサウンドでも、個別の音量バランスを制御できることがわかります。

例4: グローバルなミキサー音量との関係

この例では、Sound.set_volume()pygame.mixer.set_volume() の関係を示します。

import pygame
import time

pygame.init()
pygame.mixer.init()

SOUND_FILE = "your_sound_file.wav" # <-- ここをあなたの音声ファイル名に置き換えてください

try:
    sound_effect = pygame.mixer.Sound(SOUND_FILE)
    print(f"'{SOUND_FILE}' をロードしました。")
except pygame.error as e:
    print(f"エラー: サウンドファイル '{SOUND_FILE}' をロードできませんでした。{e}")
    pygame.quit()
    exit()

# ----------------------------------------------------
# 1. Sound の音量のみを設定し、グローバル音量はデフォルト (1.0)
# ----------------------------------------------------
pygame.mixer.set_volume(1.0) # グローバル音量を最大に設定
sound_effect.set_volume(0.5) # Sound オブジェクトの音量を半分に設定
print(f"\n1. グローバル音量: 1.0, Sound音量: 0.5 で再生 (実際: 0.5相当)...")
sound_effect.play()
time.sleep(2)

# ----------------------------------------------------
# 2. グローバル音量も設定する (乗算効果)
# ----------------------------------------------------
pygame.mixer.set_volume(0.5) # グローバル音量を半分に設定
sound_effect.set_volume(0.8) # Sound オブジェクトの音量を8割に設定
print(f"\n2. グローバル音量: 0.5, Sound音量: 0.8 で再生 (実際: 0.5 * 0.8 = 0.4相当)...")
sound_effect.play()
time.sleep(2)

# ----------------------------------------------------
# 3. グローバル音量をミュートし、Sound音量は高くても聞こえない
# ----------------------------------------------------
pygame.mixer.set_volume(0.0) # グローバル音量をミュート
sound_effect.set_volume(1.0) # Sound オブジェクトの音量を最大に設定
print(f"\n3. グローバル音量: 0.0 (ミュート), Sound音量: 1.0 で再生 (実際: 0.0相当)...")
sound_effect.play()
time.sleep(2)

print("\n再生終了。")

pygame.mixer.quit()
pygame.quit()
  1. pygame.mixer.set_volume() は、Pygameのミキサー全体(全てのチャンネルに影響)の音量を制御します。
  2. sound_effect.set_volume() は、個々の Sound オブジェクトの音量を制御します。
  3. 最終的な再生音量は、グローバルなミキサー音量と個々の Sound オブジェクトの音量の「積」で決まります。どちらか一方が0.0であれば、そのサウンドは聞こえません。


Pygameの音声処理は階層的な構造を持っています。

  1. システム全体の音量: OSレベルでの音量設定。
  2. Pygameミキサーのグローバル音量: pygame.mixer.set_volume()
  3. 個々のチャンネルの音量: pygame.mixer.Channel.set_volume()
  4. 個々のSoundオブジェクトの音量: pygame.mixer.Sound.set_volume() (これについて前回説明しました)
  5. 音楽ストリームの音量: pygame.mixer.music.set_volume()

これらはそれぞれ異なるレベルで音量に影響を与え、最終的な再生音量はこれらの積として決定されます。

pygame.mixer.set_volume(volume) (ミキサー全体のグローバル音量)

使い方
引数 volume0.0 (無音) から 1.0 (最大) までの浮動小数点数です。

import pygame
import time

pygame.init()
pygame.mixer.init()

sound_file = "your_sound_file.wav"
try:
    sound_effect = pygame.mixer.Sound(sound_file)
except pygame.error as e:
    print(f"エラー: サウンドファイルをロードできませんでした: {e}")
    pygame.quit()
    exit()

print("サウンドのボリュームは0.5に設定。グローバル音量を変更します。")
sound_effect.set_volume(0.5) # Soundオブジェクトの音量は一定

# グローバル音量を1.0で再生
pygame.mixer.set_volume(1.0)
print("グローバル音量: 1.0 (Sound音量 0.5 -> 実際の再生 0.5)")
sound_effect.play()
time.sleep(2)

# グローバル音量を0.2で再生
pygame.mixer.set_volume(0.2)
print("グローバル音量: 0.2 (Sound音量 0.5 -> 実際の再生 0.1)")
sound_effect.play()
time.sleep(2)

pygame.mixer.quit()
pygame.quit()

mixer.Sound.set_volume との違い
Sound.set_volume が特定の音声データに紐づく音量設定であるのに対し、pygame.mixer.set_volume はPygameが扱う全ての音声出力に影響します。例えば、効果音とBGMがあり、全体的に音量を下げたい場合に便利です。

pygame.mixer.Channel.set_volume(volume) (個々のチャンネルの音量)

Sound.play() メソッドは、通常、利用可能な次のチャンネルでサウンドを再生します。より細かく制御したい場合は、特定のチャンネルを取得してそのチャンネルでサウンドを再生し、そのチャンネルの音量を個別に設定できます。

使い方
pygame.mixer.Channel(id) でチャンネルオブジェクトを取得するか、pygame.mixer.find_channel() で空いているチャンネルを取得します。その後、channel.set_volume(volume) を呼び出します。

import pygame
import time

pygame.init()
pygame.mixer.init()

sound_file_A = "your_sound_file_A.wav" # 異なるサウンドファイルを用意
sound_file_B = "your_sound_file_B.wav"

try:
    sound_A = pygame.mixer.Sound(sound_file_A)
    sound_B = pygame.mixer.Sound(sound_file_B)
except pygame.error as e:
    print(f"エラー: サウンドファイルをロードできませんでした: {e}")
    pygame.quit()
    exit()

# チャンネル0とチャンネル1を取得 (あるいは find_channel() を使う)
channel_0 = pygame.mixer.Channel(0)
channel_1 = pygame.mixer.Channel(1)

# 各Soundオブジェクトの音量を設定 (これはSoundオブジェクト自体に紐づく)
sound_A.set_volume(1.0) # 最大
sound_B.set_volume(1.0) # 最大

print("チャンネルの音量を設定して再生します。")

# チャンネル0でsound_Aを再生し、チャンネル0の音量を設定
channel_0.play(sound_A, loops=-1) # -1で無限ループ
channel_0.set_volume(0.2) # チャンネル0は小さく
print(f"チャンネル0でSound Aを音量 {channel_0.get_volume():.2f} で再生中 (Sound Aの音量 1.0 * チャンネル0の音量 0.2 = 0.2相当)")

# チャンネル1でsound_Bを再生し、チャンネル1の音量を設定
channel_1.play(sound_B, loops=-1)
channel_1.set_volume(0.8) # チャンネル1は大きく
print(f"チャンネル1でSound Bを音量 {channel_1.get_volume():.2f} で再生中 (Sound Bの音量 1.0 * チャンネル1の音量 0.8 = 0.8相当)")

time.sleep(5)

# チャンネル0の音量を変更してみる
channel_0.set_volume(0.6)
print(f"チャンネル0の音量を {channel_0.get_volume():.2f} に変更しました。")
time.sleep(3)

# 全てのチャンネルを停止
channel_0.stop()
channel_1.stop()
print("再生終了。")

pygame.mixer.quit()
pygame.quit()

mixer.Sound.set_volume との違い
Sound.set_volume は、その Sound オブジェクトが「どのチャンネルで再生されようとも」適用される基本的な音量設定です。一方、Channel.set_volume は、特定のチャンネルで現在再生されているサウンドの音量に影響を与えます。同じ Sound オブジェクトを複数のチャンネルで異なる音量で再生したい場合に特に役立ちます。また、チャンネルが空になったり、別のサウンドが再生されたりすると、そのチャンネルの音量設定はリセットされることがあるので注意が必要です。

pygame.mixer.music.set_volume(volume) (音楽ストリームの音量)

使い方
pygame.mixer.music.load() で音楽ファイルをロードし、pygame.mixer.music.play() で再生を開始します。その後、pygame.mixer.music.set_volume(volume) で音量を設定します。

import pygame
import time

pygame.init()
pygame.mixer.init()

music_file = "your_music_file.mp3" # <-- MP3やOGGなどの音楽ファイル
try:
    pygame.mixer.music.load(music_file)
    print(f"'{music_file}' をロードしました。")
except pygame.error as e:
    print(f"エラー: 音楽ファイル '{music_file}' をロードできませんでした。{e}")
    print("適切な音楽ファイルがスクリプトと同じディレクトリにあるか確認してください。")
    pygame.quit()
    exit()

# 音楽の再生を開始
pygame.mixer.music.play(-1) # -1で無限ループ

# 最初は低音量
pygame.mixer.music.set_volume(0.2)
print("音楽を低音量 (0.2) で再生中...")
time.sleep(3)

# 音量を徐々に上げる
print("音楽の音量を徐々に上げます...")
for i in range(10):
    volume = i / 9.0 # 0.0 から 1.0 へ
    pygame.mixer.music.set_volume(volume)
    print(f"  音楽音量: {volume:.2f}")
    time.sleep(0.5)

print("音楽音量を最大に設定しました。")
time.sleep(3)

# 音楽を停止
pygame.mixer.music.stop()
print("音楽再生終了。")

pygame.mixer.quit()
pygame.quit()

mixer.Sound.set_volume との違い
pygame.mixer.music は、通常はゲームのBGMなど、一度に一つしか再生されない長い音声を扱うために設計されています。Sound オブジェクトが同時に多数再生できる効果音に適しているのに対し、music はBGMに特化しており、よりメモリ効率の良いストリーミング再生を提供します。そのため、music モジュールには Sound オブジェクトのような個別のインスタンスはありません。

  • pygame.mixer.music.set_volume(): BGM(音楽ストリーム)の音量を設定する。
  • pygame.mixer.set_volume(): Pygameミキサー全体のマスター音量を設定する。全てのサウンド・音楽に影響する。
  • pygame.mixer.Channel.set_volume(): 特定のチャンネルで現在再生されているサウンドの音量を設定する。同じサウンドでもチャンネルごとに異なる音量にできる。
  • pygame.mixer.Sound.set_volume(): 個々の効果音の音量を設定する。